본문 바로가기
MSSQL

MSSQL Server] 1. Lock Types

by Fastlane 2023. 8. 7.
728x90
반응형

개발자에게 도전적인 과제 중 하나는, multi-user 환경에서 시스템을 어떻게 매끄럽게 동작하게 하는가 이다. 개발환경에서는 완벽하게 동작하던 코드도, 수많은 사람들이 접속하는 환경에서는 문제가 생긴다. 그 이유로는 timeouts, deadlocks 등이 있다. SQL Server가 낮은 단계의 read uncommitted level로 사용하더라도 locking, blocking, deadlock은 여전히 발생한다. 

 

lock types에 대해 알아보자. lock이란 무엇인가? 간단히 말해서, in-memory structure이다. 이 structure는 onwer, type, 보호하는 row, page, table, file, database등을 연결하는 resource hash를 갖는다. 

 

SQL Server는 20개 이상의  lock types을 갖는다. 여기서는 가장 중요한 4개에 대해서 살펴보자. 

 

  • Shared locks (S), 공유 Lock : SELECT와 같은 read operation 동안 획득된다. 하지만 모든 SELECT에서 발생하지는 않는다. 
  • Exclusive locks (X), 배타적 Lock : INSERT, UPDATE, DELETE와 같은 modification operation 동안 획득된다. 다른 session에서 수정되는 것을 막는다. transaction 끝날때까지 유지된다. 
  • Update locks (U), 갱신 Lock : shared와 exclusive locks의 사이이다. SQL Server는 갱신 목적으로 rows를 찾는 동안 data modification statements와 함께 갱신 Lock을 사용한다. 예를들어 'update MyTable set Column1 = 0 where Column1 is null'을 실행하면, SQL Server는 Column1 이 null인 rows를 찾는 동안 갱신 Lock을 획득한다. 조건에 맞는 row를 찾으면, SQL Server는 갱신 Lock을 배타적 Lock으로 변경한다. 
  • Intent locks (IS, IX, IU, etc), 의도 Lock : 특정 row에 Lock을 설정하면, 동시에 parent object에 의도 Lock이 설정된다. 따라서 해당 locks은 child objects에 대한 locks을 가리킨다. 예를들어, row가 배타적 Lock을 갖고 있을때, page, table, database level에 대해 IX locks을 소개한다. 이러한 locks의 주요목적은 효율성이다. database에 대해 배타적 Lock을 가지려 할때, SQL Server가 의도 Lock을 가지지 않았다면, 하위 level locks이 존재하지는 찾기위해 모든 objects의 모든 rows를 scan해야 할 것이다. 

아마도, lock의 가장 큰 이슈는 lock 호환성이다. 

기본적으로 아래 3가지만 기억하면 된다. 

 

  1. (S) locks는 (S), (U) locks와 호환된다. 
  2. (X) locks는 다른 lock types과 호환되지 않는다. 
  3. (U) locks는 (S)와는 호환되지만, (U)와는 호환되지 않는다. 

 

728x90
반응형

'MSSQL' 카테고리의 다른 글

MSSQL] DB 테이블 명세서 html 생성 쿼리  (0) 2023.10.24
MSSQL Server] 2. Lock, 트랜잭션 격리 수준  (0) 2023.08.07
MSSQL] Schema Locks  (0) 2023.08.02
MS SQL Server Express 2022 설치  (0) 2023.07.26
MSSQL] 샘플 데이터 만들기  (0) 2023.04.24

댓글