【问题标题】:MySQL Innodb Deadlock - how to remove old event?MySQL Innodb 死锁 - 如何删除旧事件?
【发布时间】:2014-02-05 09:48:10
【问题描述】:

我的监控工具 Zenoss 正在报告来自 MySQL Innodb 引擎的“最新检测到的死锁”事件。 当我运行“show engine innodb status\G”时,我得到以下有关死锁的信息:

------------------------
LATEST DETECTED DEADLOCK
------------------------
130819 14:01:12
*** (1) TRANSACTION:
TRANSACTION 0 108626388, ACTIVE 0 sec, process no 8726, OS thread id 47220783470912
starting index read
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1216, 2 row lock(s), undo log entries 1
MySQL thread id 4283, query id 21974219 10.92.210.108 ddrsrbe Updating
update ddrsproduction.requests set request_priority_grade_id=3, costs=0, data_version=1, date_completed='2013-08-19 13:59:39', date_end='2013-05-24 23:59:00', date_required_by='2013-08-26 13:57:31', date_start='2013-05-19 00:01:00', date_submitted='2013-08-19 13:57:31', designated_authority_id=84528, is_manual=1, missed_sla_reason=null, missed_sla_reason_ask_user=null, product_id=35, request_cost_status_id=0, request_delivery_method_id=0, request_legislation_id=0, request_method_id=0, request_reason_id=1, request_result_status_id=null, origin_id=0, request_status_id=2, request_type_id=1, result_row_count=2, results_last_downloaded=null, site_processed='KNOW', time_zone=null, urn='LBP/281/35/12 (CONS)', user_id=2357, vf_rep_id=8 where request_id=132536
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:

您可以看到死锁是在去年8月,我无法杀死线程,因为它不再存在:

mysql> kill 4283;
ERROR 1094 (HY000): Unknown thread id: 4283

我对 Zenoss 收到这个事件感到厌烦,并且非常想清除这个警报的 innodb 引擎。 我在谷歌上下搜索了一个答案,并想出了 zilch,nada,什么都没有。 非常感谢任何帮助:-)

【问题讨论】:

  • 你试过kill query 21974219吗?
  • mysql> 杀死查询 21974219;错误 1094 (HY000): 未知线程 id: 21974219 :(
  • 还有另一个ID? 47220783470912
  • 同样的恐怕:mysql> kill query 47220783470912;错误1094(HY000):未知线程ID:47220783470912
  • 如果在锁中运行更新语句会怎样?看看它是否会创建一个新锁,也许你可以杀死那个

标签: mysql innodb deadlock alarm zenoss


【解决方案1】:

很遗憾,无法清除SHOW ENGINE INNODB STATUS 中的LATEST DETECTED DEADLOCK 部分。该查询已被死锁检测器杀死,因此您无能为力KILL。重置该信息的唯一方法是重新启动服务器。

没有正确编写的软件会因为输出中存在某些内容而持续发出警报。

【讨论】:

    【解决方案2】:

    执行SHOW FULL PROCESSLIST 以获取所有连接的列表并终止执行更新的连接,或者如果没有更新显示,则使用 Kill 命令终止所有非活动/睡眠会话。

    【讨论】:

    • 感谢@cedric-simon。结果列表中最顶端的 ID 是用户 system user,其命令为 Connect,时间值为 14690265!状态说等待主发送事件。这正常吗?
    • 看起来像复制状态。你使用复制吗? dev.mysql.com/doc/refman/5.0/en/…
    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2011-07-15
    相关资源
    最近更新 更多