SQL Serverでインデックスを再構築および再編成する必要がある理由


28

インターネットを検索した後、私は理由を見つけることができませんでした

  1. SQL Serverでインデックスを再構築および再編成する必要があるのはなぜですか?

  2. 再構築して再編成すると、内部的にはどうなりますか?

サイトの記事には次のように書かれてます:

インデックスの断片化が40%を超える場合、インデックスを再構築する必要があります。インデックスの断片化が10%〜40%の場合、インデックスを再編成する必要があります。インデックス再構築プロセスはより多くのCPUを使用し、データベースリソースをロックします。SQL Server開発バージョンとエンタープライズバージョンにはオプションのオンラインがあり、インデックスの再構築時にオンにできます。ONLINEオプションは、再構築中にインデックスを利用可能にします。

これを理解することはできませんでしたが、これWHENを行うにはそれを言うが、WHYインデックスを再構築および再編成する必要があるかどうかを知りたいですか?


1
これが理由についての質問であり、ここでいつについての質問です。
ニックチャマス

回答:


28

挿入の更新と削除を実行すると、インデックスは内部と外部の両方で断片化されます。

内部フラグメンテーションは、インデックスページの空き領域の割合が高いことを意味します。つまり、SQL Serverは、インデックスのスキャン時にさらに多くのページを読み取る必要があります。

外部のフラグメンテーションは、インデックスのページが整然としていない場合であるため、SQL Serverは、特にIOの観点から、インデックスを読み取るためにより多くの作業を行う必要があります。

インデックスが断片化しすぎると、せいぜいクエリの効率が低下しますが、最悪の場合、SQL Serverはインデックスの使用をすべて停止します。つまり、実質的にすべてのクエリはテーブルスキャンまたはクラスター化インデックススキャンを実行する必要があります。これはパフォーマンスを大きく損ないます!

インデックスを再編成すると、SQL Serverは既存のインデックスページを使用し、それらの年齢のデータをシャッフルします。これにより、内部の断片化が緩和され、少量の外部の断片化も除去できます。再構築よりも軽量な操作であり、常にオンラインです。

インデックスを再構築すると、SQL Serverは実際にインデックスのデータを再利用し、インデックスページの新しいセットを使用します。これにより、内部および外部の断片化が明らかに軽減されますが、より重い操作であり、デフォルトではインデックスがオフラインになりますが、SQL Serverのバージョンと設定に応じてオンライン操作として実行できます。

ただし、再構築後に断片化が0になるとは思わないでください。MAXDOPクエリヒントを使用しない限り、SQL Serverは再構築操作と関連するプロセッサを並列化します。各プロセッサまたはコアは、インデックスのセクションまたはフラグメントを個別に再構築するため、断片化が増加する可能性があります。お互い。これは、最適なフラグメンテーションレベルとインデックスの再構築にかかる時間とのトレードオフです。フラグメンテーションがほぼ0の場合、MAXDOP 1を使用して、TempDBで結果をソートします。


すばらしいです...!簡単に説明します...!
DineshDB

0

データベースレベルの速度低下/長時間実行クエリなどの問題を引き起こすフラグメンテーションを削除するため。

このための断片化と、インデックスの再構築および再編成(またはインデックスページの再編成)の仕組みについて詳しく理解するには、以下のリンクを参照してください:https : //www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation


1
この情報は、表示した後(一部)時代遅れになってきたのはなぜインデックスの断片化問題ではない
ジョン別名hot2use
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.