まず、断片化が重要かどうかを検討することが重要です。
クエリが単一行シークのみを実行している場合、断片化にまったく気付かない可能性があります。最近のSANでは、SANレベルのキャッシュにより、物理IOが十分に高速になり、断片化が問題にならない場合があります。SSDでは、断片化されたインデックスのスキャンによって引き起こされるランダムIOパターンは、実際には断片化されていないデータよりも優れたパフォーマンスをもたらす可能性があります。
多くの場合、インデックスを再構築するとパフォーマンスの問題が修正されたことに人々は気づきます。インデックスを再構築すると、新しい統計も構築されます。実際の修正は、インデックスを再構築するのではなく、新鮮な統計である場合があります。UPDATE STATISTICS...WITH FULLSCAN
同じパフォーマンスの問題を解決するための、より安価で、より速く、より邪魔にならない方法かもしれません。
断片化が原因で問題が発生していない場合は、実際の利益を得るために多大な時間と労力を費やしている可能性があります。
次に、2種類の断片化があります。
物理的な断片化。これは、ほとんどの人が断片化について考えるときに考えていることです。ページは順不同であり、再注文する必要があります。インデックスをスキャンする場合、このタイプの断片化が問題になることがあります。一般的に、これが物理読み取りのパフォーマンスに最大の影響を与えることに気づきました。からの結果を表示している場合sys.dm_db_index_physical_stats
、この数値はavg_fragmentation_in_percent
列です。
低密度の断片化。この断片化は、データが部分的にのみ埋められているページによって引き起こされます。データが必要以上のページに分散しているため、データの密度が低くなっています。その結果、データが必要以上に多くのページに分散しているため、データの読み取りにはより多くのIOが必要になります。これは、論理読み取りと物理読み取りの両方に影響を与える可能性があります。からの結果を表示している場合sys.dm_db_index_physical_stats
、この数値はavg_page_space_used_in_percent
列です。この列は、SAMPLED
またはDETAILED
モードを使用している場合にのみ入力されます。
それであなたはそれについて何をしますか:
物理的な断片化:の高い数値を単に追跡してavg_fragmentation_in_percent
いる場合は、時間を無駄にしていないかどうかをよく検討してください。実際のクエリのパフォーマンスが低下していることを確認し、テスト環境を使用して、断片化を解消することで問題が修正されていることを確認します。
を実行すると、物理的な断片化に対処できますALTER INDEX...REORGANIZE
。REORGANIZE
操作はバック物理的な順序にそれらを再編成するときにページ1を動かし、オンラインです。あなたは殺す場合はREORGANIZE
、現在、ロールバックされます移動して1ページのみ-を通じて声明の途中、すでに維持されて実行されたすべての作業を。やってREORGANIZE
非常に断片化された大きなテーブルの上には、より多くの合計トランザクション・ログ・スペースを必要とすることができ、かつ完全復旧モードでトランザクションログのバックアップを大量に生成することがあります。またREORGANIZE
、高度にフラグメント化されたインデックスは、インデックスよりも時間がかかる場合がありますREBUILD
。
多くのREBUILD
場合、aではなく高度にフラグメント化されたインデックスに対してを実行するというアドバイスREORGANIZE
が表示されます。これは、ゼロから再構築する方が効率的だからです。ただし、再編成は「よりオンライン」な操作になる可能性があり、非常に断片化されたインデックスの場合でも好ましい場合があります。
低密度の断片化は、では修正できませんREORGANIZE
。これは、を実行することによってのみ修正できALTER INDEX...REBUILD
ます。でインデックスを作成するとONLINE=ON
、ブロッキングを最小限に抑えることができます。ただし、REBUILD
古いインデックスを新しいインデックスと交換するために、しばらくの間ロックを行う必要があります。非常にビジーなシステムでは、この排他ロックを取得することが問題になることがあります。この問題が発生しているかどうかを確認するには、sp_whoisactiveなどを使用して、再構築中にブロックを調べ、ロックと待機の詳細を確認します。このWAIT_AT_LOW_PRIORITY
オプションの使用は、使用率が低い次の期間があり、アクティビティがそのロックを達成するのに十分低くなったときに、再構築がこのスワップに「潜入」できる場合に役立ちます。長期実行に注意してくださいREBUILD
操作も長時間実行されるオープントランザクションになります。長時間実行されているオープントランザクションには、トランザクションログの使用/再利用に関連した独自の問題が発生する可能性があります。ミラーリングまたは可用性グループを使用している場合は、セカンダリレプリカでのトランザクションログのやり直しに関する考慮事項もあります。
REORGANIZE
リーフページの断片化とのようなコンパクトなスペースを削減しますがREBUILD
、効率は低下します。大きいサイズは断片化によるものですか?曲線因子とは何ですか?