[PRB] 報告されない入出力の問題を検出するために追加された新しい 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 データベース 'pubs' で、オブジェクト 'titles' ではなくオブジェクト 'authors' に属する論理ページ (1:7040966) を取り出そうとしました。
2003-07-24 16:52:40.99 spid63 エラー: 3448、レベル: 21、状態: 1
2003-07-24 16:52:40.99 spid63 ログ レコード (63361:16876:181) を元に戻せませんでした。トランザクション ID (0:159696956)、ページ (1:7040977)、データベース 'pubs' (データベース ID 12)。 ページ情報 : 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 に read 中に I/O エラー (bad page ID) が発生しました。

解決方法

Service Pack の情報

この問題を解決するには、Microsoft SQL Server 2000 用の最新の Service Pack を入手します。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
290211 最新の SQL Server 2000 Service Pack の入手方法

ビルド情報

マイクロソフトでは、追跡機能を拡張した SQL Server のビルドをリリースしました。導入された機能は、「現象」に記載されているエラー メッセージのトラブルシューティングに役立つように設計されています。オペレーティング システムやハードウェアに関連した問題が発生している可能性がない場合は、このビルドを適用する必要はありません。

このビルド (英語版) のファイル属性は次表のとおりです。ただし、これより新しいビルドがリリースされている可能性もあります。各ファイルの日付および時刻は、世界協定時刻 (UTC) で示されています。ファイル情報に表示される時刻は、ローカル時刻に変換されています。UTC とローカル時刻との時差を確認するには、コントロール パネルの [日付と時刻] の [タイム ゾーン] タブを使用してください。
   日付          時刻    バージョン            サイズ           ファイル名
   -------------------------------------------------------------------------
   2003/5/31  18:45  2000.80.818.0      78,400 バイト  Console.exe      
   2003/6/25  01:01  2000.80.818.0      33,340 バイト  Dbmslpcn.dll     
   2003/4/25  02:12                    786,432 バイト  Distmdl.ldf
   2003/4/25  02:12                  2,359,296 バイト  Distmdl.mdf
   2003/1/30  01:55                        180 バイト  Drop_repl_hotfix.sql
   2003/6/23  22:40  2000.80.837.0   1,557,052 バイト  Dtsui.dll        
   2003/6/23  22:40  2000.80.837.0     639,552 バイト  Dtswiz.dll       
   2003/4/24  02:51                    747,927 バイト  Instdist.sql
   2003/5/3   01:56                      1,581 バイト  Inst_repl_hotfix.sql
   2003/2/8   06:40  2000.80.765.0      90,692 バイト  Msgprox.dll      
   2003/4/1   02:07                      1,873 バイト  Odsole.sql
   2003/4/5   01:46  2000.80.800.0      62,024 バイト  Odsole70.dll     
   2003/5/7   20:41  2000.80.819.0      25,144 バイト  Opends60.dll     
   2003/4/2   21:48  2000.80.796.0      57,904 バイト  Osql.exe         
   2003/4/2   23:15  2000.80.797.0     279,104 バイト  Pfutil80.dll     
   2003/5/22  22:57                     19,195 バイト  Qfe469571.sql
   2003/7/11  17:04                  1,084,147 バイト  Replmerg.sql
   2003/4/4   21:53  2000.80.798.0     221,768 バイト  Replprov.dll     
   2003/2/8   06:40  2000.80.765.0     307,784 バイト  Replrec.dll      
   2003/7/11  16:56                  1,085,925 バイト  Replsys.sql
   2003/6/1   01:01  2000.80.818.0     492,096 バイト  Semobj.dll       
   2003/5/31  18:27  2000.80.818.0     172,032 バイト  Semobj.rll
   2003/5/29  00:29                    115,944 バイト  Sp3_serv_uni.sql
   2003/6/1   01:01  2000.80.818.0   4,215,360 バイト  Sqldmo.dll       
   2003/4/7   17:44                     25,172 バイト  Sqldumper.exe    
   2003/3/19  18:20  2000.80.789.0      28,672 バイト  Sqlevn70.rll
   2003/7/2   00:18  2000.80.834.0     180,736 バイト  Sqlmap70.dll     
   2003/2/8   06:40  2000.80.765.0      57,920 バイト  Sqlrepss.dll     
   2003/8/1   00:50  2000.80.847.0   7,594,065 バイト  Sqlservr.exe     
   2003/7/25  21:44  2000.80.845.0     590,396 バイト  Sqlsort.dll      
   2003/2/8   06:40  2000.80.765.0      45,644 バイト  Sqlvdi.dll       
   2003/6/25  01:01  2000.80.818.0      33,340 バイト  Ssmslpcn.dll     
   2003/6/1   01:01  2000.80.818.0      82,492 バイト  Ssnetlib.dll     
   2003/6/1   01:01  2000.80.818.0      25,148 バイト  Ssnmpn70.dll     
   2003/6/1   01:01  2000.80.818.0     158,240 バイト  Svrnetcn.dll     
   2003/5/31  18:59  2000.80.818.0      76,416 バイト  Svrnetcn.exe     
   2003/4/30  23:52  2000.80.816.0      45,132 バイト  Ums.dll          
   2003/7/2   00:19  2000.80.834.0      98,816 バイト  Xpweb70.dll
