当前位置: 首页 > 面试题库 >

如何找到哪个事务导致“等待表元数据锁定”状态?

潘兴朝
2023-03-14
问题内容

我试图在表上执行一些DDL,并SHOW PROCESSLIST导致出现“正在等待表元数据锁定”消息。

我如何找出尚未关闭的交易?

我正在使用MySQL v5.5.24。


问题答案:
SHOW ENGINE INNODB STATUS \G

寻找部分-

TRANSACTIONS

我们可以使用 INFORMATION_SCHEMA 表。

有用的查询

要检查所有锁事务正在等待:

USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;

阻止交易的列表:

SELECT * 
FROM INNODB_LOCKS 
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);

要么

SELECT INNODB_LOCKS.* 
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS
  ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);

特定表上的锁列表:

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name;

等待锁的事务列表:

SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';

参考 -
MySQL的故障排除:怎么办时,查询不工作,第6章-第96页。



 类似资料:
  • 本文向大家介绍检查事务列表以等待锁定SAP HANA,包括了检查事务列表以等待锁定SAP HANA的使用技巧和注意事项,需要的朋友参考一下 M_BLOCKED_TRANSACTIONS系统视图用于提供等待锁定的事务列表。 您可以在编辑器中运行以下SQL查询- SAP HANA中M_BLOCKED_TRANSACTIONS系统视图下的详细信息

  • 我遇到了一些使用c#的/关键字进行异步编程的最佳实践(我是c# 5.0的新手)。 给出的建议之一如下: 稳定性:了解您的同步上下文 ...一些同步上下文是不可重入的和单线程的。这意味着在给定时间只能在上下文中执行一个工作单元。这方面的一个例子是Windows UI线程或ASP.NET请求上下文。在这些单线程同步上下文中,很容易死锁。如果您从单线程上下文中生成一个任务,然后在上下文中等待该任务,您的

  • 这是一个提倡的范例,即 wait() 应该在同步块内的 while 循环中调用。 我的问题是,waiting()线程如何获得锁? 考虑线程1首先运行并开始等待条件。它释放锁,线程2获得锁设置条件并通知线程1。现在线程1获得锁,检查条件并开始执行“做某事”。 我的问题是当线程1被通知它从time条件开始执行时,已同步(mon)的代码行永远不会再次执行,那么线程1如何获得锁?将锁还给线程1的内部动态是

  • 问题内容: 最近几天,随机地,我的网站变得非常缓慢。我开始尽力调查。我看到MySQL进程正在使用服务器可用内存的85%-95%(我也应该升级我的内存吗?)。 我检查了我的MySQL进程日志,发现有很多查询,其中包括: 等待表级锁定 但是我还注意到,所有这些带有“表级锁定”的查询都是与表有关的查询。 我还有20个其他表,它们具有不变的查询,但是我在列表中没有看到它们。.所以我猜问题出在users表上

  • 问题内容: 我对事务与锁定表有些困惑,以确保数据库完整性,并确保SELECT和UPDATE保持同步,并且没有其他连接干扰它。我需要: 我需要确保没有其他查询会干扰并执行相同的操作(在该连接完成更新行之前读取“旧值”。 我知道我可以默认为只确保一次只有1个连接正在执行此操作,并在完成后将其解锁,但这似乎有点过头了。将它包装在事务中是否会做同样的事情(确保没有其他连接会尝试同一进程而另一个仍在处理)?

  • 我遇到了一个奇怪的情况。在某些情况下(非活动超时),我必须锁定我的swing窗口(以及任何子窗口),在通过有效凭据再次解锁后,我需要重新解锁它们。 我正在使用glasspane,我的两个功能如下 主锁模块 子锁方法 解锁主方法 [机译]锁定=假;锁最小化=假; 子解锁方法 再说一遍,我的锁定和解锁确实成功了。解锁未成功,因为解锁后,我解锁的窗口上仍有一个忙碌的光标。它就像走了一样。无用的 我从日志