이번에는 MSSQL 2022 환경에서 Test Table을 Create 해준 뒤, 실제로 해당 테이블에 Lock Session 을 발생시켜 볼 예정이고, 다음 게시물에서는 자세한 Lock 의 정의에 대해 알아보고자 한다.

 

우선 Lock Session 이란 간단하게 설명해서 트랜잭션이나 쿼리가 데이터베이스에 동시에 액세스 하지 않게 하기 위한 장치이다. 동시에 접근하지 않게하게끔 일종의 잠금역할을 한다고 이해해도 좋을 것 같다. 

 

또한, Lock Session 은 데이터의 무결성과 일관성을 보장하며, 이는 동시에 다수의 사용자가 안전하게 데이터를 조회하고 접근할 수 있게끔 해준다. Lock Session 이라고 해서 무작정 안좋을 것이다. 서버에 부하를 일으키는 주범이다 라고 생각하는 경우가 종종 있는 것 같은데, 꼭 그런것만은 아니다. 실제로 데이터의 무결성과 일관성은 운영하는 입장에서는 굉장히 중요한 역할을 한다고 생각이 된다. 무결성과 일관성을 지키지 못하는 데이터베이스는 그 자체만으로 데이터베이스의 역할을 다 하지 못하는 것과 같다고 생각하기 때문이다.

 

현재 작성하고 있는 MSSQL 뿐 아니라, Oracle, Tibero 등 NoSQL을 제외한 RDBMS 에서는 Lock Session 의 발생을 심심치 않게 볼 수 있을 것이다. (NoSQL 도 Lock Session이 물론 있으나, 빠른 처리속도로 인해 실제하는 Lock이 거의 없는것으로 알고 있다.)

 

----------------------------------------------------------------------------------------------------------------

 

1. Test 에 사용할 테이블을 우선 생성해준다. 

Create Table 에제

2. Test table에 값 3개를 insert 해준다.

test table에 데이터 insert

3. 다중 세션에서 Lock 상태임을 표현하기 쉽도록 하나의 SSMS 를 추가로 열어준다.

각각 2개의 세션을 열어 Update 수행

4. BEGIN TRAN 명령어로 트랜잭션을 실행하여, 트랜잭션을 시작 수행하는 명령어 수행

BEGIN TRAN 명령어로 트랜잭션 실행 그룹

5. 선언된 트랜잭션을 닫기전에 다른 세션에서 update 되지 않은 test table에 대한 조회 쿼리 수행

다른 세션에서 select 수행시 실행되지 않음

 

--> 선언된 트랜잭션이 닫히지 않았으므로, 데이터 일관성을 유지하기 위해 Lock Session 의 형태로 대기하는 모습.

 

지난번 게시물을 참고해서 실제 Lock Session 정보를 확인해보면,

https://hyungyun.tistory.com/entry/MSSQL-%EC%A3%BC%EC%9A%94-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

MSSQL 주요 시스템 프로시저에 대하여

MSSQL 은 크게 시스템 프로시저와 사용자 저장 프로시저 2가지로 나눌 수 있다고 생각한다.그 중에서 오늘은 시스템 저장 프로시저에 관하여 간략하게 알아보고자 한다. 우선 프로시저의 정의부

hyungyun.tistory.com

 

 

EXEC sp_who2 

SPID 54를 가진 Process 가 SUSPENDED 중단상태인 SELECT Command 임을 확인

sp_who2

 

EXEC sp_lock 명령어로 확인하게 되면, 해당 SPID 를 가진 세션이 WAIT Status 임을 확인 할 수 있습니다. 

sp_lock

명시적으로 트랜잭션을 선언해주었기 때문에, 트랜잭션을 COMMIT 하여 Lock 을 해제 시킨다.

Oracle, Tibero 등 타 DBMS 에서는 실제 Session PID 값을 활용하여 Kill session 이나 commit 을 통해 Lock 을 해제시키고 정상적으로 수행시킬 수 있다.(물론 MSSQL 도 마찬가지다) 

 

트랜잭선 commit 후 다른 세션에서도 정상 조회

 

 

이렇게 간단한 예제를 활용하여 MSSQL 에서의 Lock을 발생시켜 보았다. 다음에는 Oracle 에서의 Lock 발생 테스트를 업로드 해보겠습니다.

'Database | SQL | OS > MS-SQL' 카테고리의 다른 글

MS SQL Always On 설치 가이드 - 2  (5) 2025.01.21
MS SQL Always On 설치 가이드 - 1  (3) 2025.01.20
MSSQL Always On 구성이란?  (5) 2025.01.16
MSSQL 주요 시스템 프로시저에 대하여  (7) 2025.01.06
MSSQL 2022 설치  (4) 2025.01.03

+ Recent posts