ダウンタイムなしで数百万の MySQL 行を削除する方法
数百万の重複行を引き起こすバグに直面して、削除を見つけるダウンタイムを最小限に抑える戦略が重要です。
オプションの 1 つは、ループ内で多数の小さな削除クエリを実行することです。ただし、この方法ではデータベースに負荷がかかり、削除プロセスが長くなる可能性があります。
別のオプションとしては、既存のテーブルの名前を変更し、新しい空のテーブルを作成し、名前を変更したテーブルでクリーンアップを実行してから、データをマージして元のテーブルに戻すことです。オリジナルのテーブル。この方法では中断は最小限に抑えられますが、潜在的なデータ損失や細心の注意を払ったデータのマージの必要性など、ロジスティック上の課題が伴います。
より効率的な解決策は、短いスリープ期間で次のクエリをループで実行することです。反復間:
DELETE FROM `table` WHERE (whatever criteria) ORDER BY `id` LIMIT 1000
この手法では、一度に削除を 1000 行に制限し、短いスリープ間隔を追加することで、他のクエリがインターリーブできるようになり、テーブルのロックが防止されます。反復が続くにつれて、影響を受ける行の数はゼロになるまで徐々に減っていきます。
このアプローチは、効率性と最小限のダウンタイムを兼ね備えており、サイトの機能やユーザー エクスペリエンスを中断することなく大量の行を削除する場合に適した選択肢です。
以上がダウンタイムなしで数百万の MySQL 行を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。