3

一時テーブルに約 3K 行を挿入するストアド プロシージャがあります。この SP は、Mysql 5.1 (Windows デスクトップ) で 3 秒かかっていましたが、同じ SP は Mysql 5.5 で約 2 分かかりました。

innodb_buffer_pool_sizeなどを変更してinnodbを最適化するなど、多くのことを試しましたが、何も機能せず、stackoverflowで何かを読んで問題を解決しました。

START TRANSACTION; 
CALL sp();
COMMIT;

上記のコードは問題を解決し、実行時間は 3 秒に戻りました。ここで何が起こっているのか正確に教えてください。高速実行のために 5.5 で開始トランザクションを追加する必要があるのはなぜですか? 5.1でこれが必要なかったのはなぜですか

4

3 に答える 3

0

mysql.iniファイルに次の行を追加しました

innodb_flush_log_at_trx_commit=0

問題は解決したようです。手順は現在高速に実行されています。理想的には、innodb_flush_log_at_trx_commitはACID準拠のために1である必要があります。

于 2012-09-15T06:54:04.720 に答える
0

I would guess it's due to autocommit being disabled by running

START TRANSACTION; 

You can verify it by disabling autocommit manually and then run your proc.

SET autocommit=0;
于 2012-09-10T07:55:22.827 に答える
0

行を InnoDB テーブルに挿入すると、MySQL は primary_key を構築し、その行のインデックスを更新します。これは行ごとに行われるため、挿入が大幅に遅くなる可能性があります。それらをトランザクションにまとめると、基本的に、最初にすべての行を挿入し、次にキーとインデックスを一度に再構築するように強制されます。したがって、パフォーマンスが向上します。

于 2013-03-13T02:59:57.787 に答える