: ファイルの依存関係のため、最新の修正プログラムまたは機能には上記以外のファイルが追加されていることがあります。

マイクロソフトでは、一部のハードウェア プラットフォームでは、めったに発生しないような入出力の負荷が高い状態で、読み取りの結果として古い情報が返されることがあることを確認しました。この拡張機能の診断結果で、古い情報が読み取られている状態や書き込みの内容が失われた状態が発生している可能性が示された場合は、すぐにハードウェア ベンダに連絡してサポートを受け、SQLIOStress ユーティリティを使用してテストを行ってください。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

この問題は、Microsoft SQL Server 2000 Service Pack 4 で最初に修正されました。

詳細

「現象」に記載されているエラー メッセージが表示され、ドライブの物理的な障害などの事象によってそのエラーを説明できない場合は、SQL Server、オペレーティング システム、ドライバ、およびハードウェアのあらゆる既知の問題点を確認します。このビルドで追加された新たな SQL Server 診断機能は、外部の入出力関連の問題を検出するのに役立ちます。新たな診断機能は、次の 2 つの状態に関する情報を提供するためのものです。
  • 書き込み内容の消失 : WriteFile API の呼び出しは成功し、SQL Server には書き込みが正常に実行されたことが通知されますが、オペレーティング システム、ドライバ、またはキャッシュ コントローラによりデータが物理メディアに正しくフラッシュされません。
  • 古い情報の読み取り : ReadFile API の呼び出しは成功しますが、オペレーティング システム、ドライバ、またはキャッシュ コントローラにより、誤って古いバージョンのデータが返されます。
たとえば、マイクロソフトでは次のような事例を確認しました。WriteFile API の呼び出しは正常に実行が完了しますが、その直後の同じデータ ブロックに対する読み取りでは、正常に実行されても、ハードウェアの読み取りキャッシュに格納されていた可能性のある、古いデータが返されます。この問題は、読み取りキャッシュの問題によって発生することもあります。場合によっては、書き込みデータが実際にはまったく物理ディスクに書き込まれないこともあります。

この種の問題に対する新しい診断機能を有効にするために、SQL Server にトレース フラグ 818 が追加されました。SQL Server を実行しているコンピュータの起動時のパラメータで -T818 を指定することによって、トレース フラグ 818 を設定できます。または、次のステートメントを実行することにより、トレース フラグを設定できます。
DBCC TRACEON(818, -1)

トレース フラグ 818 により、SQL Server を実行しているコンピュータによって実行され、成功した最新の 2,048 個の書き込み処理を追跡するために使用するメモリ内のリング バッファが有効になります。ただし、追跡される操作には並べ替えや作業用ファイルへの入出力は含まれません。エラー 605、823、または 3448 などのエラーが発生した場合、入力バッファのログ シーケンス番号 (LSN) の値が最新の書き込み処理の一覧と比較されます。読み取り処理中に取得される LSN が、書き込み処理中に指定された LSN よりも古い場合は、新しいエラー メッセージが SQL Server エラー ログに出力されます。SQL Server の書き込み処理の大部分は、チェックポイントまたは遅延書き込みとして行われます。遅延書き込みは、非同期入出力を使用するバックグラウンド タスクです。リング バッファの実装による処理負荷は軽いため、システムのパフォーマンスへの影響はほとんどありません。

次のメッセージは、WriteFile API 呼び出しまたは ReadFile API 呼び出しによって、SQL Server にエラーが通知されていないことを示しています。しかし、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 の読み取り時に、ページ ヘッダーに関する主な詳細情報が SQL Server エラー ログに出力されます。この情報は、書き込み内容の消失が発生したのか、古い情報の読み取りが行われたのかを区別するのに役立つため、この動作は重要です。

