MS-SQL DB 쿼리 내 락
- 테이블 조회 시 행렬은 일시적으로 락이 걸리고 트랜잭션(작업 단위)이 끝날 때 까지 데이터 수정이 불가.
- 무효화. 연산 처리 중 오류 발생 시 트랜잭션은 중단되고 처음 상태로 대기.
락 문제
메인 스레드 외 백그라운드 스레드에서 사용하다 스레드 간 락 잡는 시점이 겹치면 문제 발생.
DB 발생 원인
Create, Update, Delete 를 하면 배타 락 잡힘.
C.U.D. 에서 쓰기를 한꺼번에 하는 트랜잭션 발생 시 배타 락을 오래 잡는다.
락 상태
Unlocked | 읽기와 쓰기가 안되는 기본 상태. |
Shared | 읽기만 가능. 다른 스레드에서 동시 공유 락 가능. 단, 쓰기는 불가. 쓰기 위해서는 모든 공유 락이 해제될 때 까지 대기 필요. |
Reserverd | 쓰기 예약. 예약 락은 하나만 존재. 여러 공유 락과 같이 사용 가능. |
Pending | 쓰기 예약 하되 최대한 빨리 쓰기. 새로운 공유 락 허용 불가. |
Exclusive | 파일 쓰기. 다른 락과 같이 있을 수 없고 하나의 락만 허용. 배타 락 가진다면 다른 작업 불가능해 배타 락에서 작업을 최소화 필요. |
※ 쿼리 락이 되었다면. (언락 X)
타 유저가 DB를 선점해 사용 중 이거나, 정상적으로 종료 되지 않아 나타나는 현상.
해결법
SQL> EXEC SP_LOCK -- 락 컬럼 SPID 조회.
SQL> EXEC DBCC InputBuffer( [SPID] ) -- 락 쿼리 확인 OR EXEC SP_WHO [SPID] 유저 정보 확인.
SQL> KILL [SPID] -- 강제 종료.
DB Lock 예
- 여러 스레드에서 1개 DB instance만 가지고 쓰기 진행 -> X
- 여러 스레드에서 각각 DB instance를가지고쓰기진행 -> O
- 1개의 스레드에서 1개의 instance를 가지고 계속 쓰기하고, 여러 스레드에서 각각 인스턴스 읽기 진행 -> O
- 여러 스레드에서 각각 인스턴스 읽기만 한다. -> X
- 1개 DB instance를 가지고 쓰기 트랜잭션과 읽기를 동시 진행 -> X
참조 : https://programmingfbf7290.tistory.com/entry/SQLite
https://syujisu.tistory.com/193
'[ Programing ] > Interview' 카테고리의 다른 글
interview 서버 게임 개발 방식. (0) | 2021.12.16 |
---|---|
Interview DB Connection Pool (0) | 2021.12.16 |
Interview MS-SQL 트랜잭션 동작 방식. (0) | 2021.12.16 |
Interview MS-SQL SP 장단점. (0) | 2021.12.16 |
Interview MS-SQL Clustered / Non clustered 차이. (0) | 2021.12.16 |