반응형
안녕하세요 투자하는 개발자 투개자입니다.
오늘은 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 |
반응형
'DB > MSSQL (SQLSERVER)' 카테고리의 다른 글
[MSSQL] 누적값 구하기! (셀프조인!Self JOIN) 활용! (0) | 2020.08.11 |
---|---|
[MSSQL]SP_SPACEUSED로 row수 빠르게 조회하자! - MSSQL행수세는방법 (0) | 2020.07.29 |
[MSSQL] SERACH PROCEDURE! 특정 단어가 들어간 프로시져 찾기 (0) | 2020.07.28 |
[MSSQL] MERGE문 작성 방법 및 응용 (0) | 2020.07.27 |
MSSQL 이중화구성 Replication, Log Shipping, Mirroring, Cluster, Always On 방법! (0) | 2020.07.21 |