web-dev-qa-db-ja.com

MySQLの挿入/更新が非常に遅い

laravelアプリケーションが必要ですinsert/update毎秒数千レコードのfor loop。私の問題は私のデータベースinsert/updateレートは、1秒あたりの書き込み数100-150です。 RAMの量を増やしましたが、うまくいきませんでした。 enter image description here

mysqlの書き込み速度を毎秒数千レコードに増やす方法はありますか?構成を教えてください。

私のストレージエンジンはInnoDBです

2
Ramin

InnodbストレージはACIDトランザクションに注意を払っており、データ(挿入/更新)がディスクに確実にコミットされるようにします。

  1. 頻繁に変更(挿入/更新)される列を考慮して、その列にインデックスを作成しないでください。
  2. dML操作のビッグデータが常に必要な場合は、auto-commit=0。butサーバーがクラッシュしたり、何かが落ちた場合は、良くありません。
  3. dML操作がサブクエリに基づいている場合は、クエリを変更します。

例:

UPDATE TEST SET NAME='XXXX' WHERE (subquery).
1
BongSey
  • バッチINSERTs-つまり、1つのINSERTを最大100行で実行します。
  • トランザクションにグループ化-BEGIN; do several things; COMMIT;
  • 変化する innodb_flush_log_at_trx_commit=2(速度とセキュリティのトレードオフについては、ドキュメントを参照してください。)

さらにディスカッションが必要な場合は、SHOW CREATE TABLEおよび関連するクエリの一部。

1
Rick James