이번에는 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 에 사용할 테이블을 우선 생성해준다.
2. Test table에 값 3개를 insert 해준다.
3. 다중 세션에서 Lock 상태임을 표현하기 쉽도록 하나의 SSMS 를 추가로 열어준다.
4. BEGIN TRAN 명령어로 트랜잭션을 실행하여, 트랜잭션을 시작 수행하는 명령어 수행
5. 선언된 트랜잭션을 닫기전에 다른 세션에서 update 되지 않은 test table에 대한 조회 쿼리 수행
--> 선언된 트랜잭션이 닫히지 않았으므로, 데이터 일관성을 유지하기 위해 Lock Session 의 형태로 대기하는 모습.
지난번 게시물을 참고해서 실제 Lock Session 정보를 확인해보면,
MSSQL 주요 시스템 프로시저에 대하여
MSSQL 은 크게 시스템 프로시저와 사용자 저장 프로시저 2가지로 나눌 수 있다고 생각한다.그 중에서 오늘은 시스템 저장 프로시저에 관하여 간략하게 알아보고자 한다. 우선 프로시저의 정의부
hyungyun.tistory.com
EXEC sp_who2
SPID 54를 가진 Process 가 SUSPENDED 중단상태인 SELECT Command 임을 확인
EXEC sp_lock 명령어로 확인하게 되면, 해당 SPID 를 가진 세션이 WAIT Status 임을 확인 할 수 있습니다.
명시적으로 트랜잭션을 선언해주었기 때문에, 트랜잭션을 COMMIT 하여 Lock 을 해제 시킨다.
Oracle, Tibero 등 타 DBMS 에서는 실제 Session PID 값을 활용하여 Kill session 이나 commit 을 통해 Lock 을 해제시키고 정상적으로 수행시킬 수 있다.(물론 MSSQL 도 마찬가지다)
이렇게 간단한 예제를 활용하여 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 |