巨大な本番データベースがあり、そのサイズは約300GBです。削除クエリのパフォーマンスを向上させる方法はありますか?現在、削除速度は1分あたり1〜10kですが、非常に低速です。
1つのステートメントで多数の行を削除しようとしている場合は、ログアクティビティを待機している可能性があります。だからあなたはできる:
TRUNCATE
またはDROP
/CREATE
を使用します。SELECT INTO
を使用して、保持するデータを別のテーブルに入れ、次にTRUNCATE
を移動して、少し後ろ。 (または単に古いテーブルを削除し、新しい名前を変更して、制約/権限を再適用するなど)CHECKPOINT
を実行するだけでログをクリアできますが、ログを元に戻して新しいフルバックアップを取得する必要があります。ログチェーンを再開します。ヒントはいくつかありますが、どのバージョンを使用していますか?エンタープライズ版ですか?とにかく:
詳細を追加してください。大きなデータベースで作業する場合、有効な答えは1つではありません。
あなたはそれらをチャンクごとにチャンクで削除してみてください、おそらくループ内で削除します、それぞれがそれ自身のトランザクションである反復を削除し、そして各ループ反復の終わりにログをクリアします。
また、レコードを削除するためにチャンクの値として使用する番号を見つける必要があります。徹底的なテストが必要ですが、最初にUATでチャンクの値をテストできればより良いでしょう。
続行方法については、 大きな削除操作をチャンクに分割することを参照します
いくつかのポイントを追加しています...
tablock
オプションに移動します。さらにヘルプが必要な場合は、使用しているクエリ、テーブル情報、およびブロック情報を投稿してください。
大きなテーブルに再帰的な外部キーがある場合、削除が遅くなる可能性があります。
その場合は、適切な時間を見つけ、依存サービスを無効にし、再帰的な外部キーを無効にし、大量の削除を実行してから、外部キーを再度復元します。