我似乎无法从mysql中提取任何有用的信息来帮助调试此错误: ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
. 你能帮我找一些吗?
繁殖:
一个过程是这样的:
start transaction;
update cfgNodes set name="foobar" where ID=29;
只是坐在那里(不承诺,不退缩)。很明显,这就是罪魁祸首——由于长时间运行的事务而占用锁的进程——我正试图找到的罪犯。
另一个进程尝试:
-- The next line just prevents you from having to wait 50 seconds
set innodb_lock_wait_timeout=1;
update cfgNodes set name="foobar" where ID=29;
第二个过程 ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
(之后) innodb_lock_wait_timeout
,默认为50秒)
我怎么找到罪犯的信息?
1条答案
按热度按时间hgb9j2n61#
标准的推荐来源没有什么帮助:
INFORMATION_SCHEMA.INNODB_TRX
显示交易,但没有太多关于它可以帮助我找到它。只有1个表被锁定(在这个伪小示例中),并且trx_mysql_thread_id
是4093。mysql> SELECT SQL_TEXT
-> FROM performance_schema.events_statements_history ESH,
-> performance_schema.threads T
-> WHERE ESH.THREAD_ID = T.THREAD_ID
-> AND ESH.SQL_TEXT IS NOT NULL
-> AND T.PROCESSLIST_ID = 4093
-> ORDER BY ESH.EVENT_ID LIMIT 10;
+-----------------------------------------------+
| SQL_TEXT |
+-----------------------------------------------+
| select @@version_comment limit 1 |
| start transaction |
| update cfgNodes set name="foobar" where ID=29 |
+-----------------------------------------------+
3 rows in set (0.00 sec)