如何显示mysql锁?


44

无论如何,有没有显示在mysql数据库中处于活动状态的所有锁?


1
您可以查询INNODB_LOCK_WAITS和INNODB_LOCKS表。

Answers:


39

有关InnoDB表和警告的信息,请参见Marko的链接。

对于MyISAM,没有一个简单的“这是有问题的查询”解决方案。您应该始终从过程列表开始。但是请确保包含完整关键字,以免打印查询被截断:

SHOW FULL PROCESSLIST;

这将向您显示所有当前进程,它们的SQL查询和状态的列表。现在,通常如果单个查询导致许多其他查询锁定,则应该易于识别。受影响的查询的状态将为,Locked而有问题的查询将自行退出,可能会等待一些密集的工作,例如临时表。

如果不是很明显,那么您将不得不利用SQL演绎的力量来确定哪些令人讨厌的SQL可能是您造成麻烦的原因。


20

如果您使用InnoDB,并且需要检查正在运行的查询,我建议

show engine innodb status;

如Marko的链接所述。这将为您提供锁定查询,它锁定了多少行/表等。在TRANSACTIONS下查看。

使用的问题SHOW PROCESSLIST是,除非其他查询排队,否则您将看不到锁。


20

尝试SHOW OPEN TABLES

show open tables where In_Use > 0 ;

我认为这是立即识别使用中锁的最佳方法,尤其是当您有多个数据库和数百个连接时。
nelaaro

7

使用此命令

SHOW PROCESSLIST

将显示当前正在运行的所有进程,包括已获得表锁定的进程。


7

没有任何答案可以显示当前持有的所有锁。

在终端的mysql中执行此操作。

start transaction;
update someTable set name="foobar" where ID=1234;
-- but no rollback or commit - just let it sit there

显然,上面的事务保持锁定,因为该事务仍处于活动状态。但是现在没有查询在进行,也没有人在任何地方等待锁(至少现在)。

INFORMATION_SCHEMA.INNODB_LOCKS为空,这对于文档来说是有意义的,因为只有一个事务,并且当前没有人等待任何锁。INNODB_LOCKS无论如何也已弃用。

SHOW ENGINE INNODB STATUS没有用:someTable完全没有提及

SHOW FULL PROCESSLIST 为空,因为罪魁祸首目前实际上并未运行查询。

您可以使用INFORMATION_SCHEMA.INNODB_TRXperformance_schema.events_statements_history并且performance_schema.threads提取的查询中所列的任何活动的事务已经在过去执行我其他的答案,但我还没有碰到过任何方式一看就知道someTable是锁定在上面的场景。

到目前为止,其他答案中的建议至少没有帮助。

免责声明:我没有安装innotop,也没有打扰。也许这可以工作。


6

AFAIK MYSQL中仍然没有本机方式,但是我使用innotop。它是免费的,还具有许多其他功能。

另请参阅此链接以获取有关使用innotop工具的更多信息。


4

参考来自这篇文章。

您可以使用以下脚本:

SELECT 
    pl.id
    ,pl.user
    ,pl.state
    ,it.trx_id 
    ,it.trx_mysql_thread_id 
    ,it.trx_query AS query
    ,it.trx_id AS blocking_trx_id
    ,it.trx_mysql_thread_id AS blocking_thread
    ,it.trx_query AS blocking_query
FROM information_schema.processlist AS pl 
INNER JOIN information_schema.innodb_trx AS it
    ON pl.id = it.trx_mysql_thread_id
INNER JOIN information_schema.innodb_lock_waits AS ilw
    ON it.trx_id = ilw.requesting_trx_id 
        AND it.trx_id = ilw.blocking_trx_id
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.