performance_schema 是 MySQL 数据库中的一个内置的系统数据库,最早从MySQL5.5版本产生,这个数据库主要用于收集和存储与数据库性能相关的统计信息和指标。
使用它可以帮助运维人员对数据库性能监控、调优和故障排查提供依据。
收集的事件数据存储在performanceschema数据库的表中,支持select进行查询。
show tables like '%wait%';
查询数据表如下:
events_waits_current
events_waits_history
events_waits_history_long
events_waits_summary_by_account_by_event_name
events_waits_summary_by_host_by_event_name
events_waits_summary_by_instance
events_waits_summary_by_thread_by_event_name
events_waits_summary_by_user_by_event_name
events_waits_summary_global_by_event_name
table_io_waits_summary_by_index_usage
table_io_waits_summary_by_table
table_lock_waits_summary_by_table
默认等待事件的功能是未启用状态,大家可以按照下面的方法启动。
首先确保 MySQL 实例已启用 Performance Schema。在 MySQL 配置文件(如 my.cnf 或 my.ini)中,确保以下行未被注释(如果被注释,请取消注释并重启 MySQL)
performance_schema=ON
首先开启events_waits_current启用状态
#先开启events_waits_current的状态
SELECT * from setup_consumers where name = 'events_waits_current';
UPDATE performance_schema.setup_consumers SET enabled = 'YES' WHERE name = 'events_waits_current';
--查看等待事件的启用状态
SELECT * from setup_consumers where name = 'events_waits_history';
说明:其他等待事件的数据表开启方式类似。
注意事项:开启这个功能主要是为了测试使用,启用 Performance Schema 会增加系统的性能开销。因此,建议仅在需要进行性能分析和瓶颈排查时启用它。在完成性能分析后,可以考虑禁用 Performance Schema 以减少性能开销。
events_waits_current表主当前正在等待的事件数量。这些事件可能是等待锁、等待 I/O 操作完成或等待其他资源。
查询示例
select * from events_waits_current;
输出
THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME INDEX_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID NESTING_EVENT_TYPE OPERATION NUMBER_OF_BYTES FLAGS
27 159 159 idle 1530341778300000 1530346529100000 4750800000 0 idle
字段说明
events_waits_history表包含每个线程最近的N个等待事件。 数据库服务启动时,N的值会自动调整。 也可以在服务启动之前调整系统参数performance_schema_events_waits_history_size的值。 等待事件需要执行结束时才被添加到events_waits_history表中(未结束时保存在events_waits_current表)。当添加新事件到events_waits_history表时,如果该表已满(默认每个线程为10条记录),则会自动丢弃每个线程较旧的事件记录。
开启events_waits_history的状态
-- 然后开启events_waits_history的状态
SELECT * from setup_consumers where name = 'events_waits_history';
UPDATE performance_schema.setup_consumers SET enabled = 'YES' WHERE name = 'events_waits_history';
-- 重新查看等待事件的启用状态
SELECT * from setup_consumers where name = 'events_waits_history';
查询示例
SELECT * from events_waits_history ;
输出
THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME INDEX_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID NESTING_EVENT_TYPE OPERATION NUMBER_OF_BYTES FLAGS
27 179 179 idle 1592433140500000 1592433743900000 603400000 0 idle
27 181 181 idle 1592434364600000 1673137014700000 80702650100000 0 idle
27 183 183 idle 1673137201900000 1673137331200000 129300000 0 idle
字段:参考events_waits_current
events_waits_history_long表包含所有线程中全局已结束的最新等待事件(默认所有线程的总记录数为10000)。等待事件在结束之前不会添加到表中。当表已满时,添加新行时,最旧的行将被丢弃,无论哪个行生成了哪一个线程。
开启events_waits_history_long 状态
UPDATE performance_schema.setup_consumers SET enabled = 'YES' WHERE name = 'events_waits_history_long';
查询示例
select * from events_waits_history_long ;
输出
该表的主要作用是以账户、主机、事件名称为维度的等待事件统计数据。
select * from events_waits_summary_by_account_by_event_name ;
输出
字段说明
该表的主要作用是以主机、事件名称为维度的等待事件统计数据。
select * from events_waits_summary_by_host_by_event_name ;
输出
字段说明
字段说明参考events_waits_summary_by_account_by_event_name表,没有USER字段。
该表的主要作用是以等待事件为维度的等待事件统计数据。
select * from events_waits_summary_by_instance ;
输出
字段说明
该表用于提供按线程和事件名称为维度汇总的等待事件统计信息。
select * from events_waits_summary_by_thread_by_event_name ;
输出
字段说明
该表用于提供按用户和事件名称为维度汇总的等待事件统计信息。
select * from events_waits_summary_by_user_by_event_name ;
输出
字段说明
提供了按事件名称分类的全局等待事件的汇总信息。
select * from events_waits_summary_global_by_event_name ;
输出
字段说明
该表保存了关于每个表和索引的I/O等待事件的统计信息。
select * from table_io_waits_summary_by_index_usage ;
输出
字段说明
该表主要提供了按表分类的I/O等待事件的汇总信息。这个对于查询比较慢表数据表来说还是非常实用的,数据库可以通过这个查询找到瓶颈的数据表。
select * from table_io_waits_summary_by_table ;
输出
字段说明
该表主要提供了按表分类的表锁等待事件的汇总信息。通过该表你可以获取按表分类的表锁等待事件的汇总信息,以了解哪些表在数据库访问中导致了最多的表锁等待。
select * from table_lock_waits_summary_by_table ;
输出
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。