개발/SQL

[MS-SQL] nolock

카레공 2022. 12. 24. 17:29

2022.12.05 - [개발/데이터베이스] - 트랜잭션 TRANSACTION

 

트랜잭션 TRANSACTION

트랜잭션은 데이터의 정합성을 보장하기 위한 기능 트랜잭션은 COMMIT (적용) 또는 ROLLBACK (적용X)을 보장해주는 것 트랜잭션이 보장해야하는 ACID 원자성(Atomicity) 일관성 (Consistency) 격리성 (Isolation)

vv6uos.tistory.com

데이터를 조회할 때 테이블 옆에 "nolock"을 입력해서 데이터가 돌지 않고 빠르게 조회할 수 있게 하는 경우가 있다 

 

MSSQL의 경우 , 기본적으로 제공하는 격리수준은 READ_COMMITED입니다 (설정 변경 가능)

 

 

그렇다 보니 UPDATE,INSERT등을 하면서 테이블이 잠기게 되었을 때 , SELECT를 하게 된다면 블락이 걸리게 됩니다

테이블이 잠기다? 테이블에 비긴 트랜잭션을 발생시켜서 락이 발생하도록 한다? 

블락이 걸리다 ?

이럴때는 DB의 성능이 떨어지고,

데드락이 걸리게 되어 결과가 안나오는 경우가 발생할 수도 있습니다.

 

이럴때 NOLOCK을 걸어줍니다.

NOLOCK 이란?

WITH NOLOCK은 커밋되지 않은 읽기를 허용하겠다는 것입니다.

조회하는 테이블이 잠겨 있어도 기다리지 않겠다는 것입니다. 

데드락이 발생하거나, 교착상태가 발생되지 않는다는 장점을 가지고 있습니다.

 

WITH NOLOCK의 단점 

트랜잭션을 발생시켰던 쿼리를 ROLLBACK을 하게 되면 변경된 데이터가 변하지 않은 것을 확인 할 수 있습니다.