web-dev-qa-db-ja.com

SQL Serverでのオフラインインデックスとオンラインインデックスの再構築の違いは何ですか?

インデックスを再構築するとき、ONLINE = OFFおよびONLINE = ONのオプションがあります。 ONLINEモードがオンの場合、インデックスのコピーを作成し、新しいクエリを使用するように切り替えてから、元のインデックスを再構築し、両方のバージョン管理を使用して変更を追跡することを知っています(間違っている場合は修正してください)。

しかし、SQLはオフラインモードで何をしますか?

48
esac

ONLINEモードでは、新しいインデックスが作成されますが、古いインデックスは読み取りと書き込みにアクセスできます。古いインデックスの更新も新しいインデックスに適用されます。反物質列は、更新と再構築(つまり、まだコピーされていない行の削除)の競合の可能性を追跡するために使用されます。 オンラインインデックス操作 を参照してください。プロセスが完了すると、テーブルは短時間ロックされ、古いインデックスが新しいインデックスに置き換わります。インデックスにLOB列が含まれる場合、SQL Server 2005/2008/R2ではONLINE操作はサポートされません。

OFFLINEモードでは、読み取りまたは書き込みのためにテーブルが前もってロックされ、テーブルのロックを保持しながら、新しいインデックスが古いインデックスから構築されます。インデックスの再構築中は、テーブルに対する読み取りまたは書き込み操作は許可されません。操作が完了すると、テーブルのロックが解除され、読み取りと書き込みが再び許可されます。

SQL Server 2012では、LOBの制限が解除されました。 LOB列を含むインデックスのオンラインインデックス操作 を参照してください。

63
Remus Rusanu

テーブルのロックに関しては、オンラインインデックスの再構築はあまり邪魔になりません。オフラインでの再構築は、テーブルの重いロックを引き起こし、再構築の実行中にデータベースにアクセスしようとしているものに対して重大なブロッキングの問題を引き起こす可能性があります。

「テーブルロックはインデックス操作中に適用されます(オフライン再構築中)。クラスタ化インデックス、空間インデックス、XMLインデックスを作成、再構築、または削除するか、非クラスタ化インデックスを再構築または削除し、スキーマを取得するオフラインインデックス操作テーブルの変更(Sch-M)ロック。これにより、操作中にすべてのユーザーが基になるテーブルにアクセスできなくなります。非クラスター化インデックスを作成するオフラインインデックス操作は、テーブルの共有(S)ロックを取得します。基礎となるテーブルに追加しますが、SELECTステートメントなどの読み取り操作は許可します。」

http://msdn.Microsoft.com/en-us/library/ms188388(v = sql.110).aspx

さらに、オンラインインデックスの再構築は、エンタープライズ(または開発者)バージョンのみの機能です。

6
dunos

主な違いは次のとおりです。

1)オフラインインデックスの再構築は、オンラインの再構築よりも高速です。

2)SQL Serverオンラインインデックスの再構築中に必要な追加のディスク領域。

3)SQL Serverオンラインインデックスの再構築で取得されたSQL Serverロック。

  • このスキーマ変更ロックは、テーブルへの他のすべての同時アクセスをブロックしますが、古いインデックスが削除されて統計が更新される間、非常に短い時間だけ保持されます。
4