SQL Server 833오류 (15 Sec Slow IO Detected)
· Version : SQL Server
SQL Server I/O 요청 작업에서 15초 이상I/O delay가 발생하는 경우 833오류가 반환되고 에러로그에 기록 된다.
SQL Server has encountered %d occurrence(s) of I/O requests taking longer than %d seconds to complete on file [%ls] in database [%ls] (%d). The OS file handle is 0x%p. The offset of the latest long I/O is: %#016I64x. |
이전 버전의 SQL Server는 Lazy Writer 및 I/O Completion콜백 루틴을 활용하여 오류 상태를 반환하고 에러로그에 기록하였다. 최선 버전의 SQL Server는 검색 기능을 개선하여 Scheduler Monitor의 일부로 포함하였다. 모든 I/O 요청에는 시작 시간(invariant RDTSC ticks), OVERLAPPED 구조 및 추가 추적 정보가 포함된다. I/O 추적 구조는 모두 동일한 메모리에서 할당되므로 메모리가 부족할 때 I/O를 수행해야하는 Memory manager/object에서 할당하려고 시도하지 않는다.
스케줄러 모니터는 움직임을 체크(5초 간격)할 때 I/O 엔트리와 OVERLAPPED 상태를 점검하여 I/O 요청이 여전히 커널에 보류중인지 확인한다. 10진수 값(Overlaaped->internal)이 259이면 커널 수준에서 I/O가 보류 중이고 경과 시간이 15초 이상이되면 느린 I/O 상태로 기록된다.
이 프로세스는 I/O 요청 디스펜서와 1024개의 검사 제한을 사용하여Scheduler Monitor가 단일 검사를 통과하는 I/O 요청을 사용하여 조금더 복잡해졌다. 하지만 기본적으로 SQL Server는 I/O 추적 목록을 실행하고 HasOverlappedioCompleted의 결과 OVERLAPPED->internal 값이 더 이상 259가 아니라면 I/O 처리에서 SOS 스케줄링 문제가 발생하며 느린 I/O로 기록하지 않는다.
SELECT SUM(pending_disk_io_count) AS [Number of pending I/Os] FROM sys.dm_os_schedulers |
Sys.dm_os_pending_io_requests DMV는 I/O 상태를 볼 수 있으며 *_pending_* 컬럼 값을 참고 한다. 스케줄러 모니터가 모니터 역할을 하므로 Windows에서 I/O당 발생하는 타이머가 없다.
SELECT * FROM sys.dm_io_pending_io_requests |
SQL Server는 오류 로그에 오류를 기록 할 때오류 로그 범람을 방지하기 위해 파일 당 5분의 간격을 유지 관리한다. 문제를 해결할 때 XEvent가 더 나은 대상이 될 수 있다.(대부분의 경우 기록시 XeSqlPkg::long_io_detected가 실행됨)
요약하면 Scheduler Monitor는 I/O 상태를 모니터링하는 작업을 수행하며 보류 중일때 15초 이상이 지나면833 오류가 반환되고 에러로그에 기록 된다.
[참고자료]
· http://www.proforanalytics.com/io-performance/
· http://technet.microsoft.com/en-in/library/cc966414(en-us).aspx – Physical Database Storage Design
· http://technet.microsoft.com/en-us/library/aa997558(EXCHG.65).aspx – Ruling Out Disk-Bound Problems
· http://www.microsoft.com/downloads/en/details.aspx?familyid=9a8b005b-84e4-4f24-8d65-cb53442d9e19&displaylang=en – SQLIO Disk Subsystem Benchmark Tool
· http://msdn.microsoft.com/en-us/library/aa365199(v=VS.85).aspx – I/O Concepts (Windows)
2017-02-06 / 강성욱 / http://sqlmvp.kr
MS SQL, SQL Server, Error 833, Slow I/O Detected, Lazy Writer, IO Tracking, I/O Request, sys.dm_os_pending_io_requests, I/O pending, SQL Disk, SQL IO
'SQL Server > SQL Server Tip' 카테고리의 다른 글
메모리 최적화 테이블에서 해시 인덱스 사용시 버킷 카운트의 중요성 (0) | 2017.05.31 |
---|---|
인덱스 리빌드시 병렬로 실행계획이 생성되지 않는 이유 (0) | 2017.03.13 |
SQL Server nonpreemptive 모드에서Long Sync IO 오류 (0) | 2017.03.13 |
SQL Server DTC Transaction의 SPID = -2 반환 (0) | 2017.03.13 |
SQL Server Read/Writer 동기화 작동 원리 (0) | 2017.03.13 |