【问题标题】:Aplication Deadlocks (ERROR 1213 (40001)) when running an alter table command运行 alter table 命令时出现应用程序死锁 (ERROR 1213 (40001))
【发布时间】:2016-01-15 22:31:24
【问题描述】:

当我按照 alter table 运行时,仍处于活动状态的应用程序遇到死锁:第 2 行的错误 1213 (40001):尝试获取锁时发现死锁;尝试重启事务

查询:

ALTER TABLE `comm`
ADD COLUMN `thumb_url` varchar(256) NULL DEFAULT NULL COMMENT '' AFTER `search_index_version`,
ADD COLUMN `thumb_src_url` varchar(256) NULL DEFAULT NULL COMMENT '',
LOCK = NONE;

当我阅读 mysql 5.6 文档时,它不应该锁定,还是我错了?

版本:服务器版本:5.6.27-76.0-56-log Percona XtraDB Cluster (GPL),版本 rel76.0,修订版 2a6d4e5,WSREP 版本 25.13,wsrep_25.13 这里有什么指点吗?

提前感谢您的帮助!

【问题讨论】:

  • 可能有其他东西正在访问该表?
  • 当然,该应用程序仍在运行并正在向表中插入数据,但它应该是在线 DDL 并且不应该锁定。

标签: sql deadlock percona mysql-5.6


【解决方案1】:

如果您尝试将列添加到应用程序持续使用的表中,那么您可能会遇到死锁 - 这意味着您的进程正在等待另一个进程完成,而另一个进程正在等待您的进程完成。通常每次选择/插入/更新都会对表进行某种锁定。

您可以尝试关闭应用程序,更改数据库,然后重新打开。

您也可以尝试暂时只为您锁定桌子。我猜语法会是这样的:

LOCK TABLE comm WRITE, comm READ;
ALTER TABLE `comm`
ADD COLUMN `thumb_url` varchar(256) NULL DEFAULT NULL COMMENT '' AFTER `search_index_version`,
ADD COLUMN `thumb_src_url` varchar(256) NULL DEFAULT NULL COMMENT '';
UNLOCK TABLES;

【讨论】:

  • Martinus,我明白了,但根据:dev.mysql.com/doc/refman/5.6/en/… Add a column In-Place?是* 复制表格?是* 允许并发 DML? Yes* 允许并发查询?Yes
  • 也许这会有所帮助?要就地使用算法,您可能需要将 algorithm=INPLACE 添加到您的查询中。 dba.stackexchange.com/questions/72049/…ALTER TABLE comm` 添加列 thumb_url varchar(256) NULL DEFAULT NULL COMMENT '' AFTER search_index_version, 添加列 thumb_src_url varchar(256) NULL DEFAULT NULL COMMENT '', algorithm=INPLACE, LOCK =无;`
  • 相同结果:第 2 行出现错误 1213 (40001):尝试获取锁时发现死锁;尝试重启事务
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 2017-01-25
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 2013-07-08
相关资源
最近更新 更多