performance_schema 是 MySQL 数据库中的一个内置的系统数据库,最早从MySQL5.5版本产生,这个数据库主要用于收集和存储与数据库性能相关的统计信息和指标。
使用它可以帮助运维人员对数据库性能监控、调优和故障排查提供依据。
收集的事件数据存储在performanceschema数据库的表中,支持select进行查询。
阶段事件记录表,记录语句执行的阶段事件的表 show tables like '%stage%';
events_stages_current
events_stages_history
events_stages_history_long
events_stages_summary_by_account_by_event_name
events_stages_summary_by_host_by_event_name
events_stages_summary_by_thread_by_event_name
events_stages_summary_by_user_by_event_name
events_stages_summary_global_by_event_name
首先确保 MySQL 实例已启用 Performance Schema。在 MySQL 配置文件(如 my.cnf 或 my.ini)中,增加如下行:
performance-schema-instrument='stage/%=ON'
performance-schema-consumer-events-stages-current=ON
performance-schema-consumer-events-stages-history=ON
performance-schema-consumer-events-stages-history-long=ON
如果需要禁用的话把ON 修改为 OFF,或者直接注释掉,具体如下:
performance-schema-instrument='stage/%=OFF'
performance-schema-consumer-events-stages-current=OFF
performance-schema-consumer-events-stages-history=OFF
performance-schema-consumer-events-stages-history-long=OFF
注意:如果通过配置文件修改的话,当MySQL服务正常启动后,默认就是开启状态,大家可以可以通过修改配置表手动去关闭。
更新setup_instruments和setup_consumers表 ,启用日志,就会实时生效。
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME like 'stage/%';
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME LIKE 'events_stages%';
禁用的话把YES修改为NO,具体如下:
UPDATE performance_schema.setup_instruments
SET ENABLED = 'NO', TIMED = 'NO'
WHERE NAME like 'stage/%';
UPDATE performance_schema.setup_consumers
SET ENABLED = 'NO'
WHERE NAME LIKE 'events_stages%';
注意:开启这个功能主要是为了测试使用,启用后会影响数据库的性能,建议生产环境不要开启,如果是排查问题的话,开启后,请及时关闭。
events_stages_current主要记录当前正在执行的语句的执行过程中所经过的各个阶段的统计信息。
查询示例
SELECT * from events_stages_current ;
输出结果
-- 输出结果
THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT WORK_COMPLETED WORK_ESTIMATED NESTING_EVENT_ID NESTING_EVENT_TYPE
29 465 stage/sql/Sending data 882707998400000 882708021000000 22600000 455 STATEMENT
字段介绍
events_stages_history主要记录每个线程已结束的最新阶段事件个数默认为10,个数可自定义。
查询示例
SELECT * from events_stages_history ;
输出结果
THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT WORK_COMPLETED WORK_ESTIMATED NESTING_EVENT_ID NESTING_EVENT_TYPE
28 76 76 stage/sql/checking permissions 876268077700000 876268084900000 7200000 39 STATEMENT
28 77 77 stage/sql/Sending data 876268084900000 876268139300000 54400000 39 STATEMENT
28 78 78 stage/sql/end 876268139300000 876268139900000 600000 39 STATEMENT
29 595 595 stage/sql/executing 1113927994300000 1113927996400000 2100000 586 STATEMENT
字段介绍
字段参考events_stages_current介绍。
events_stages_history_long表主要记录所有线程中全局已结束的最新阶段事件N条记录(可自定义)。阶段事件在结束之前不会添加到表中。当表已满时,添加新行时,最旧的行将被丢弃,无论哪个行生成了哪一个线程。
查询示例
SELECT * from events_stages_history_long ;
输出结果
THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT WORK_COMPLETED WORK_ESTIMATED NESTING_EVENT_ID NESTING_EVENT_TYPE
0 0 34 stage/sql/updating 191081264800000 191081284400000 19600000 34 STATEMENT
27 35 35 stage/sql/end 191081284400000 191081287600000 3200000 34 STATEMENT
27 36 36 stage/sql/query end 191081287600000 191081289800000 2200000 34 STATEMENT
字段介绍
用于记录每个用户和事件类型的事件计数和计时信息
查询示例
SELECT * from events_stages_summary_by_account_by_event_name ;
输出结果
字段介绍
events_stages_summary_by_host_by_event_name用于记录每个主机和事件类型的事件计数和计时信息
查询示例
SELECT * from events_stages_summary_by_host_by_event_name ;
输出结果
字段介绍
用于记录每个线程 ID 和事件类型的事件计数和计时信息.
查询示例
SELECT * from events_stages_summary_by_thread_by_event_name ;
输出结果
字段介绍
用于记录每个用户和事件类型的事件计数和计时信息
SELECT * from events_stages_summary_by_user_by_event_name ;
输出结果
字段介绍
用于记录每个事件类型的全局事件计数和计时信息
查询示例
SELECT * from events_stages_summary_global_by_event_name ;
输出结果
字段介绍
'
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。