古い情報の読み取りが行われた場合は、次の 2 つの一般的な現象が発生することがあります。
  • データベース ファイルが閉じられ、再度開かれると、復旧中に、最も最近書き込まれた正しいデータが返されます。
  • チェックポイントを発行し、(メモリからすべてのデータベース ページを削除するために) DBCC DROPCLEANBUFFERS ステートメントを実行後、そのデータベースに対して DBCC CHECKDB ステートメントを実行すると、最新の書き込みデータが返されます。
上記の現象は読み取りキャッシュの問題を示しており、たいていの場合、読み取りキャッシュを無効にすることによって、解決できます。通常、上記の操作により、キャッシュが強制的に無効にされるため、読み取りが正しく行われる場合は、物理メディアは正常に更新されています。キャッシュ メカニズムが強制的にフラッシュされた後でも、再読み取りされたページに依然として古いバージョンのデータが含まれている場合は、書き込み内容の消失が発生しています。

場合によっては、問題はハードウェア キャッシュに限られた問題ではなく、フィルタ ドライバの問題である場合もあります。そのような場合は、バックアップ ユーティリティやウイルス対策ソフトウェアなど、使用しているソフトウェアを確認し、フィルタ ドライバに問題がないかどうかを調べます。

マイクロソフトでは、同様の古い結果の読み取り動作や書き込み内容の消失動作に起因するものの、エラー 605 またはエラー 823 の条件に該当しない場合があることも認識しています。ある事例では、ページが同じ LSN 値で 2 回更新されていました。Object ID と Page ID が適切で (ページが既にオブジェクトに割り当てられていて)、ページに変更が行われ、ディスクにフラッシュされる場合に、この現象が発生します。次のページの取得で古いイメージが返され、その後 2 回目の変更が行われます。SQL Server トランザクション ログを参照すると、同じ LSN 値でページが 2 回更新されています。この動作により、トランザクション ログ シーケンスを復元する際に問題が発生することや、外部キー エラーやデータ エントリの不足などの、データの一貫性の問題が発生することがあります。次のエラー メッセージはこの状態の一例を示しています。
エラー: 3456、レベル: 21、状態: 1 ログ レコード (276666:1664:19)、トランザクション ID (0:825853240)、ページ (1:1787100)、データベース 'authors' (7) を再実行できませんでした。 ページ: 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 の sort 演算子では、主に tempdb データベースに対する入出力操作が実行されます。このような入出力操作はバッファ入出力操作に似ています。ただし、この入出力操作は、同様の問題を解決するために、読み取りを再試行するロジックを使用するように設計されています。このような入出力操作には、この資料に記載されている診断方法は使用できません。

マイクロソフトでは、次の並べ替え読み取りエラーの根本的な原因は、一般的に古い結果の読み取りや書き込み内容の消失にあることを認識しています。
2003-04-01 20:13:31.38 spid122 SQL Server Assertion: File: <p:\sql\ntdbms\storeng\drs\include\record.inl>, line=1447 Failed Assertion = '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 に read 中に I/O エラー (bad page 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 メッセージ テキスト、RID '%.*hs' のインデックス エントリが、インデックス ページ %S_PGID、インデックス ID %d、データベース '%.*ls' に見つかりませんでした。
エラー 625 重大度レベル 21 メッセージ テキスト、RID により、ページ %S_PGID から行を取得できません。slotid (%d) が無効です。
行数のカウント操作を行った後に、行の欠落があったという事例が報告されています。この問題は、書き込み内容の消失が原因で発生します。おそらく、ページがクラスタ化インデックスのページ チェーンにリンクされています。書き込みが物理的に失われた場合、データも失われます。

重要 : このような現象が発生する場合、またはキャッシュ メカニズムを無効にすると同様の問題が発生する可能性がある場合は、SQL Server の最新の更新および最新の SQL Server I/O Stress Simulator を入手することを強くお勧めします。また、オペレーティング システムおよび関連する構成を厳密に確認することも強くお勧めします。

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
231619 [HOWTO] SQLIOStress ユーティリティを使用して、SQL Server などのディスク サブシステムに負荷をかける方法

プロパティ

文書番号: 826433 - 最終更新日: 2006年3月24日 - リビジョン: 6.1
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 2000 Service Pack 3
キーワード:?
kbhotfixserver kbqfe kbbug kbhardware kbfilter kbdriver kbdatabase kbsysadmin kbinfo KB826433
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

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