2011-05-16 43 views
0

目前我們有一個數據庫和一個腳本,它有2個更新和1個選擇,1個插入。在Mysql中持續更新/插入存在性能問題

問題是我們有兩萬人每小時運行一次這個腳本。這導致mysql以100%cpu運行。

對於插入,它是用於日誌記錄的,我們希望將所有數據記錄到我們的mysql中,但是隨着表的增大,應用程序變得越來越慢。 我們在InnoDB上運行,但有人說它應該是MyISAM。我們應該使用什麼?在這個日誌表中,我們有時候會抽出日誌用於統計目的。只有40-> 50次。

我們的解決方案是使用Gearman [http://gearman.org/]延遲插入數據庫。但是更新如何?

我們需要更新2表,1從客戶更新餘額(balance = balance -1),另一個是更新另一個表的計數。

我們應該如何讓這個更快,更高的CPU效率?

謝謝

回答

0

而是作爲表擴展,應用程序變得越來越慢

這通常意味着你在什麼地方丟失的索引。

MyISAM不好:除了不符合ACID標準外,它還會鎖定整個表以執行插入 - 這會導致併發性。

0

仔細閱讀MySQL文檔:

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

特別 「的innodb_flush_log_at_trx_commit」 - http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html

我會遠離的MyISAM遠,因爲它混合SELECT時有併發問題和INSERT語句。如果你可以保持你的插入表足夠小,以留在記憶中,他們會更快。在交易中批量更新也會幫助他們更快地完成工作。建立測試環境並調整您的實際工作很重要。

您可能還想查看分區來旋轉日誌。你會丟棄舊分區,併爲當前數據創建一個新分區。這比刪除舊行快得多。