2009-08-25 11 views
7

私は最近、プロジェクトを引き継いで、ASP.NETメンバーシップデータベーステーブル内のインデックスを再構築するSQLジョブセットアップを3時間ごとに実行するようにしました。SQL Server 2005 - インデックスをどのくらいの頻度で再構築する必要がありますか?

これは、インデックスを1日に8回再構築するのにはかなり高いようです。私は毎日約2,000人の新規ユーザーと約200万人の登録ユーザーを獲得しています。

適切なインデックスの再構築スケジュールをお勧めしますか?

答えて

11

あなたのデッドロックは間違いなく、インデックスの再構築に関連することができます。これらの索引を頻繁に再構築する必要はないことは間違いありません。少なくとも、リビルド前にインデックスが削除されないようにするには、ONLINEオプションの使用を検討する必要があります。

は、ここで我々が使用するガイドラインです:インデックス 断片化が40%以上であるとき

インデックスを再構築する必要があります。インデックス は、インデックス のフラグメンテーションが10%から40%の間に再編成する必要があります。 索引の再構築処理では、さらにCPU が使用され、データベースのリソースがロックされます。 SQL Serverの開発バージョンと エンタープライズバージョンには、インデックスが が再構築されたときにオンにできるオプションオンラインの があります。 ONLINEオプションを使用すると、再構築中にインデックス が使用可能になります。

出典:http://blog.sqlauthority.com/2007/12/22/sql-server-difference-between-index-rebuild-and-index-reorganize-explained-with-t-sql-script/

0

再構築するとシステムの安定性が損なわれるか、あまりにも多くのシステム時間がかかりますか?

あなたは何を答える場合 - それには触れません:)

+0

それはには表示されませんが、私は新しいユーザー登録に関連一日中、いくつかのデッドロックの問題を入手できますか。私はこれが索引の再構築のために発生したのだろうかと思っていました。 –

+0

は、オンラインまたはオフラインの再構築のどちらを実行しているかによって異なります。オフラインの場合は、索引に読み取りロックを設定するため、デッドロックが発生する可能性があります。オンラインの場合は、インデックスにのみスキーマロックが設定されます。 –

3

デッドロックグラフをキャプチャして、あなたは推測とは反対に、デッドロックされているものの実際の答えを持っています。デッドロックが非常に稀である(または少なくとも10秒以下の)状態であることを考えれば、かなり安全にプロファイラを取り付けてLocks/Deadlock Graphイベントだけをキャプチャすることができます。

6

大まかに言えば、30%以上断片化されている場合はREBUILD、10%〜30%の場合はREORGANIZEです。

1000ページ未満のテーブルでは気にしないでください。30%を超えるREBUILDを実行した後でさえ、30%になることがよくあります。

平均的なデータベースの場合は、週に1回程度、かなり頻繁に再構築/再編成することを目指しているはずです。インデックスよりも頻繁にインデックスを最適化する必要がある場合、おそらくフィルファクタとパディングを見直す必要があります。

バルクデータロード後の例外は、インデックスを断片化している場合があります(インデックスを無効にしたり、インデックスを削除して読み込み中のデータに応じて再構築する方がよい場合があります)。

要するに、1日に8回は過剰と思われます。

参考文献:
http://technet.microsoft.com/en-us/library/ms189858.aspx
http://www.sqlmusings.com/2009/03/15/a-more-effective-selective-index-rebuildreorganize-strategy/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/

関連する問題