PRB: 보고되지 않는 I/O 문제를 검색하기 위해 추가 SQL Server 진단이 추가되었다

기술 자료 번역 기술 자료 번역
기술 자료: 826433 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

운영 체제, 드라이버 또는 하드웨어 문제로 인해 쓰기 손실 조건이나 읽기 부실 조건이 생기면 오류 605, 823, 3448 같은 데이터 무결성 관련 오류 메시지가 나타날 수 있습니다. 다음 예와 같은 내용의 오류 메시지가 나타날 수 있습니다.
2003-07-24 16:43:04.57 spid63 Getpage: bstat=0x9, sstat=0x800, cache
2003-07-24 16:43:04.57 spid63 pageno is/should be: objid is/should be:
2003-07-24 16:43:04.57 spid63 (1:7040966)/(1:7040966) 2093354622/2039782424
2003-07-24 16:43:04.57 spid63 ... IAM indicates that page is allocated to this object
2003-07-24 16:52:37.67 spid63 오류: 605, 심각도: 21, 상태: 1
2003-07-24 16:52:37.67 spid63 Attempt to fetch logical page (1:7040966) in database 'pubs' belongs to object 'authors', not to object 'titles'..
2003-07-24 16:52:40.99 spid63 오류: 3448, 심각도: 21, 상태: 1
2003-07-24 16:52:40.99 spid63 (1:7040977) 페이지, 'pubs' 데이터베이스(데이터베이스 ID 12)에 있는 트랜잭션 ID (0:159696956)에 대해 로그 레코드 (63361:16876:181)을(를) 실행 취소할 수 없습니다. 페이지 정보: LSN = (63192:958360:10), 유형= 2. 로그 정보: OpCode = 2, 컨텍스트 1.
2003-07-09 14:31:35.92 spid66 오류: 823, 심각도: 24, 상태: 2
2003-07-09 14:31:35.92 spid66 'h:\sql\MSSQL\data\tempdb.mdf' 파일의 0x00000016774000 오프셋에서 읽기 중 I/O 오류(잘못된 페이지 ID)이(가) 검색되었습니다.

해결 방법

서비스 팩 정보

이 문제를 해결하려면 Microsoft SQL Server 2000용 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
290211 최신 SQL Server 2000 서비스 팩을 구하는 방법

빌드 정보

Microsoft는 확장된 추적 기능이 도입된 SQL Server 빌드를 출시했습니다. 이러한 기능은 "현상" 절에서 설명하는 오류 메시지 문제 해결에 도움을 주기 위해 설계되었습니다. 운영 체제나 하드웨어 관련 문제가 아닌 것 같으면 이 빌드를 적용하지 않아도 됩니다.

이 빌드의 영어 버전은 아래와 같거나 그 이상의 파일 특성을 가집니다. 이 파일의 날짜와 시간은 UTC(Coordinated Universal Time)로 나열되며 파일 정보를 볼 때 로컬 시간으로 변환됩니다. UTC와 로컬 시간의 차이를 알려면 제어판의 날짜 및 시간 도구에서 표준 시간대 탭을 사용하십시오.
표 축소표 확대
날짜시간버전크기파일 이름
2003-05-3118:452000.80.818.078,400바이트Console.exe
2003-06-2501:012000.80.818.033,340바이트Dbmslpcn.dll
2003-04-2502:12786,432바이트Distmdl.ldf
2003-04-2502:122,359,296바이트Distmdl.mdf
2003-01-3001:55180바이트Drop_repl_hotfix.sql
2003-06-2322:402000.80.837.01,557,052바이트Dtsui.dll
2003-06-2322:402000.80.837.0639,552바이트Dtswiz.dll
2003-04-2402:51747,927바이트Instdist.sql
2003-05-0301:561,581바이트Inst_repl_hotfix.sql
2003-02-0806:402000.80.765.090,692바이트Msgprox.dll
2003-04-0102:071,873바이트Odsole.sql
2003-04-0501:462000.80.800.062,024바이트Odsole70.dll
2003-05-0720:412000.80.819.025,144바이트Opends60.dll
2003-04-0221:482000.80.796.057,904바이트Osql.exe
2003-04-0223:152000.80.797.0279,104바이트Pfutil80.dll
2003-05-2222:5719,195바이트Qfe469571.sql
2003-07-1117:041,084,147바이트Replmerg.sql
2003-04-0421:532000.80.798.0221,768바이트Replprov.dll
2003-02-0806:402000.80.765.0307,784바이트Replrec.dll
2003-07-1116:561,085,925바이트Replsys.sql
2003-06-0101:012000.80.818.0492,096바이트Semobj.dll
2003-05-3118:272000.80.818.0172,032바이트Semobj.rll
2003-05-2900:29115,944바이트Sp3_serv_uni.sql
2003-06-0101:012000.80.818.04,215,360바이트Sqldmo.dll
2003-04-0717:4425,172바이트Sqldumper.exe
2003-03-1918:202000.80.789.028,672바이트Sqlevn70.rll
2003-07-0200:182000.80.834.0180,736바이트Sqlmap70.dll
2003-02-0806:402000.80.765.057,920바이트Sqlrepss.dll
2003-08-0100:502000.80.847.07,594,065바이트Sqlservr.exe
2003-07-2521:442000.80.845.0590,396바이트Sqlsort.dll
2003-02-0806:402000.80.765.045,644바이트Sqlvdi.dll
2003-06-2501:012000.80.818.033,340바이트Ssmslpcn.dll
2003-06-0101:012000.80.818.082,492바이트Ssnetlib.dll
2003-06-0101:012000.80.818.025,148바이트Ssnmpn70.dll
2003-06-0101:012000.80.818.0158,240바이트Svrnetcn.dll
2003-05-3118:592000.80.818.076,416바이트Svrnetcn.exe
2003-04-3023:522000.80.816.045,132바이트Ums.dll
2003-07-0200:192000.80.834.098,816바이트Xpweb70.dll
참고 파일 종속성으로 인해 위의 파일이 들어 있는 최신 핫픽스나 기능에 추가 파일이 들어 있을 수 있습니다.

