sql >> データベース >  >> RDS >> Sqlserver

ログファイルが制御不能になることなく、巨大なテーブルから期限切れのデータを削除するにはどうすればよいですか?

    多数の行を含むテーブルから削除を行い、たとえば 5000 程度のバッチで行を削除する場合に役立つことがわかりました (通常、どの値が最も速く機能するかをテストします。5000 行、場合によっては 10,000 などです)。 .これにより、1 つのステートメントが 4 億レコードをノックアウトするのを長時間待つのではなく、各削除操作を迅速に完了することができます。

    SQL Server 2005 では、次のようなものが動作するはずです (もちろん、最初にテストしてください):

    WHILE EXISTS ( SELECT * FROM giganticTable WHERE exp_date < getDate())
    BEGIN
      DELETE TOP(5000) FROM giganticTable WHERE exp_date < getDate()
    END
    

    バッチで削除するとログファイルのサイズがどうなるかがわかります。それでもログが壊れる場合は、復旧モデルを シンプル 、レコードを削除してから、一括ログに戻しますが、システムが最近のデータの損失を許容できる場合のみです。その手順を試みる前に、間違いなく完全バックアップを作成します。この スレッド また、切り捨てのみを指定してログをバックアップするジョブをセットアップできることを示唆しているため、別のオプションになる可能性があります。テストできるインスタンスがあることを願っていますが、バッチ削除から始めて、それがパフォーマンスとログ ファイルのサイズにどのように影響するかを確認します。



    1. PHPがクラッシュした後にmysqlテーブルがロックされました

    2. 投稿データ変数が多すぎますか?

    3. PHPを使用してMYSQLデータベースにアラビア語を保存できません

    4. 自動車修理店のデータモデル