テストラボでは、重要なインデックスが断片化しすぎないように、さまざまなジョブを試しています。
私は現在、ここで説明されているアプローチを使用しています: sys.dm_db_index_physical_stats (例-> Dセクション:スクリプトでsys.dm_db_index_physical_statsを使用してインデックスを再構築または再編成します)。
基本的に1時間ごとにdm_db_index_physical_stats
動的管理ビューにクエリを実行し、インデックスが5%から30%に断片化されている場合は再編成し、30%を超える場合は再構築します。ほとんどのテストでは問題なく動作するようですが、スケジュールされたジョブがエラーで失敗するという問題に2回遭遇しました。
ファイル 'C:\ Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVERのオフセット0x00000eae3b2000での読み取り中に、オペレーティングシステムがエラー23(データエラー(巡回冗長検査))をSQL Serverに返しました\ MSSQL\DATA\database.mdf '。
SQL Serverエラーログおよびシステムイベントログの追加のメッセージで詳細が提供される場合があります。
これは、データベースの整合性を脅かす深刻なシステムレベルのエラー状態であり、すぐに修正する必要があります。
完全なデータベース整合性チェック(DBCC CHECKDB)を実行します。このエラーは多くの要因によって引き起こされる可能性があります。詳細については、SQL Server Books Onlineを参照してください。 [SQLSTATE HY000](エラー823)
DBCC CHECKDB
を実行すると、インデックスの1つに問題が報告されます。この問題を修正できる唯一の方法は、
DBCC CHECKDB ('dbname', REPAIR_ALLOW_DATA_LOSS)
私はポジティブではありませんが、このエラーは、テストラボで負荷テストを実行しているときにインデックスを再構築または再編成したことが原因であると考えています。
私は周りを検索しましたが、インデックスの再構築に関連するこの一貫性エラーを報告している人は他にいませんでした。私のブログ投稿で私の問題の詳細情報を見ることができます: SQL Serverインデックスの破損:CRCエラー&DBCC CHECKDB
インデックスのチューニングに対する私のアプローチには欠陥がありますか? 「ライブ」データベースでインデックスを再構築しないでください(トラフィックがヒットしている間)。 (online = on)でインデックスを再構築するSQL Server Enterprise Editionの機能を使用する必要がありますか?どんな助けでもありがたいです。
SQL Server 2008 R2 Standardを実行しています。
読み取り中にオペレーティングシステムがSQL Serverにエラー23(データエラー(巡回冗長検査))を返しました
これは、オペレーティングシステムがハードディスク自体からデータを読み取るときに問題を検出したことを示します。データがファイルシステムに書き込まれると、オペレーティングシステムは書き込まれた各ブロックのCRCコードを計算します。そのデータが後で読み取られると、オペレーティングシステムは読み取られたデータに対してCRC操作を再度実行し、ファイルシステムに格納されているCRCと比較します。これらの2つのCRCコードがOSと一致しない場合、エラー23が報告されます。ドライブ自体、またはマザーボードやドライブコントローラーなどの他のコンポーネントにハードウェアの問題がない場合、私は非常に驚きます。
SQL ServerのEnterprise EditionのWITH (ONLINE=ON)
は、この問題にはまったく影響しません。オンラインインデックス操作とオフラインインデックス操作は、オペレーティングシステムレイヤーで違いはありません。インデックスを再構築または再作成するために、必要に応じてデータが読み書きされます。