例子:
START TRANSACTION;
UPDATE books SET printedCount=1000 WHERE id=5;
我该如何查找被打开事务锁定的表books
的行(或这些行的ID、主键)?我想跟踪这些信息以防止我的高负载Web应用程序出现死锁,也许可以延迟一些更新查询,如果可以受到这些查询影响的行已经被锁定。
例子:
START TRANSACTION;
UPDATE books SET printedCount=1000 WHERE id=5;
我该如何查找被打开事务锁定的表books
的行(或这些行的ID、主键)?我想跟踪这些信息以防止我的高负载Web应用程序出现死锁,也许可以延迟一些更新查询,如果可以受到这些查询影响的行已经被锁定。
从MySQL 8.0.1开始,这已经被纳入了performance_schema的监控范围:
SELECT * from performance_schema.data_locks;
See https://dev.mysql.com/doc/refman/8.0/en/data-locks-table.html
SHOW ENGINE INNODB STATUS;
很遗憾,没有办法捕获所有死锁。相反,定期运行该命令以查看是否存在死锁;然后处理该情况。