MySQL は tmp テーブルのクリーニングに時間がかかりすぎる

MySQL は tmp テーブルのクリーニングに時間がかかりすぎる

AWS RDS MySQL インスタンスで Django の移行をいくつか実行しています。私のチームは移行を徹底的にテストしましたが、問題なく実行されました (実稼働データのコピーに対してラップトップで実行した場合でも、30 分もかかりませんでした)。

現在、本番 DB の移行に 2 時間以上かかっています。以下を実行すると、

mysql> SHOW PROCESSLIST;

アクティブなプロセスが表示され、何かが行われているのがわかりますが、非常に遅いです。移行はデータ移行の途中で、SELECT ステートメント (ORM を介して 100 行ずつ取得しています) はそれぞれ最大 32 秒かかります。最後の 30 秒は、「一時テーブルの削除」状態で費やされています。

何が原因か分かりますか?

答え1

ORMを通じて100行ずつ取得しています

データをバッチ処理するための非効率的なクエリ。DBMS は一時テーブルを使用しているため、出力データセットに含まれるデータよりもはるかに多くのデータを調べる必要があり、その大部分は破棄されます。

より具体的なアドバイスを得るには、StackOverflow にアクセスして、データの抽出に使用しているスキーマとクエリを投稿してください。ただし、私の経験では、ORM は原理的に非常に壊れているため、効率的かつ確実に動作するようにするよりも、ファクトリに切り替える方が通常は簡単です。

関連情報