AWS RDS MySQL インスタンスで Django の移行をいくつか実行しています。私のチームは移行を徹底的にテストしましたが、問題なく実行されました (実稼働データのコピーに対してラップトップで実行した場合でも、30 分もかかりませんでした)。
現在、本番 DB の移行に 2 時間以上かかっています。以下を実行すると、
mysql> SHOW PROCESSLIST;
アクティブなプロセスが表示され、何かが行われているのがわかりますが、非常に遅いです。移行はデータ移行の途中で、SELECT ステートメント (ORM を介して 100 行ずつ取得しています) はそれぞれ最大 32 秒かかります。最後の 30 秒は、「一時テーブルの削除」状態で費やされています。
何が原因か分かりますか?
答え1
ORMを通じて100行ずつ取得しています
データをバッチ処理するための非効率的なクエリ。DBMS は一時テーブルを使用しているため、出力データセットに含まれるデータよりもはるかに多くのデータを調べる必要があり、その大部分は破棄されます。
より具体的なアドバイスを得るには、StackOverflow にアクセスして、データの抽出に使用しているスキーマとクエリを投稿してください。ただし、私の経験では、ORM は原理的に非常に壊れているため、効率的かつ確実に動作するようにするよりも、ファクトリに切り替える方が通常は簡単です。