3つの大きなMySQLテーブルがあります。彼らは200万レコードに近づいています。2つのテーブルはInnoDBであり、現在サイズは約500MBです。もう1つのテーブルはMyISAMで、約2.5GBです。
FileMakerからインポートスクリプトを実行して、これらのテーブルのレコードを挿入および更新しますが、最近は非常に遅くなり、1時間あたり数百レコードしか挿入されていません。
挿入と更新をより速く行うためにパフォーマンスを向上させるために何ができますか?
3つの大きなMySQLテーブルがあります。彼らは200万レコードに近づいています。2つのテーブルはInnoDBであり、現在サイズは約500MBです。もう1つのテーブルはMyISAMで、約2.5GBです。
FileMakerからインポートスクリプトを実行して、これらのテーブルのレコードを挿入および更新しますが、最近は非常に遅くなり、1時間あたり数百レコードしか挿入されていません。
挿入と更新をより速く行うためにパフォーマンスを向上させるために何ができますか?
INSERTの場合、テーブルに定義したインデックスと関係がある可能性があります(各INSERTの後に更新する必要があります)。それらについてもっと情報を投稿してもらえますか?そして、テーブルにトリガーが設定されていますか?
UPDATEの場合は別の話ですが、レコードの更新が遅いのではなく、レコードの検索が遅い可能性があります。UPDATEをSELECTに変更して、それでも遅いかどうかを確認してみてください。はいの場合は、インデックスを調査する必要があります。
Innodbテーブルの場合、許容できるリスクであれば、innodb_flush_log_at_trx_commitレベルを変更することを検討します。このブログ投稿の詳細と、Innodbチューニングポインターの詳細。
両方のエンジンの場合、sを一緒にバッチ処理すると、ある程度INSERT
まで速度を上げることができます。ドキュメントを参照してください。
どのバージョンのMySQLを実行していますか?新しいInnoDB「プラグイン」エンジンと複数のプロセッサを搭載したサーバーでの操作の同時実行性により、多くの改善が行われました。
コマンドラインからMySQLで実行すると、クエリが遅くなりますか?
FileMakerのスクリプトステップを使用している場合はExecute SQL
、呼び出しのたびに接続と切断が行われるため、大量のクエリを実行すると大幅な速度低下が発生します。これを回避するために、クライアントにJDBCプラグイン(ここでは自己宣伝の免責事項)に切り替えてもらい、大幅な高速化を実現しました。
遅いの理由は、FileMaker側からであることがわかりました。FileMakerレコードをCSVにエクスポートし、INSERT / UPDATEコマンドを実行すると、非常に高速に実行されました。