MySQL 8.x ,查询performance_schema.data_locks造成整个实例 hang了?


问题描述

MySQL 8.0.25 在 2023/12/22  10:17:36 左右 出现线程堵塞,正常情况下原本执行很快的sql执行效率陡降(比如:原本执行0.001秒的sql执行7秒仍未结束),导致十几笔交易超时。


问题分析

根据AWR处于非Sleep状态的用户线程,Time由高到低排序,Top1为Command处于Query执行耗时达30秒,是对 performance_schema.data_locks 的查询,该查询需要返回3百多万数据。在查询 performance_schema.data_locks 之后执行的简单DQL&DML都没有按照正常速度完成。

performance_schema.data_locks 在慢日志的记录

1. Time: 2023-12-22T10:17:47.968405+08:00 1. User@Host: xxx[xxx] @ [127.0.0.1] Id: 10181232 1. Query_time: 41.615127 Lock_time: 0.000372 Rows_sent: 7855322 Rows_examined: 7855322 SET timestamp=1703211426; select engine, engine_lock_id, engine_transaction_id, thread_id, event_id, object_schema, object_name, partition_name, subpartition_name, index_name, object_instance_begin, lock_type, lock_mode, lock_status, lock_data from performance_schema.data_locks;