MySQL:如何查找被事务锁定的行

d9k*_*d9k 5 mysql innodb transactions mariadb database-deadlocks

例子:

START TRANSACTION;
UPDATE books SET printedCount=1000 WHERE id=5;
Run Code Online (Sandbox Code Playgroud)

如何找到表的哪些行books被打开的事务(或这些行的 id、主键)锁定?我想跟踪此信息以防止高负载 Web 应用程序中出现死锁,如果可能受这些查询影响的行已被锁定,则可能会延迟某些更新查询。

Mar*_*lff 11

从 MySQL 8.0.1 开始,这在 Performance_schema 中进行了检测:

SELECT * from performance_schema.data_locks;
Run Code Online (Sandbox Code Playgroud)

请参阅 https://dev.mysql.com/doc/refman/8.0/en/data-locks-table.html


Ric*_*mes 3

SHOW ENGINE INNODB STATUS;

不幸的是,没有办法捕获所有死锁。相反,定期运行该命令以查看是否存在死锁;然后处理这个案例。