テーブルの 1 つでメンテナンス タスクを完了したところ、1 GB のオーバーヘッドが発生しました。
テーブル操作は何時間も実行されるため (レコードの 40% を削除し、4 時間かかりました)、OPTIMIZE テーブル コマンドでデータベースを何時間もロックしたくないので、このオーバーヘッドを処理して最適な方法で削除する方法を探しています。方法。
テーブル自体は 3GB で、204 705 レコードがあります。
テーブルの 1 つでメンテナンス タスクを完了したところ、1 GB のオーバーヘッドが発生しました。
テーブル操作は何時間も実行されるため (レコードの 40% を削除し、4 時間かかりました)、OPTIMIZE テーブル コマンドでデータベースを何時間もロックしたくないので、このオーバーヘッドを処理して最適な方法で削除する方法を探しています。方法。
テーブル自体は 3GB で、204 705 レコードがあります。
テーブルにトリガーがないと仮定すると、オンラインOPTIMIZEを実行する簡単な方法の1つは、pt-online-schema-changeを使用してテーブルを再構築することです。これはMyISAMテーブルであると言ったので、エンジンをMyISAMに設定するだけで、何も変更せずに再構築を実行できます。
pt-online-schema-change --alter "ENGINE=MyISAM" D=your_schema,t=your_table
以下を実行する6分間のプロセスで、この問題を回避できました。
CREATE TABLE table_reduced LIKE table;
ALTER TABLE table_reduced DISABLE KEYS;
insert into table_reduced
SELECT
*
FROM
table;
ALTER TABLE table_reduced ENABLE KEYS;
RENAME TABLE table TO table_old;
RENAME TABLE table_reduced TO table;
DROP TABLE `table_old`;