2010-05-28 36 views
2

我試圖使用生成的評價地方臺在收到評級的地方

Assign places in the rating (MySQL, PHP)

,但我的數據庫是高負載。

我試着不創建表,而是使用內存中的表,並用它下面的SQL查詢

插入到頂部由EXP遞減順序的用戶(UID)選擇UID更新;

,但得到了下面的MySQL錯誤試圖獲取鎖時

死鎖發現;請嘗試重新啓動交易

,因爲有太多的疑問,直到SQL選擇正在執行。

如何解決這個問題?

P.S. CREATE TABLE頂部選擇工作幾乎很好,除非高服務器負載...達到平均負載:如果上裝是非內存表,則爲50。

我的表的用戶有近4.5百萬行。

感謝您的任何建議。

回答

0
  1. 要注意的是,MEMORY表處理像MYISAM這樣的表鎖(它們都執行全表鎖)。

450萬行是大量插入做掀起了選擇的。我認爲一個好的方法是編寫一個腳本,以塊的形式下拉用戶表數據並進行批量插入。

0

,如果你需要高併發,您可以使用InnoDB而不是內存表。

InnoDB支持行級鎖定MVCC(多版本併發控制),我認爲這是你所需要的。 MemoryMyISAM會更快(插入/更新時),但如果你經常遇到死鎖然後InnoDB將要走的路。

如果InnoDB的是給你高負荷的最有可能是由於索引碎片和過多的頁拆分過程中的性能問題。您可以通過定期執行ALTER TABLE innodb_tbl_name ENGINE=InnoDB來解決此問題,這將重建表並因此優化性能的索引。