Microsoft는 간혹 과도한 I/O 로드가 있는 경우 일부 하드웨어 플랫폼에서 읽기 부실이 반환될 수 있음을 확인했습니다. 확장된 진단에서 가능한 읽기 부실/쓰기 손실 조건이 나타나면 하드웨어 공급업체에 연락하여 SQLIOStress 유틸리티를 사용한 테스트와 즉각적인 후속 조치를 요청하십시오.

현재 상태

Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열한 제품에서 이 문제를 확인했습니다.

이 문제는 Microsoft SQL 2000 서비스 팩 4에서 처음 수정되었습니다.

추가 정보

"현상" 절에서 설명하는 오류 메시지가 나타난 경우 실제 드라이브 오류 같은 이벤트로 이러한 오류 메시지를 파악할 수 없으면 SQL Server, 운영 체제, 드라이버 및 하드웨어의 알려진 문제를 검토하십시오. I/O 관련 외부 문제의 검색에 도움을 주기 위해 추가 SQL Server 진단이 이 빌드에 추가되었습니다. 추가 진단에서는 다음 두 가지 조건에 대한 정보를 제공하려고 합니다.
  • 쓰기 손실: WriteFile API를 성공적으로 호출했지만 SQL Server가 쓰기에 성공했다는 통보를 받아도 운영 체제, 드라이버 또는 캐싱 컨트롤러가 실제 미디어로 데이터를 제대로 플러시하지 않습니다.
  • 읽기 부실: ReadFile API를 성공적으로 호출했지만 운영 체제, 드라이버 또는 캐싱 컨트롤러가 이전 버전의 데이터를 잘못 반환합니다.
예를 들어, Microsoft에서는 WriteFile API 호출이 성공한 것으로 반환되지만 즉시 같은 데이터 블록을 읽으면, 하드웨어 읽기 캐시에 저장되어 있는 데이터 등의 이전 데이터가 반환되는 시나리오를 확인했습니다. 읽기 캐시 문제 때문에 이 문제가 발생하기도 합니다. 다른 경우에서는 쓰기 데이터가 실제 디스크에 실제로 기록되지 않습니다.

이러한 문제에 추가 진단을 사용하기 위해 SQL Server에 추적 플래그 818이 추가되었습니다. SQL Server를 실행하는 컴퓨터에 시작 매개 변수 -T818로 추적 플래그 818을 지정하거나 다음 문을 실행할 수 있습니다.
DBCC TRACEON(818, -1)

추적 플래그 818은 SQL Server를 실행하는 컴퓨터가 수행하는 마지막 2,048개의 성공적인 쓰기 작업을 추적하는 데 사용되는 인-메모리 링 버퍼를 활성화합니다. 추적 대상 작업에서 정렬과 작업 파일 I/O는 제외됩니다. 오류 605, 823 또는 3448 같은 오류가 발생하면 들어오는 버퍼의 로그 시퀀스 번호(LSN) 값이 최근 쓰기 목록과 비교됩니다. 읽기 작업 중 검색된 LSN이 쓰기 작업 중 지정된 것보다 이전 값이면 SQL Server 오류 로그에 새로운 오류 메시지가 기록됩니다. 대부분의 SQL Server 쓰기 작업은 검사점이나 지연식 쓰기로 발생합니다. 지연식 쓰기는 비동기 I/O를 사용하는 백그라운드 작업입니다. 링 버퍼 구현은 간단하므로 시스템 성능에 미치는 영향은 미약합니다.

