with (nolock)

Windows/MSSQL 2009. 8. 3. 15:50

WITH (NOLOCK)

MSSQL은 기본 격리 수준(isolation level)이 read committed입니다. read committed라는 것이 데이터를 읽을 때에 공유 잠금을 유지한다는 것입니다. 그래서 WITH (NOLOCK)을 붙여 공유 잠금되지 않도록 하여 데이터를 읽을 때 UPDATE, INSERT등이 제약받지 않도록 합니다.

반대로, UPDATE나 INSERT와 같은 동작을 수행할 때 역시 잠금(lock)이 발생하게 되는데 이런 잠금에 영향받지 않고, 현재의 값을 그대로 읽어오기 위한 단순쿼리용이라면 WITH (NOLOCK)을 써서 데이터베이스의 효율을 증가합니다. (Dirty Read를 허용하는 효과입니다)

WITH (NOLOCK) 대신 WITH (READUNCOMMITTED)를 써도 같은 효과를 내며, 쿼리 맨 상단에 아래와 같이 써주어도 해당 SP의 모든 쿼리는 WITH (NOLOCK)과 같은 효과를 내게 됩니다.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

 ※from 구문 뒤에 붙임

ex)

select columnNM from tableNM with (nolock)

ex)

SELECT @PersonMoney = a.[Money], @ToVillageUnique = b.[VillageUnique]
 FROM [dbo].[tbl_ImportantParameta] a with (nolock) JOIN [dbo].[tbl_BankAccount] b with (nolock) ON a.[PersonID] = b.[PersonID]
 WHERE a.[PersonID] = @PersonID

Posted by 아로스

아로스

달력