MSSQLSERVER_856
適用対象: SQL Server
詳細
属性 | 値 |
---|---|
製品名 | SQL Server |
イベント ID | 856 |
イベント ソース | MSSQLSERVER |
コンポーネント | SQLEngine |
シンボル名 | BAD_MEMORY_CLEAN_DATABASE_PAGE |
メッセージ テキスト | SQL Server で、データベース '%ls' のハードウェア メモリの破損、ファイル ID: %u、ページ ID が検出されました。%u、メモリ アドレス: 0x%I64x、ページを正常に回復しました |
説明
このメッセージは、SQL Server がバッファー プールの外部にあるキャッシュされたオブジェクトの不適切なメモリ ページを検出したことを示します。 このメッセージは、メモリ エラーから回復する機能をサポートするシステムで表示されます。 SQL Server は、変更されていない破損したメモリ ページを破棄してこれらのメモリ エラーを修正し、このエラー メッセージをログに記録します。 破損したメモリ ページが変更されている (ダーティ) 場合は、エラー 824 が発生します (MSSQLSERVER_824)
ユーザー アクション
ハードウェアまたはシステム チェックを実行して、メモリまたは CPU の問題があるかどうかを確認する必要があります。 すべてのシステム ドライバー、オペレーティング システムの更新プログラム、およびハードウェアの更新プログラムが確実にシステムに適用されていることを確かめます。 メモリ関連のテストを含む、ハードウェアの製造元の診断を実行することを検討します。 このエラーが発生した場合は常に、このインスタンス内のすべてのデータベースに対して DBCC CHECKDB
を実行することを検討してください。
詳細
新しいハードウェアが備わっており、Windows Server 2012 以降のバージョンを実行しているコンピューター上では、ハードウェアにより、オペレーティング システムとアプリケーションに対して、メモリ ページ (オペレーティング システム ページ) が不良または破損とマークされていることを通知できます。 SQL Server などのアプリケーションでは、次の API セットを使用して、これらの不適切なメモリ ページ通知を登録できます。
GetMemoryErrorHandlingCapabilities
RegisterBadMemoryNotification
BadMemoryCallbackRoutine
SQL Server は、Microsoft SQL Server 2012 (11.x) 以降のバージョンでこれらの通知のサポートを追加します。 SQL Server の起動時に、SQL Server はハードウェアがこの新機能をサポートしているかどうかを確認します。 また、エラー ログに次のメッセージが表示されます。
<Datetime> サーバー マシンでは、メモリ エラーの回復がサポートされています。 メモリ破損から回復するために、SQL メモリ保護が有効になっています。
現時点では、SQL Server がこれらの通知を受信すると、バッファー プールのみがアクションを実行します。 通知を受信すると、SQL Server はバッファー プール全体を反復処理し、割り当てられた各バッファーのアドレスを検出する必要があります。 次に、SQL Server では、 QueryWorkingSetEX
API を使用して、データ ページをバックアップするメモリ ページのいずれかが無効としてマークされているかどうかを確認します。 このメモリ ページに対応する PSAPI_WORKING_SET_EX_BLOCK
出力構造体のそのメンバーは、何らかの破損が報告された場合に 1 に設定され、不良と見なされるようになります。
そのバッファー プールまたはデータ ページが現在変更されていない場合、または I/O を処理していない場合、SQL Server はデータ ページを破棄してコミット解除できます。 次に、SQL Server によって次のメッセージがログに記録されます。
SQL Server で、データベース '%ls' のハードウェア メモリの破損、ファイル ID: %u、ページ ID が検出されました。%u、メモリ アドレス: 0x%I64x。ページが正常に復旧されました。
クエリでデータ ページが再び必要になったときに、バッファー プールでディスクからデータ ページを読み取り、その内容をバッファー プールに戻すことができます。 ディスク上のバージョンのページが破損状態になるおそれもあります。 その場合、エラー 824 などの追加のエラーが SQL Server によってログに記録される場合があります。
無効なページがバッファー プールではなく、キャッシュされた他のオブジェクトまたは構造体によって使用されている場合、SQL Server は次のメッセージをログに記録します。
修正できないハードウェア メモリの破損が検出されました。 システムが不安定になるおそれがあります。 詳細については、Windows イベント ログを確認してください。
サーバーによってメモリ エラーが報告されている場合は、コンピューターのハードウェア ベンダーに問い合わせて、メモリ診断の実行、BIOS とファームウェアの更新、不良メモリ モジュールの交換など、適切なアクションを行う必要があります。
SQL Server トレース フラグ 849 を使用して、SQL Server がメモリ エラー通知のためにオペレーティング システムに登録されないようにすることができます。 ただし、トレース フラグ 849 を有効にすると、SQL Server がオペレーティング システムから不適切なメモリ通知を受信できなくなることに注意してください。 そのため、一般的な状況ではこのトレース フラグを使用しないことをお勧めします。
また、既定では、SQL Server はサポートされているハードウェアでこれらの通知を受け取ります。
また、SQL Server がこれらのメモリ エラー通知に登録すると、遅延ライター システム プロセスでは一定のページ チェックが実行されないことにも注意する必要があります。 一定のページ チェックの詳細については、「SQL Server でのメッセージ 832 (変更不可のページが変更されました) のトラブルシューティングの方法」を参照してください。