• performance_schema 杂记


    1、参考资料:

    官方文档:https://dev.mysql.com/doc/refman/8.0/en/performance-schema-quick-start.html

    简书:https://www.jianshu.com/p/fb460ffdbce6
    cbnlogs:https://www.cnblogs.com/dinghailong128/p/12821635.html

    2、开启 performance_schema

    修改 my.cnf 配置文件,添加 【performance_schema=on】,重启数据库生效。

    3、performance_schema 库简单认识

    主要包含 7 类表,比较常用的是 wait 、statement 类。

    --语句事件记录表,这些表记录了语句事件信息,当前语句事件表events_statements_current、历史语句事件表events_statements_history和长语句历史事件表events_statements_history_long、以及聚合后的摘要表summary,其中,summary表还可以根据帐号(account),主机(host),程序(program),线程(thread),用户(user)和全局(global)再进行细分)
    show tables like '%statement%';
    
    --等待事件记录表,与语句事件类型的相关记录表类似:
    show tables like '%wait%';
    
    --阶段事件记录表,记录语句执行的阶段事件的表
    show tables like '%stage%';
    
    --事务事件记录表,记录事务相关的事件的表
    show tables like '%transaction%';
    
    --监控文件系统层调用的表
    show tables like '%file%';
    
    --监视内存使用的表
    show tables like '%memory%';
    
    --动态对performance_schema进行配置的配置表
    show tables like '%setup%';
    
    
    每一类又分别有 summary 摘要信息表,分别从 account 、host 、thread 、user 、global 几个维度统计信息。
    

    setup 类经常使用 setup_instruments 、setup_consumers 表。
    虽然 performance_schema 参数打开,但并不是所有事件都会做记录,需要根据需求修改上述两个表 ENABLED 状态,setup_instruments 负责采集哪些事件数据,setup_consumers 负责保存哪些事件数据。

    4、打开所有事件监控

    打开所有事件的采集器配置项开关
    UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES';
    
    打开所有事件的保存表配置开关
    UPDATE setup_consumers SET ENABLED = 'YES'
    

    5、简单使用
    执行一个大SQL,使用 select sys.ps_thread_id(connection_id()); 查看当前会话的thread_id ,我当前 thred_id 是45。

    常用命令:
    select * from events_statements_history_long where thread_id=45
    查看这个会话执行过的SQL,默认最多记录 10000 条。
    timer_start:表示该事件的开始时间
    timer_end:表示该事件的结束时间
    timer_wait:表示该事件总的花费时间

    查询 wait 类事件信息
    select * from events_waits_history_long where thread_id=45

    查看wait 类事件最耗时的10个
    select * from events_waits_summary_global_by_event_name ORDER BY sum_timer_wait DESC LIMIT 10;

    附:网上转载的一些常用SQL

    --1、哪类的SQL执行最多?
    SELECT DIGEST_TEXT,COUNT_STAR,FIRST_SEEN,LAST_SEEN FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
    --2、哪类SQL的平均响应时间最多?
    SELECT DIGEST_TEXT,AVG_TIMER_WAIT FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
    --3、哪类SQL排序记录数最多?
    SELECT DIGEST_TEXT,SUM_SORT_ROWS FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
    --4、哪类SQL扫描记录数最多?
    SELECT DIGEST_TEXT,SUM_ROWS_EXAMINED FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
    --5、哪类SQL使用临时表最多?
    SELECT DIGEST_TEXT,SUM_CREATED_TMP_TABLES,SUM_CREATED_TMP_DISK_TABLES FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
    --6、哪类SQL返回结果集最多?
    SELECT DIGEST_TEXT,SUM_ROWS_SENT FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
    --7、哪个表物理IO最多?
    SELECT file_name,event_name,SUM_NUMBER_OF_BYTES_READ,SUM_NUMBER_OF_BYTES_WRITE FROM file_summary_by_instance ORDER BY SUM_NUMBER_OF_BYTES_READ + SUM_NUMBER_OF_BYTES_WRITE DESC
    --8、哪个表逻辑IO最多?
    SELECT object_name,COUNT_READ,COUNT_WRITE,COUNT_FETCH,SUM_TIMER_WAIT FROM table_io_waits_summary_by_table ORDER BY sum_timer_wait DESC
    --9、哪个索引访问最多?
    SELECT OBJECT_NAME,INDEX_NAME,COUNT_FETCH,COUNT_INSERT,COUNT_UPDATE,COUNT_DELETE FROM table_io_waits_summary_by_index_usage ORDER BY SUM_TIMER_WAIT DESC
    --10、哪个索引从来没有用过?
    SELECT OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME FROM table_io_waits_summary_by_index_usage WHERE INDEX_NAME IS NOT NULL AND COUNT_STAR = 0 AND OBJECT_SCHEMA <> 'mysql' ORDER BY OBJECT_SCHEMA,OBJECT_NAME;
    --11、哪个等待事件消耗时间最多?
    SELECT EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT,AVG_TIMER_WAIT FROM events_waits_summary_global_by_event_name WHERE event_name != 'idle' ORDER BY SUM_TIMER_WAIT DESC
    --12-1、剖析某条SQL的执行情况,包括statement信息,stege信息,wait信息
    SELECT EVENT_ID,sql_text FROM events_statements_history WHERE sql_text LIKE '%count(*)%';
    --12-2、查看每个阶段的时间消耗
    SELECT event_id,EVENT_NAME,SOURCE,TIMER_END - TIMER_START FROM events_stages_history_long WHERE NESTING_EVENT_ID = 1553;
    --12-3、查看每个阶段的锁等待情况
    SELECT event_id,event_name,source,timer_wait,object_name,index_name,operation,nesting_event_id FROM events_waits_history_longWHERE nesting_event_id = 1553;
    
  • 相关阅读:
    2016-02-24 工作日记
    金字塔培训
    你找到自己的路了么?
    你是个成熟的职场人么?
    码农十年总结
    码农十年连载六
    码农十年连载五
    码农十年连载四
    码农十年连载三
    码农十年连载二
  • 原文地址:https://www.cnblogs.com/nanxiang/p/16446576.html
Copyright © 2020-2023  润新知