2

サーバーでVBulletin4.xフォーラムを実行しています。一部のフォーラムテーブルは、この手順に従ってパフォーマンス上の理由からInnoDBに変換されました。フォーラム自体はトランザクションをまったく使用せず(ソースコードにSTARTTRANSACTIONまたはBEGINWORKは使用されません)、InnoDBテーブルは、テーブルがUPDATEクエリでロックされるのを防ぐためだけに使用されます。もちろん、フォーラムは自動コミットモードで機能しています。

この場合、デフォルトのサーバートランザクション分離レベルをREAD UNCOMMITEDに変更して、この方法でパフォーマンスを向上させることができることを正しく理解していますか?

4

2 に答える 2

1

TL; DR:フォーラムが遅い場合、トランザクション分離レベルが原因ではない可能性が高く、デフォルト以外に設定してもほとんど役に立ちません。innodb_flush_log_on_trx_commit = 2に設定すると役立ちますが、クラッシュの耐久性に影響します。

長いバージョン:

http://mysqldump.azundris.com/archives/77-Transactions-An-InnoDB-Tutorial.htmlに記述したトランザクション分離レベルは何ですか。http://mysqldump.azundris.com/categories/32-InnoDBにある3つのInnoDBの概要記事をすべてチェックしてください。

いずれにせよ、システムはロールバックできる必要があるため、READ UNCOMMITTEDでさえ、書き込みで実行する必要のあるものを変更することはありません。

読み取りトランザクションの場合、読み取りトランザクションのビューにつながるUNDOログレコードのチェーンが長いと読み取りが遅くなるため、READUNCOMMITTEDまたはREADCOMMITTEDは、デフォルトのREPEATABLEREADよりもわずかに高速になる場合があります。ただし、ここではメモリアクセスについて説明していること、およびディスクアクセスが速度を低下させることを覚えておく必要があります。

AUTOCOMMITの問題について:これにより、すべての書き込みステートメントがディスクに同期されます。以前にMyISAMを使用したことがあり、それで十分だった場合は、構成することをお勧めします

[mysqld]
innodb_flush_log_on_trx_commit = 2

my.cnfファイルで、サーバーを再起動します。

これにより、コミットはmysqldからファイルシステムバッファキャッシュに書き込まれますが、ファイルシステムバッファキャッシュのディスクへのフラッシュが遅れて、1秒に1回だけ発生するようになります。mysqldのクラッシュでデータが失われることはありませんが、ハードウェアのクラッシュで最大1秒分の書き込みが失われる可能性があります。ただし、InnoDBはハードウェアがクラッシュした後でも自動的に回復し、完全なACIDでなくても、以前のMyISAMよりも動作が良好です。この設定がない場合、AUTOCOMMITよりもはるかに高速になります。

于 2010-07-19T08:55:02.323 に答える
0

はい。確かにパフォーマンスが向上します。ただし、更新を行う場合は、手動でコミットを行う必要があります。

AutoCommitモードについて私が知っていることは、db操作の後に自動的にコミットを実行することです。これにより、コミットごとにテーブルのインデックスが再構築され、パフォーマンスが低下します。

于 2010-04-27T07:23:43.247 に答える