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 으로 확인됨)
'IT > MSSQL' 카테고리의 다른 글
MSSQL 데이터베이스 마이그레이션(DB Migration) 방법 (0) | 2020.10.16 |
---|---|
MSSQL 데이터베이스 생성 및 삭제하기 (DB생성하기) (0) | 2020.10.15 |
MSSQL 모든 데이터베이스 인스턴스 논리적 파일이름 가져오기 (0) | 2020.10.14 |
SSMS(SQL Server Management Studio) Tip 정규식 사용해서 텍스트 바꾸기 (0) | 2020.10.12 |
MSSQL 사용자 리스트를 가져오는 프로시저 (0) | 2020.09.29 |
댓글