適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
大規模なインデックス操作では、大量のデータが読み込まれるためにトランザクション ログがすぐにいっぱいになることがあります。 インデックス操作をロールバックできるようにするには、インデックス操作が完了するまでトランザクション ログを切り捨てることはできません。ただし、ログはインデックス操作中にバックアップできます。 このため、トランザクション ログには、インデックス操作中のインデックス操作によるトランザクションと同時実行ユーザーによるトランザクションの両方を格納できるだけの十分な空き領域が必要です。
これは、インデックス操作がオフラインでもオンラインでも同じです。 オフライン インデックス操作中に基になるテーブルにアクセスできないため、ユーザー トランザクションが少なく、ログが急速に増加しない可能性があります。 オンライン インデックス操作は同時ユーザー アクティビティを妨げるので、大規模なオンライン インデックス操作と大量の同時ユーザー トランザクションを組み合わせると、ログを切り捨てるオプションなしでトランザクション ログが継続的に増加する可能性があります。
推奨事項
大規模なインデックス操作を実行する場合は、次の推奨事項を考慮してください。
大規模なインデックス操作をオンラインで実行する前に、トランザクション ログがバックアップされ、切り捨てられていることを確認し、ログに予測インデックスとユーザー トランザクションを格納するための十分な領域があることを確認します。
SORT_IN_TEMPDBオプションをインデックス操作のONに設定することを検討してください。 この設定により、インデックス トランザクションが同時実行のユーザー トランザクションから分離されます。 インデックス トランザクションはtempdbトランザクション ログに格納され、同時実行ユーザー トランザクションはユーザー データベースのトランザクション ログに格納されます。 これにより、必要に応じて、インデックス操作中にユーザー データベースのトランザクション ログを切り捨てることができます。 さらに、tempdbログがユーザー データベース ログと同じディスク上にない場合、2 つのログは同じディスク領域と競合しません。Note
tempdbデータベースとトランザクション ログに、インデックス操作を処理するための十分なディスク領域があることを確認します。tempdbトランザクション ログは、インデックス操作が完了するまで切り捨てることはできません。インデックス操作の最小ログ記録を行うことができるデータベース復旧モデルを使用します。 これにより、ログのサイズが小さになり、ログの領域がいっぱいになるのを防ぐことができます。
明示的なトランザクションでオンライン インデックス操作を実行しないでください。 明示的なトランザクションが終了するまで、ログはトランケートされません。