什么条件会触发表级锁

什么条件会触发表级锁

在处理一些 vBulletin 性能问题时,我遇到了这种情况,所有内容都卡在等待表级锁上:

 Id  Command Time State                       Info
 83  Query   47  Writing to net               SELECT /*!40001 SQL_NO_CACHE */ * FROM `post`
 87  Query   117 Waiting for table level lock UPDATE session     SET lastactivity = 1362132185, location = '/for
 89  Query   116 Waiting for table level lock SELECT *    FROM session    WHERE userid = 0     AND host = '178.1
 90  Query   113 Waiting for table level lock SELECT *    FROM session    WHERE userid = 0     AND host = '66.24
 94  Query   108 Waiting for table level lock select userid from session where sessionhash = '2269de072969ab9d42
 96  Query   102 Waiting for table level lock SELECT *    FROM session    WHERE sessionhash = 'b0e3d290e9f609160
129  Query   15  Waiting for table level lock SELECT *    FROM session    WHERE userid = 0     AND host = '65.55
130  Query   14  Waiting for table level lock SELECT *    FROM session    WHERE userid = 0     AND host = '71.19
132  Query   13  Waiting for table level lock SELECT *    FROM session    WHERE userid = 0     AND host = '178.1

通常诊断锁问题的模式是找出哪个查询不是锁定,一般来说,这就是罪魁祸首。但在这种情况下,它正在读取一个不相关的表,并且运行时间最长的查询(这肯定是问题的一部分,因为它是唯一的更新查询)也被锁定了。

所以问题是,在类似这里所见的情况下,您可能期望哪些附加条件能够导致应用表级锁。


附加详细信息
这是关于标准 mysql 安装;不涉及分区或其他恶作剧,
posts类型为 MyISAM,
session类型为 MEMORY,
其他问题(例如查询 83 的明显效率低下或使用 MyISAM 的不明智)很有趣,但不是所问的问题。

查询 87 的全文如下:

Query UPDATE session SET lastactivity = 1362132185, location = '/forums/forumdisplay.php?f=421', inforum = 421, inthread = 0, incalendar = 0, badlocation = 0 WHERE sessionhash = 'e6322935fe2df18106878473f310d91f'

答案1

锁定时 mysqldump 是否正在运行?看起来线程 83 可能当前正在导出,post但可能已调用LOCK TABLESDB 来获取所有表上的一致位置。

相关内容