Johopig 发表于 2023-2-24 10:49:53

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

本帖最后由 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列表按照时间排序?



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
页: [1]
查看完整版本: 请问MySQL8.0中如何将metadata_locks的MDL列表按照时间排序?