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

巨大なテーブルから大量のデータを削除する

    1つのトランザクションで大量のデータを削除しようとするソリューションは、ロールバックセグメントを圧倒し、多くのパフォーマンスの問題を引き起こします。

    役立つツールは、pt-archiver です。 。中程度のサイズの行のバッチに対して、可能な限り効率的に増分操作を実行します。 pt-archiver オプションに応じて、行をコピー、移動、または削除できます。

    ドキュメントには、孤立した行を削除する例が含まれています。これはまさにあなたのシナリオです:

    pt-archiver --source h=host,D=db,t=VALUE --purge \
      --where 'NOT EXISTS(SELECT * FROM `KEY` WHERE key_id=`VALUE`.key_id)' \
      --limit 1000 --commit-each
    

    これを実行すると、データの削除にかなり長い時間がかかりますが、既存のデータベースのサービスを中断することなく、あまり多くのリソースを使用することはありません。私はこれを使用して、何億行もの古いデータを削除することに成功しました。

    pt-archiver MySQL用Perconaツールキット の一部です 、MySQLおよび互換性のあるデータベースでの一般的なタスクを支援する無料の(GPL)スクリプトセット。



    1. 行に「名前」がない場合、MySQL LOAD XML LOCAL INFILEを使用できますか?

    2. MySQLサーバーのInnoDBバッファープールサイズの計算

    3. MySQL:複数のフィールドに対する一意の制約

    4. データベーステーブルのソート順列の使用