:::: 개발 ::::/::: MSSQL :::

[본문스크랩] nolock 잠금힌트

nayha 2009. 12. 28. 14:13

NOLOCK :

공유 잠금을 실행하거나 단독 잠금을 유지하지 않습니다.

이 옵션을 적용하면 커밋되지 않은 트랜잭션이나 읽는 중

롤백된 페이지 집합을 읽을 수 있습니다.

커밋되지 않은 읽기가 가능합니다.

단 , SELECT 명령문에만 적용됩니다.

 

보통 select문을 실행하게 되면 SQL서버는 'Shared Lock'을 걸게됩니다.

즉 select하는 순간에 다른 사용자에 의한 데이터의 변경을 잠시 막게되지요.

이 Lock때문에 다른 사용자의 SQL문 수행이 방해받게 됩니다.

대부분의 웹프로그래밍에서는 select시

다른 사용자에 의해 데이터가 변경되어도 큰 문제가 발생하지 않습니다.

다음과 같이 'nolock'이라는 잠금힌트를 사용해서

select를 하면 잠금이 걸리지 않은 상태에서 실행할 수 있습니다.

use pubs
go
select * from authors with (nolock)

혹은
select * from authors (nolock)  -- with 생략가능함.


여기서 'nolock' 을 잠금힌트라고 합니다.

'nolock' 잠금힌트를 사용할 경우 커밋되지 않은 데이터나

읽기도중 롤백된 데이터도 읽어오게 됩니다.

즉 dirty page를 읽게되지요..

그러나 게시판의 조회수가 5에서 6으로 되었는데

5로 읽어온다고 해서 크게 문제가 되진 않겠지요?

좀 정리를 하면

select 결과가 실제 데이터와 다르더라도 큰 문제가 되지 않는 경우

'nolock'힌트를 사용하면 쿼리실행의 성능향상을 도모할 수 있습니다.

반응형