MS SQL WITH(NOLOCK) 사용법을 정리해 봅니다.
SELECT시 공유잠금을 사용하기 위해 처리하는 방식입니다. 다시 말해 변경하는 데이터를 변경하고 나서 변경된 자료를 SLELECT 할 것인지 옵션을 설정하여 최신 데이터를 볼지 아니면 수정된 이전에 데이터를 볼 것인지 결정하는 옵션이라고 생각하시면 됩니다.
기본으로는 LOCK상태로 처리가 되기 때문에 SELECT를 하면서 WITH(NOLOCK) 옵션 설정을 하여 무조건 데이터를 조회할 수 있게 처리하면 됩니다.
LOCK상태 DML(INSERT, UPDATE, DELETE) 작업 중인 데이터 또 테이블에 SELECT 할 경우 해당 작업이 끝이 나야 SELECT 할 수 있다는 의미입니다.
만일 이렇게 사용한다면 DB성능이 떨어진다고 볼 수 있는거죠. Deadlock이 발생될 수 있다 이거죠
그래서 SELECT시에 WITH(NOLOCK) 옵션을 필수로 적용하여 만들어야 한다는 의미가 되겠죠.
사용방법
1. 단독으로 테이블 뒤에 선언하면 된다.
SELECT * FROM TBITEM WITH(NOLOCK);
2. JOIN으로 만들어진 경우에는 각각 테이블별로 옵션을 사용하여 적용해주어야 한다.
SELECT *
FROM TBITEM A WITH(NOLOCK)
INNER JOIN TBITEM2 B WITH(NOLOCK) ON A.ITEM = B.ITEM
3. BEGIN TRAN으로 UPDATE처리 작업이 완료 될때까지 SELECT 처리를 기다리고 있게 된다.
BEGIN TRAN
UPDATE TBITEM
SET ItemName = '라면1'
Where item = 'A1'
※ WITH(LOCK) 상태에서는 UPDATE 처리가 끝이 날 때까지 기다리고 있게 됩니다.
SELECT * FROM TBITEM Where item = 'A1';
※ WITH(NOLOCK) 상태에서는 기다리지 않고 실행이 됩니다.
SELECT * FROM TBITEM Where item = 'A1' WITH(NOLOCK);
모든 방식에는 장단점이 있겠지만 WITH(LOCK) 상태에서는 전체적인 DB 부하가 많이 발생하여 DB LOCK이 생길 수 있기 때문입니다. 그러나 업무상 어쩔 수 없이 사용해야 하는 경우가 있기 때문에 잘 판단해서 사용을 해야겠습니다.
'IT > MsSql' 카테고리의 다른 글
MSSQL 단어 자동 완성, 테이블명 자동인식 (0) | 2023.04.27 |
---|---|
MSSQL CHARINDEX 함수 (0) | 2023.04.26 |
msSql 특정문자 검색 리터럴 문자 찾기 (0) | 2023.04.25 |
MSSQL TEMP TABLE 속도 서브쿼리 속도 (0) | 2023.04.10 |
MSSQL 한영 한글자동 전환 해결방법 (2) | 2023.03.31 |