5

PHPUnitを実行して、CIUnit(2つの間のサードパーティインターフェイス)を使用してCodeIgniterアプリケーションをテストしています。多くのテストでは、setUp()に5〜10個のレコードが入力されている空のMySQLデータベースからデータを選択します。WindowsとWebサーバー(Ubuntu 10.04 / Apache 2.2 / MySQL 5.1 / PHP 5.3)では、105のテストが2〜3秒で実行され、メモリ使用量は約30MBです。私のローカル(Ubuntu 12.04 / Apache 2.2 / MySQL 5.5 / PHP 5.3)では、105のテストが同じメモリ使用量で実行されますが、約45秒かかります。

データベースを利用するテストに速度を絞り込みました。テストの実行を15倍遅くしている、欠落している可能性のある構成設定はありますか?そうでない場合は、MySQL、またはおそらくUbuntu(12.10から12.04へのダウングレードをすでに試しています)をダウングレードしてみることをお勧めしますか?

どんな答えでも大歓迎です。

4

2 に答える 2

5

ext4 ファイルシステムでbarriersデフォルトでオンになっているために作成されたパフォーマンス ヒットに遭遇する可能性が最も高いです。ここでそれらの詳細を読んでください:

docs から彼らが行うことは次のとおりです。

barrier=<0|1(*)>
jbd コード。バリア=0 は無効、バリア=1 は有効です。これには、バリアをサポートできる IO スタックも必要です。jbd がバリア書き込みでエラーを受け取ると、警告が表示されて再び無効になります。書き込みバリアは、ジャーナル コミットのディスク上の適切な順序付けを強制し、揮発性ディスク書き込みキャッシュを安全に使用できるようにしますが、パフォーマンスは多少低下します。ディスクがなんらかの方法でバッテリ バックアップされている場合、バリアを無効にすると安全にパフォーマンスが向上する可能性があります。

このように、それらなしでファイルシステムを再マウントすることを試みることができます (mysql データファイルが存在するマウントポイントを使用します)

mount -o remount,nobarrier /

私の環境では、これによりTests: 83, Assertions: 194スイートのランタイムが 48 秒から 6 秒に短縮されます。

于 2013-02-16T22:16:19.263 に答える
1

この提案 [1] に従うことで、PHPUnit テストを大幅に高速化することができました。

InnoDB エンジン (Fedora のデフォルト) を使用している場合は、これを my.cnf データベース構成に入れてみてください。

[mysqld]

...

innodb_flush_log_at_trx_commit=2

...

次に、サーバーを再起動します。

書き込み中に電力が失われた場合など、データベースの信頼性が低下するようです。これは私の開発マシンでは間違いなく受け入れられるトリックでしたが、本番環境ではお勧めしません。信頼性の詳細については、[2] を参照してください。

[1] http://aventinesolutions.nl/mediawiki2/index.php/PHPUnit:_a_Quick_Way_to_Speed_Up_Test_Suites?goback=.gde_1685627_member_107087295

[2] http://dev.mysql.com/doc/refman/4.1/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit

于 2013-03-05T20:29:42.033 に答える