다음 오류 메시지는 SQL Server가 WriteFile API 호출이나 ReadFile API 호출로부터 오류를 받지 않았음을 나타냅니다. 하지만 LSN을 검토하면 값이 올바르지 않습니다.
SQL Server has detected an unreported OS/hardware level read or write problem on Page (1:75007) of database 12
LSN returned (63361:16876:181), LSN expected (63361:16876:500)
Contact the hardware vendor and consider disabling caching mechanisms to correct the problem
이 시점에서 읽기 캐시에 이전 버전의 페이지가 포함되어 있거나 데이터가 실제 디스크에 제대로 기록되어 있지 않습니다. 쓰기 손실이나 읽기 부실이 있는 경우 SQL Server는 운영 체제, 드라이버 또는 하드웨어 계층과 관련된 외부 문제를 보고합니다.

오류 605나 오류 823이 있는 트랜잭션을 롤백하려고 할 때 오류 3448이 발생하면 SQL Server를 실행하는 컴퓨터가 자동으로 데이터베이스를 닫은 다음 데이터베이스를 열고 복구하려고 합니다. 오류 605나 오류 823이 있는 첫 번째 페이지가 잘못된 페이지로 간주되고 SQL Server를 실행하는 컴퓨터가 이 페이지의 ID를 보관합니다. 복구 중, 다시 실행 단계 전에 잘못된 페이지 ID를 읽으면 페이지 헤더에 대한 기본 정보가 SQL Server 오류 로그에 기록됩니다. 이 작업은 쓰기 손실과 읽기 부실 시나리오를 구별하는 데 도움이 되므로 중요합니다.

읽기 부실 시나리오에서는 다음 두 가지 일반적인 현상이 나타날 수 있습니다.
  • 데이터베이스 파일이 닫힌 다음 열리면 최근에 읽은 올바른 데이터가 복구 중 반환됩니다.
  • 검사점을 발행하고 DBCC DROPCLEANBUFFERS 문을 실행하여 메모리에서 모든 데이터베이스 페이지를 제거한 다음 데이터베이스에서 DBCC CHECKDB 문을 실행하면 최근에 읽은 데이터가 반환됩니다.
위에서 설명한 현상은 읽기 캐싱 문제를 나타내며 읽기 캐시를 해제하여 해결되는 경우가 많습니다. 앞에서 설명한 작업은 일반적으로 캐시를 강제로 무효화시키며 성공적 데이터 읽기는 실제 미디어가 제대로 업데이트되었음을 나타냅니다. 캐싱 메커니즘을 강제로 플러시한 후에도 다시 읽은 페이지가 여전히 이전 버전의 데이터인 경우 쓰기 손실 문제가 발생한 것입니다.

하드웨어 캐시에 특정한 문제가 아니라 필터 드라이버의 문제일 수 있습니다. 이러한 경우 백업 유틸리티와 바이러스 백신 소프트웨어 등의 소프트웨어를 검토한 다음 필터 드라이버에 문제가 있는지 확인하십시오.

Microsoft는 오류 605나 오류 823의 조건을 만족하지는 않지만 동일한 읽기 부실이나 쓰기 손실 작업으로 인해 발생하는 문제도 확인했습니다. 어떤 경우에는 같은 LSN 값으로 페이지가 두 번 업데이트된 것으로 나타납니다. 개체 ID페이지 ID가 올바르고(페이지가 이미 개체에 할당되어 있음) 페이지가 변경된 다음 변경 내용이 디스크로 플러시되는 경우 이 문제가 발생할 수 있습니다. 다음 페이지 검색에서 이전 이미지가 반환되고 두 번째 변경이 이루어집니다. SQL Server 트랜잭션 로그에 페이지가 같은 LSN 값으로 두 번 업데이트되었다고 기록됩니다. 이러한 동작은 트랜잭션 로그 시퀀스를 복원하려고 하거나, 외래 키 오류나 손실된 데이터 항목 같은 데이터 일관성 문제가 있을 때 문제가 됩니다. 다음 오류 메시지는 이러한 경우의 한 가지 예입니다.
오류: 3456, 심각도: 21, 상태: 1 (1:1787100) 페이지, 'authors' 데이터베이스(7)에서 트랜잭션 ID (0:825853240)에 대한 로그 레코드 (276666:1664:19)을(를) 실행 취소할 수 없습니다. 페이지: LSN = (276658:4501:9), 유형 = 1. 로그: OpCode = 4, 컨텍스트 2, PrevPageLSN: (275565:3959:31)..

