1
嘿,我有我試圖上運行的指數,我發現了以下錯誤的InnoDB表:無法使用InnoDB在字段上添加索引?
Deadlock found when trying to get lock; try restarting transaction
的語法是:
ALTER TABLE mytable ADD INDEX (fieldtoindex);
任何想法,爲什麼會拋出死鎖錯誤?謝謝!
嘿,我有我試圖上運行的指數,我發現了以下錯誤的InnoDB表:無法使用InnoDB在字段上添加索引?
Deadlock found when trying to get lock; try restarting transaction
的語法是:
ALTER TABLE mytable ADD INDEX (fieldtoindex);
任何想法,爲什麼會拋出死鎖錯誤?謝謝!
您未提供足夠的信息來回答您的問題。
有了InnoDB,一般情況下,當出現錯誤時,請查看SHOW ENGINE INNODB STATUS的輸出。你想在命令行客戶端運行這個命令,並用\ G(反斜槓大寫字母G)結束該命令以使輸出可讀。
在你的情況,相關信息將在SHOW ENGINE INNODB STATUS輸出,頂部的地方說像
------------------------
LATEST DETECTED DEADLOCK
------------------------
100720 14:27:32
*** (1) TRANSACTION:
TRANSACTION 3 572739397, ACTIVE 2 sec, process no 3057, OS thread id 1362831680 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1216, 3 row lock(s)
MySQL thread id 37496388, query id 1645924019 host 10.147.209.20 db Updating
update t set aid='4921978' where id in (302885,303582,303907,303911)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 36004 page no 147 n bits 216 index `PRIMARY` of table `db`.`t` trx id 3 572739397 lock_mode X locks rec but not gap waiting
Record lock, heap no 43 PHYSICAL RECORD: n_fields 19; compact format; info bits 0
此列出了相關的表和索引的名字,以及語句參與其中。有了這些信息,您的問題就變得可以調試。
另請參閱http://www.mysqlperformanceblog.com/2006/07/17/show-innodb-status-walk-through/瞭解更多信息。
如果發生這種情況的次數更多,請查看http://freshmeat.net/projects/innotop,「D」屏幕(死鎖顯示)。
當您嘗試添加索引時,是否有其他人使用數據庫? – mlschechter 2010-07-20 01:03:38