2015-10-15 84 views
0

我得到以下錯誤:鎖等待超時超標在MySQL

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 

我做了

show processlist; 

命令,殺死了所有的流程和良好運行命令

+ - ---- + ------ + ----------- + ------------------- + ------ --- + ------ + ----------- + --------------------------- -------------------------------------------------- ---- + | Id |用戶|主機| db |命令|時間|狀態|信息| + ------ + ------ + ----------- + ------------------- + - ------- ------ + + ----------- + ----------------------- -------------------------------------------------- -------- + | 1749 | cyee | localhost | CY_Test |殺死| 2308 |查詢結束| INSERT INTO CY_Test.patient2010 SELECT * FROM cmsdata-outpatient-2010 .patient | | 1755 | cyee | localhost | cmsdata-inpatient |查詢| 0 | NULL |顯示完整的進程列表| + ------ + ------ + ----------- + ------------------- + - ------- ------ + + ----------- + ----------------------- -------------------------------------------------- -------- +

set innodb_lock_wait_timeout=1000; 

其他網站提示,但我仍然得到相同的錯誤。任何幫助將不勝感激,謝謝!

+1

可能重複的[如何調試鎖定等待超時時間?](http://stackoverflow.com/questions/6000336/how-to-debug-lock-wait-timeout-exceeded) – xathien

+0

感謝您的幫助,但我試過了,出於某種原因我仍然得到相同的錯誤。 – ChrisYee90

+0

將鎖定等待超時設置爲較大值可幫助您調試導致問題的原因,而不是解決實際的鎖定問題。代碼中的某些內容導致了這種情況,並且由於可能發生的種種方式,在不知道代碼在做什麼的情況下,我們無法提供幫助。首先檢查將在類似資源上並行創建鎖的查詢。 – xathien

回答

0

您可以將鎖定時間的變量innodb_lock_wait_timeout = 100設置爲100秒。

mysql> set innodb_lock_wait_timeout=100 

Query OK, 0 rows affected (0.02 sec) 

mysql> show variables like 'innodb_lock_wait_timeout'; 
+--------------------------+-------+ 
| Variable_name   | Value | 
+--------------------------+-------+ 
| innodb_lock_wait_timeout | 100 | 
+--------------------------+-------+ 

超時的事務,試圖鎖定被另一個進程佔用的表。並且您的超時變量設置爲秒數很少。所以它顯示錯誤。 您可以通過命令查看更多狀態。

SHOW ENGINE INNODB STATUS\G 

你可以看到鎖定表的名單逐

show open tables where in_use>0; 

現在看到這是使用此表

show full processlist; 

現在你可以殺死線程的線程或等待它完成。