본문 바로가기
DB/MSSQL (SQLSERVER)

[MSSQL] WITH(NOLOCK)이란...

by 커져라불어라 2020. 7. 28.
반응형

안녕하세요 투자하는 개발자 투개자입니다.


오늘은 SELECT문 뒤에 작성하는 WITH(NOLOCK)에 대해 알아보겠습니다.

WITH(NOLOCK)이란 영어그대로 풀어보면 잠금을 하지 않은 체로 함께~ 라는 의미입니다.


SELECT * FROM [스키마].[테이블이름] WITH(NOLOCK)
cs


MSSQL은 기본적으로 SELECT문을 사용할 때 공유잠금이 걸립니다.

공유잠금이란 한 테이블에서 INSERT, UPDATE, DELETE문이 수행되고 있다면 SELECT문은 앞의 작업들이 끝날 때까지 LOCK이 걸립니다. WITH(NOLOCK)을 함께 작성해 주시면 앞의 작업에 상관없이 SELECT문이 수행되게 됩니다.


때문에 WITH(NOLOCK)이 없는 상태로 SELECT문을 실행한다면 테이블이 BLOCK이 걸려 데이터베이스 성능이 현저히 떨어지게 됩니다.

그렇기에 SELECT문장에서 여러 테이블을 조인하는 경우 WITH(NOLOCK)을 사용하여 조인하는 테이블의 공유잠금을 풀어주면서 가져오는 것이 좋습니다. 조인하는 테이블에 INSERT, UPDATE, DELETE문이 수행되고 있을 수도 있기 때문입니다.


참고로 PROCEDURE 내에서 SELECT문에 WITH(NOLOCK)을 사용하기 위해선


SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED를 입력해 주시면 됩니다.

CREATE PROCEDURE 프로시져명
AS
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN
    SELECT ~~~~~
END
cs


반응형