2010-05-26 40 views
0

我已經搜索了很多線程和stackoverflow,但是我找不到任何解決方案。我試圖將記錄插入幾個innodb表中,而不是一個條件匹配導致整個數據庫關閉。我得到這個錯誤「鎖等待超時超標;嘗試重新啓動交易」Innodb鎖定導致整個數據庫關閉

一個問題(#1103248)已在這裏

在InnoDB中,在一個 自增列結果插入回答一個 表鎖。選擇一行FOR UPDATE 會導致行級鎖定。

所有表僅用於插入,它們都不會執行任何更新。我的問題是我如何避免這些鎖?有沒有解決方案?

+0

您能否詳細介紹一下您的交易模式? 例如,您是否有多個事務並行插入到同一個表中? 可能是因爲您可以通過更改隔離級別或串行化訪問數據庫來緩解問題,但如果沒有更多細節,很難知道。 – 2010-05-26 13:00:52

+0

我禁用了事務$ mydb-> query(「SET autocommit = 1」);插入到頁面中時,會發生以下情況: 只有一個插入,發生在頁面加載時 INSERT INTO統計信息(id,sid,stats_time)VALUE($ id,$ sid,NOW()) – Jason 2010-05-26 13:11:06

+0

有很多不同的鎖,單插入,其中大部分(希望)持續很短的時間。另一方面,選擇不(通常)持有任何表或行,這意味着他們不應該阻止它們(但仍然有內部鎖在緩衝池等)。你將需要看到到底發生了什麼。你可以在非生產系統中生產嗎?大概如果你是在「隨機」做事情,那麼它是一個非生產系統呢? – MarkR 2010-05-26 14:31:52

回答

2

這是我找到的解決方案。

  • 我安裝了MySQL 5.1中
  • 我已經把下面的my.cnf中innodb_autoinc_lock_mode變量= 2
  • 重啓MySQL都應該設置!

感謝每一位的幫助。