IT/MSSQL

[MS SQL] WITH (NOLOCK) 공유 잠금 해제

유자애플 2020. 2. 25. 15:59
반응형

MS SQL에서 SELECT문에 WITH (NOLOCK)을 걸어주면 공유잠금을 걸지 않고 바로 조회할수 있습니다.

 

MS SQL에서는 기본적으로 SELECT문이 실행되었을 때 공유잠금이 걸립니다. 즉. SELECT문이 수행되는 테이블에 대해서

 

INSERT, UPDATE, DELETE 문이 수행되고 있다면 SELECT문은 선행 작업이 모두 끝날때까지 LOCK이 걸립니다. 

 

이때 SELECT 문에 WITH(NOLOCK)을 걸어주면 선행작업의 결과와 관계없이 바로 SELECT문이 수행되어서 결과를 반환하게 됩니다.

(* 위에 같다면 조회 및 다른 업무의 속도가 상승하게 됩니다. NOLOCK을 사용하는 가장 중요한 이유죠)

 

SELECT * 

FROM TABLE1 WITH(NOLOCK)

 

SELECT문장에서 여러 테이블을 조인해서 가져오는 경우 WITH(NOLOCK)을 사용하기 위해서 모든 테이블에 적어주어야 합니다.

 

그러나 그렇게 각 문장마다 삽입하지 않고 한번에 모든 테이블에 걸어주는 문장이 있습니다.

 

 SET TRANSACTION ISOLATION LEVER READ UNCOMMITTED

 

이 문장을 프로시저 시작 부분에 추가해 주면 모든 테이블에 NOLOCK이 걸리게 됩니다.

 

EX)

 

CREATE PROCEDURE 프로시저명 

(  

   .... 

)  

AS  

BEGIN  

  SET TRANSACTION ISOLATION LEVER READ UNCOMMITTED

  SET NOCOUNT ON;  

END

 

그러나 ROLLUP에서도 그렇지만 모든 항목에 다 적용된다는 것은 좋으면서도 세세한 부분에서 조율하기 힘들다는 것입니다.

 

그렇기 때문에 기본적으로 각 항목에 필요할 때마다 WITH(NOLOCK)을 사용하는 게 합리적이라고 생각합니다.

반응형