일부 시나리오는 다음 목록에 자세하게 나와 있습니다.
  • LSN Sequence		Action
    1			Checkpoint
    2			Begin Transaction
    3			Table created or truncated
    4			Inserts (Pages allocated)
    5			Newly allocated page written to disk by Lazy Writer
    6			Select from table ? Scans IAM chain, newly allocated page read back from disk (LRU | HASHED = 0x9 in getpage message), encounters Error 605 - Invalid Object ID
    7			Rollback of transaction initiated
    
  • LSN Sequence		Action
    1			Checkpoint
    2			Begin Transaction
    3			Page Modification
    4			Page written to disk by Lazy Writer
    5			Page read in for another modification (stale image returned)
    6			Page Modified for a second time but because of stale image does not see first modification 
    7			Rollback ? Fails ? Transaction Log shows two different log records with the same PREV LSN for the page
    
SQL Server '정렬' 연산자는 주로 tempdb 데이터베이스 대상의 I/O 작업을 수행합니다. 이러한 I/O 작업은 버퍼 I/O 작업과 유사하지만 읽기 다시 시도 논리를 사용하여 비슷한 문제를 해결하도록 설계되었습니다. 이 문서에서 설명하는 추가 진단은 이러한 I/O 작업에는 적용되지 않습니다.

Microsoft는 다음 정렬 읽기 오류의 근본 원인이 일반적으로 읽기 부실이나 쓰기 손실이라는 것을 확인했습니다.
2003-04-01 20:13:31.38 spid122 SQL Server 어설션: 파일: <p:\sql\ntdbms\storeng\drs\include\record.inl>, 줄=1447 어설션 오류 = 'm_SizeRec > 0 && m_SizeRec <= MAXDATAROW'.

2003-03-29 09:51:41.12 spid57 Sort read failure (bad page ID). pageid = (0x1:0x13e9), dbid = 2, file = e:\program files\Microsoft SQL Server\mssql\data\tempdb.mdf. Retrying.

2003-03-29 09:51:41.13 spid57 오류: 823, 심각도: 24, 상태: 7
2003-03-29 09:51:41.13 spid57 'e:\program files\Microsoft SQL Server\mssql\data\tempdb.mdf' 파일의 0x000000027d2000 오프셋에서 읽기 중 I/O 오류 (잘못된 페이지 ID)이(가) 검색되었습니다.

* 00931097 Module(sqlservr+00531097) (utassert_fail+000002E3)
* 005B1DA8 Module(sqlservr+001B1DA8) (RecBase::Resize+00000091)
* 00407EE7 Module(sqlservr+00007EE7) (RecBase::LocateColumn+00000012)
* 00852520 Module(sqlservr+00452520) (mergerow+000000A4)
* 008522B3 Module(sqlservr+004522B3) (merge_getnext+00000285)
* 0085207D Module(sqlservr+0045207D) (mergenext+0000000D)
* 004FC5FB Module(sqlservr+000FC5FB) (getsorted+00000021)

이러한 정렬 오류가 발생하는 경우 tempdb를 캐싱하지 않는 논리 드라이브로 이동하거나 읽기 캐싱 메커니즘을 해제하면 문제가 해결되는 경우가 많습니다.

읽기 부실이나 쓰기 손실로 인해 예기치 않게 데이터가 저장되므로 광범위한 현상이 나타날 수 있습니다. 데이터가 손실되는 현상이 나타날 수 있지만 데이터 손실로 인한 더욱 일반적인 결과로는 오류 644나 오류 625 같은 인덱스 손상이 있습니다.
오류 644 심각도 수준 21 메시지 텍스트 '%.*ls' 데이터베이스, 인덱스 ID %d, 인덱스 페이지 %S_PGID에서 RID '%.*hs'인 인덱스 항목을 찾을 수 없습니다.
오류 625 심각도 수준 21 메시지 텍스트 slotid(%d)가 유효하지 않으므로 RID를 사용하여 %S_PGID 페이지에서 행을 검색할 수 없습니다.
행 카운트 작업을 수행한 후 행이 손실되는 문제가 발생하기도 합니다. 이 문제는 쓰기 손실 때문에 발생합니다. 페이지가 클러스터된 인덱스 페이지 체인에 연결되어 있는 경우 실제로 쓰기 손실이 일어나면 데이터도 손실됩니다.

중요 위의 문제가 발생하거나 캐싱 메커니즘 해제와 관련된 비슷한 문제가 발생한 것 같으면 SQL Server의 최신 업데이트와 최신 SQL Server I/O Stress Simulator를 구하는 것이 좋습니다. 운영 체제와 관련 구성을 자세하게 검토하는 것도 좋습니다.

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
231619 INF: 디스크 하위 시스템의 스트레스를 테스트하는 SQLIOStress 유틸리티




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 826433 - 마지막 검토: 2006년 3월 29일 수요일 - 수정: 6.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2000 서비스 팩 3
키워드:?
kbinfo kbbug kbfilter kbqfe kbhardware kbsysadmin kbdatabase kbdriver kbhotfixserver KB826433

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com