GreatSQL社区

搜索

[已解决] 请问MySQL8.0中如何将metadata_locks的MDL列表按照时间排序?

606 6 2023-2-24 10:49
本帖最后由 Johopig 于 2023-2-24 11:16 编辑

当前借助`events_statments_current`和`events_statements_history`可以找到指定EVENT_ID的执行起始时间,但是`metadata_locks`中的OWNER_EVENT_ID似乎和前面两个表的EVENT_ID对不上,例如:

`metadata_locks`中的OWNER_EVENT_ID显示为20,并持有了SHARED_READ锁,但是在`events_statements_history`中EVENT_ID为20的语句执行的是SHOW STATUS操作,
EVENT_ID为19才是执行了 SELECT * FROM tbl 操作


不知道有什么其他办法可以将metadata_locks的MDL列表按照时间排序?



全部回复(6)
Johopig 2023-2-24 21:02:05
yejr 2023-2-24 21:59:20
想要按时间排序的出发点是什么,是想要解决什么问题呢
Johopig 2023-2-25 10:46:54
yejr 发表于 2023-2-24 21:59
想要按时间排序的出发点是什么,是想要解决什么问题呢

溯源MDL阻塞的根源SQL,按时间排序之后,第一个pending之后的mdl请求都可以过滤掉,只考虑在pending之前的mdl请求中查找根源的SQL
yejr 2023-2-27 15:39:09
Johopig 发表于 2023-2-25 10:46
溯源MDL阻塞的根源SQL,按时间排序之后,第一个pending之后的mdl请求都可以过滤掉,只考虑在pending之前 ...

想要释放MDL,需要让产生MDL的那个连接/线程做以下任意几个事:
1、提交/结束/回滚事务;
2、断开连接;
之后就可以释放了。
yejr 2023-2-27 15:39:38
Johopig 发表于 2023-2-25 10:46
溯源MDL阻塞的根源SQL,按时间排序之后,第一个pending之后的mdl请求都可以过滤掉,只考虑在pending之前 ...

想要找到所谓的根源SQL,就需要开PFS看历史,或者开general log。
fander 2023-6-16 10:12:23
《MySQL实战》(作者:陈臣)  第363-366页有讲,有具体SQL,购书链接
https://mp.weixin.qq.com/s/I5PdUkfePT8G5QoOVMvykA
Johopig

2

主题

0

博客

11

贡献

新手上路

Rank: 1

积分
18

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-5-21 13:26 , Processed in 0.025469 second(s), 20 queries , Redis On.
快速回复 返回顶部 返回列表