[MSSQL] With (Nolock)을 사용하는 이유딥상어동의 딥한 SQL/LV2.중급쿼리2021. 3. 27. 19:54
Table of Contents
데이터베이스의 데이터프레임을 "테이블"이라고 합니다. 테이블의 데이터를 업데이트 하는 경우, 기본적으로 해당 테이블은 잠겨있게 됩니다. 이러한 상태를 Lock이라고 하는데요.
Lock이 걸리는 이유는 MSSQL의 기본 격리수준이 Read Committed 이기 때문입니다. 즉, 완전히 commit이 된 데이터만 읽으라는 뜻입니다. 따라서, lock이 걸려있는 동안 테이블 조회(select)를 진행하게 되면, select 작업이 후순위로 밀리고 db의 성능이 떨어질 수 있습니다.
특히, "데드락(dead lock)"이라고해서 아예 lock이 풀려버릴 수도 있습니다. 데드락은 락이 풀리는것이 아니라 교착상태로 서로의 락이 풀리길 무한정 기다리면서, 오히려 락이 계속 풀리지 못하는 상태입니다. (흠님 댓글 감사드립니다.)
이러한 현상을 방지하기 위해 사용하는 것이 with (nolock)입니다. 사용자 입장에서는 select 작업이 후순위로 밀리는 것을 방지하는 것이 목적이라고 할 수 있습니다.
SELECT *
FROM t_a with (nolock)
위와 같이 프롬절의 마지막에 with (nolock)을 붙여줍니다.
한가지, 단점이 있습니다. 만약, 테이블에 업데이트 한 데이터가 롤백(rollback)되는 경우, 조회한 데이터의 "정합성"에 문제가 생길 수 있습니다.
'딥상어동의 딥한 SQL > LV2.중급쿼리' 카테고리의 다른 글
SQL 구문이 데이터 저장소에 이르기 까지 (0) | 2021.06.26 |
---|---|
왜 버퍼를 사용하는가? (0) | 2021.06.26 |
[MSSQL] while (1) 기본 사용법 - declare, set, while, begin, end, print (0) | 2021.03.29 |
MSSQL | 윈도우 함수 사용시 주의 사항 (0) | 2021.03.23 |
[MSSQL] 프로시져1. 변수 지정 (0) | 2021.01.13 |
@딥상어동의 딥한생각 :: 딥상어동의 딥한생각
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!