상황
회색선을 기준으로 설명하자면
Batch Requests/sec 는 초당 800 정도로 증가하였습니다.
이 때 Lock Waits/sec, Lock Timeouts/sec 이 증가하였지만
Average Wait Time(ms) 는 감소하였습니다.
Lock Wait 이 발생하고 심지어 Timeout 까지 발생하는 상황에서 Average Wait Time 은 감소하는
그래프가 의아하여 조사한 내용을 정리하였습니다.
Lock Waits, Lock Time, Average Wait Time 의 의미
Lock Waits/sec
초당 대기 잠금을 나타냅니다.
단순히 잠금이 대기했다 라는 것을 나타내는 것일 뿐, 이 잠금이 얼마동안 대기했다를 의미하는 것이 아닙니다.
Lock Timeouts/sec
Lock Timeouts 이 0 의 값을 포함하는 경우와 포함하지 않는 경우로 나뉘게 됩니다.
Timeout |
설명 |
0 |
내부 잠금 프로브의 타임아웃 결과일 수 있고, 반드시 문제를 야기하는 것은 아님 |
0 초과 |
내부 잠금 프로브의 타임아웃을 계산하지 않기에, 실제 쿼리의 지연을 나타낼 수 있음 |
서버에서는 Value 값이 -1 로 되어 있었고, 이 때는 Timeout 값이 0 인 경우도 계산됩니다.
즉, 실제로 타임아웃이 된게 아니라 Timeout 이 0인 내부 값이 Lock Timeout 에 포함되게 된 것입니다.
Lock Timeout 값을 확인해 보는 방법
Average Wait Time (ms)
대기한 각 잠금 요청에 대한 평균 대기 밀리시간을 나타냅니다.
결론
Lock Wait 는 단순히 잠금 대기 횟수를 나타내기 때문에 '평균 대기 시간'과 직접적인 연관이 있다고 볼 수 없습니다.
Lock Timeout 은 0 이 아닌 경우 의미가 있습니다.
따라서 지금처럼 Lock_TIMEOUT 값이 -1 로 timeout 0을 포함하고 있다면
Lock Wait 와 Lock Timeout 값이 높다고 해서 Average Wait Time 또한 높다고 볼 수 없습니다.
* Lock Wait 이 높다면 왜 높은지에 대해서 파악 후 개선할 수 있어야 합니다.
( 단순 INSERT 라도, 레코드 길이가 길다면 Page Lock 으로 잡힐 수도 있고.. 등등 많은 원인이 있을 수 있음 )
참고자료
1. Lock Timeout 이 0을 포함하는 경우와 포함하지 않는 경우
2. Lock Timeout 의 기본값과 값을 확인하는 방법
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-lock-timeout-transact-sql?view=sql-server-ver15
3. SQL Server Locks 개체에 대한 설명
'SQL Server > SQL Server 기타' 카테고리의 다른 글
[MSSQL] SSMS 파일의 줄 끝에 일관성이 없습니다. 줄 끝을 정규화시키시겠습니까? (0) | 2021.03.07 |
---|---|
[MSSQL] TOP 절과 ROWCOUNT 의 차이 (0) | 2020.11.30 |
[MSSQL] OPENROWSET 환경에서 sp_MSForEachDB 를 사용하는 방법 (0) | 2020.09.02 |
[MSSQL] DBID 가 NULL 이거나 32767 인 경우 (0) | 2020.08.28 |
[MSSQL] Maintenance Plan 이전(Migration) 하는 방법 (0) | 2020.04.06 |