2010-12-13 4 views
5

私はMySQLのパフォーマンスブログでthis postを読んでいました。アプリケーションの下InnoDBの最適化 - 「更新を行うときにトランザクションを使用する」 - なぜですか?

チューニングそれは言う:

まず私は現在だけで、複数の挿入や更新がある場所でのトランザクションを使用していますアップデート

を行っているときに、トランザクションを使用していることを確認してください同時。すなわち2つ以上のテーブル。

したがって、すべてUPDATEを変更してトランザクションに変更する必要がありますか?

prepare sql 
bind params 
commit 

と::データベースレベルで何が起こるかという点で

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

それは一方が他方より速くなり、

の違いは何ですか?

答えて

6

デフォルトでは、InnoDBは自動コミットモードで動作します。つまり、すべてのクエリが独自のトランザクションで実行され、すぐにコミットされるということです。 InnoDBでは、ディスク上の2つの場所にデータを書き込むことを意味します(詳細については私に質問しません - 私はMySQL Performance Blogで一度読んだことをメモリから書きます)。

一度に1つの更新/挿入/削除を実行すると、パフォーマンスがあまり向上しません。ただし、複数の更新/挿入/削除を連続して実行すると、トランザクションにバンドルして一度にコミットすることで、ハードディスクの時間を節約できます。

+2

+1。より技術的な分析:ログに書き込むのを遅らせるバッファー(innodb_log_buffer_size)があります。バッファーは常時コミットすれば頻繁にフラッシュされ、パフォーマンスが低下します。バッファも自動的に1秒ごとにフラッシュされます。 –