SQL Server 2012 のインデックス再構築処理でデータ損失の可能性

SQL Server 2012 の Hotfix が公開されました。
Update:この個別修正は、最新のService Packにも含まれています。

FIX: Data loss in clustered index occurs when you run online build index in SQL Server 2012
https://support.microsoft.com/kb/2969896/

SQL Server 2012 で ONLINE オプションを有効にしてクラスター化インデックスの再構築を実行すると、データを損失する可能性があります。対処方法としては2つあります

  • 提供されている Hotfix を適用する
  • Hotfix の適用が難しい場合、インデックス再構築 を単一スレッドで処理させる( MAXDOP を1に設定します)

MAXDOP は max degree of parallelism の略で、並列処理の最大限度です。この値0、もしくは2以上の場合、SQL Server は必要に応じて並列処理でクエリを実行します。MAXDOP はインスタンスレベルでも設定できますが、今回の回避方法としては、クエリヒントとしてしているする方がより適切なケースが多いかと思います。

現状はMAXDOPの指定がないインデックスの再構築クエリが下記のようであったとすると、

ALTER INDEX ix_sample ON sample_table REBUILD WITH (ONLINE=ON)

次のようにMAXDOPを指定します。

ALTER INDEX ix_sample ON sample_table REBUILD WITH (ONLINE=ON, MAXDOP=1)

これでインデックスの再構築は常に単一スレッドで実行される事になります。回避方法としてはこれで問題ありませんが、インデックス再構築の処理時間が延びることになりますので、メンテナンス時間に対して問題がないかどうか等を事前に検討いただく事を推奨します。

また、対象はクラスター化インデックスになりますので、非クラスター化インデックスについてはこれまで通り並列処理にて再構築することが可能です。

広告

SQL Server 2012 のインデックス再構築処理でデータ損失の可能性」への3件のフィードバック

  1. ピンバック: SQL Server 2012 の KB2969896 の適用 | SE の雑記

  2. ピンバック: SQL Server の累積的な更新プログラムリリース 2014年6月 | SQL Server サポート の中の人

  3. ピンバック: SQL Server の累積的な更新プログラムリリース 2014年7月 | SQL Server サポート の中の人

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中