有没有办法在MySQL中检测锁定的表?我指的是由LOCK TABLE table WRITE/READ
命令锁定的表。
(Note对检测GET_LOCK
获取的 named 锁感兴趣的读者应该改为读取Show all current locks from get_lock。)
有没有办法在MySQL中检测锁定的表?我指的是由LOCK TABLE table WRITE/READ
命令锁定的表。
(Note对检测GET_LOCK
获取的 named 锁感兴趣的读者应该改为读取Show all current locks from get_lock。)
8条答案
按热度按时间txu3uszq1#
使用
SHOW OPEN TABLES
:http://dev.mysql.com/doc/refman/5.1/en/show-open-tables.html你可以做这样的事
检查数据库中任何锁定的表。
mfuanj7w2#
您可以使用
SHOW OPEN TABLES
来显示每个表的锁状态。有关该命令文档页面的更多详细信息,请参见here。q3qa4bjr3#
SHOW OPEN TABLES
显示每个表的状态及其锁。有关命名锁,请参见Show all current locks from get_lock
ao218c7q4#
最简单的方法是:
您只获取当前数据库的锁定表。
xe55xuns5#
您可以使用GET_LOCK(lockName,timeOut)创建自己的锁
如果在锁定表之前执行
GET_LOCK(lockName, 0)
,超时时间为0,然后执行RELEASE_LOCK(lockName)
,那么执行GET_LOCK()
的所有其他线程将获得值0,这将告诉它们锁被另一个线程持有。但是,如果没有让所有线程在锁定表之前调用
GET_LOCK()
,这将不起作用。锁定表的文档是here希望有帮助!
qzlgjiam6#
您还可以从performance_schema中获取所有相关细节:
其工作原理类似于
9rnv2umw7#
这个article描述了如何获取有关锁定的MySQL资源的信息。
mysqladmin debug
也可能有一些用处。i34xakig8#
以下答案是由Eric Leschinki在2014/15在https://stackoverflow.com/a/26743484/1709587(现已删除)写的:
关于如何检测锁定表的小演练:
这可能会阻止数据库在受影响的表和行中实施原子性。锁的设计是为了确保事情保持一致,这个过程将阻止这个过程按照设计发生。
创建表,插入一些行
显示打开的表:
打印:
Penguins未锁定,让我们锁定它:
检查是否锁定:
图纸:
啊哈!它被锁上了!让我们解锁它:**
现已解锁:
图纸:
显示当前所有锁
如果MySQL开发人员将这些信息放在一个常规的表中(这样我就可以做一个
select my_items from my_table where my_clauses
),而不是从系统变量中剥离的“show table”语法,那会更有帮助。