2010-04-27 52 views
2

我有一個在我的服務器上運行的VBulletin 4.x論壇。出於性能原因,根據this instruction,一些論壇表被轉換爲InnoDB。論壇本身並不使用事務(源代碼中沒有START TRANSACTION或BEGIN WORK),InnoDB表僅用於防止表鎖定UPDATE查詢。當然,論壇在自動提交模式下運行。事務級別隔離如何影響MySQL自動提交模式下的性能?

我的理解是否正確,在這種情況下,我可以將默認的服務器事務隔離級別更改爲READ UNCOMMITED並通過這種方式獲得性能提升?

回答

1

TL; DR:如果您的論壇速度較慢,則TRANSACTION ISOLATION LEVEL很可能不是其原因,並將其設置爲其他任何內容,而不是默認值都無法提供幫助。設置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概述文章。

在任何情況下,系統必須能夠ROLLBACK,所以甚至沒有READ UNCOMMITTED的結果正在改變任何需要在寫入時完成的事情。

對於讀取事務,當讀取事務的導致視圖的撤消日誌記錄的鏈較長時,讀取速度較慢,因此READ UNCOMMITTED或READ COMMITTED可能比默認的REPEATABLE READ稍快。但是你必須記住,我們在這裏講的是內存訪問,而磁盤訪問會降低你的速度。

關於AUTOCOMMIT的問題:這將使每個寫入語句與磁盤同步。如果你一直在使用之前MyISAM和那個時候還算不錯,你可能想在你的my.cnf文件配置

[mysqld] 
innodb_flush_log_on_trx_commit = 2 

並重新啓動服務器。

這將使提交從mysqld寫入文件系統緩衝區緩存,但延遲將文件系統緩衝區緩存刷新到磁盤,以便每秒只發生一次。你不會失去有關mysqld崩潰的任何數據,但是你可能會在硬件崩潰時丟失高達1秒的寫入數據。即使在硬件崩潰之後,InnoDB也會自動恢復,即使它不是全ACID,它的行爲仍然比MyISAM更好。如果沒有這個設置,它將比AUTOCOMMIT快得多。

0

。它肯定會帶來一些性能上的提升。但是,如果您正在進行更新,則必須手動執行提交。

我對AutoCommit模式的瞭解是,它會在數據庫操作後自動執行提交,這會導致在每次提交時重建表上的索引,從而降低性能。