본문 바로가기
IT/MSSQL

MSSQL 데이터 I/O 병목현상 확인하기(SQL서버 느려짐)

by 베베야 2020. 10. 15.
728x90

MSSQL 데이터베이스를 운영하면서 생긴 경험을 공유해보고자 작성합니다

 

[오류 증상]

MSSQL 데이터베이스를 운영하는 중에 갑자기 디비가 느려졌다

결론부터 말하면 윈도우서버의 I/O 처리에 문제가 발생하였기 때문이었다.

SQL서버의 로그를 확인한 결과 아래와 같은 오류 메시지를 확인 할 수 있었다

 

[MSSQL 오류로그]

<이 오류 메시지는 SQL Server I/O 에 대한 병목 현상을 나타냅니다.>

sql server has encountered 1 occurrence(s) of i/o requests taking longer than 15 seconds to complete

autogrow of file 'templog' in database 'tempdb' was cancelled by user or timed out after 117437ms

 

 

[처리과정]

1 현재 대기 보류 중인 I/O를 확인 합니다.

SQL> SELECT SUM(pending_disk_io_count) AS [Number of pending I/Os] FROM sys.dm_os_schedulers

대기 보류중인 I/O가 없으면 아래의 그림과 같이 0으로 보이지만

장애 발생 시점에는 숫자가 많이 증가합니다

 

2 1번 쿼리결과를 확인하고 I/O 카운터에 대하여 세부 사항을 확인 합니다.

SQL> SELECT *  FROM sys.dm_io_pending_io_requests

[쿼리의 결과 확인]

IO_Pending 열 값이 0 이면

SQL Server 는 아직 I/O 를 처리 하지 않은 것 입니다.

 

IO_Pending 열 값이 1 이면

Windows 에서 아직 I/O 를 처리 하지 않은 것 입니다.

 

 

[점검 요청]

필자는 조회 시 IO_Pending 열 값이 1 로 나타났고

Windows 에서 아직 I/O 를 처리 하지 않은 것으로 판단하였습니다

 

담당 엔지니어에게 윈도우서버의 하드디스크와(스토리지를 사용 중 이면 스토리지 디스크 확인)

그리고 연결된 네트워크단 스위치(스토리지 사용중이라 센스위치 점검함) 점검을 요청했습니다

 

[점검 결과]

점검결과 스위치쪽 GBIC Fault 문제로 발생한 SQL Server I/O 에 대한 병목 현상으로 확인 되었고

GBIC 을 교체한 후로는 문제없이 정상적으로 돌아왔습니다

 

SQL> SELECT SUM(pending_disk_io_count) AS [Number of pending I/Os] FROM sys.dm_os_schedulers

(조회 시 : 0 으로 확인됨)

 

반응형
그리드형

댓글