• MySQL 性能监控


    MySQL 性能监控

    show profile查询工具

    使用show profile查询剖析工具,可以指定具体的type

    速查表

    关键词说明SQL
    all显示所有性能信息show profile all for query n
    block io显示块io操作的次数show profile block io for query n
    context switches显示上下文切换次数,被动和主动show profile context switches for query n
    cpu显示用户cpu时间、系统cpu时间show profile cpu for query n
    ipc显示发送和接受的消息数量show profile ipc for query n
    Memory内存信息暂未实现
    page faults显示页错误数量show profile page faults for query n
    source显示源码中的函数名称与位置show profile source for query n
    swaps显示swap的次数show profile swaps for query n

    示例

    // 执行sql
    select * from drafts;
    // 查询结果
    259	0.00108325	SHOW STATUS
    260	0.0008205	SHOW STATUS
    261	0.000804	SHOW STATUS
    262	0.000903	SELECT QUERY_ID, SUM(DURATION) AS SUM_DURATION FROM INFORMATION_SCHEMA.PROFILING GROUP BY QUERY_ID
    263	0.00083525	SELECT STATE AS `Status`, ROUND(SUM(DURATION),7) AS `Duration`, CONCAT(ROUND(SUM(DURATION)/0.001828*100,3), '') AS `Percentage` FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=248 GROUP BY SEQ, STATE ORDER BY SEQ
    264	0.00012	SET PROFILING = 1
    265	0.00110675	SHOW STATUS
    266	0.000854	SHOW STATUS
    267	0.00183225	select * from drafts
    268	0.0007695	SHOW STATUS
    269	0.0008965	SELECT QUERY_ID, SUM(DURATION) AS SUM_DURATION FROM INFORMATION_SCHEMA.PROFILING GROUP BY QUERY_ID
    270	0.00086	SELECT STATE AS `Status`, ROUND(SUM(DURATION),7) AS `Duration`, CONCAT(ROUND(SUM(DURATION)/0.000789*100,3), '') AS `Percentage` FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=255 GROUP BY SEQ, STATE ORDER BY SEQ
    271	0.00015925	SET PROFILING = 1
    272	0.00108775	SHOW STATUS
    273	0.00092375	SHOW STATUS
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    // 执行sql
    show profile all for query 267;
    
    // 执行结果
    starting	0.000044	0.000027	0.000015	0	0	0	0	0	0	0	0	0			
    checking permissions	0.000007	0.000006	0.000000	0	0	0	0	0	0	0	0	0	check_access	sql_authorization.cc	809
    Opening tables	0.000014	0.000009	0.000006	0	0	0	0	0	0	0	0	0	open_tables	sql_base.cc	5815
    init	0.000020	0.000010	0.000010	0	0	0	0	0	0	0	0	0	handle_query	sql_select.cc	128
    System lock	0.000007	0.000006	0.000000	0	0	0	0	0	0	0	0	0	mysql_lock_tables	lock.cc	330
    optimizing	0.000004	0.000004	0.000000	0	0	0	0	0	0	0	0	0	optimize	sql_optimizer.cc	158
    statistics	0.000009	0.000004	0.000005	0	0	0	0	0	0	0	0	0	optimize	sql_optimizer.cc	374
    preparing	0.000007	0.000006	0.000000	0	0	0	0	0	0	0	0	0	optimize	sql_optimizer.cc	482
    executing	0.000003	0.000003	0.000000	0	0	0	0	0	0	0	0	0	exec	sql_executor.cc	126
    Sending data	0.001676	0.000243	0.000112	1	0	0	0	0	0	0	0	0	exec	sql_executor.cc	202
    end	0.000010	0.000008	0.000000	0	0	0	0	0	0	0	0	0	handle_query	sql_select.cc	206
    query end	0.000008	0.000002	0.000005	0	0	0	0	0	0	0	0	0	mysql_execute_command	sql_parse.cc	4957
    closing tables	0.000007	0.000007	0.000000	0	0	0	0	0	0	0	0	0	mysql_execute_command	sql_parse.cc	5016
    freeing items	0.000009	0.000004	0.000006	0	0	0	0	0	0	0	0	0	mysql_parse	sql_parse.cc	5635
    cleaning up	0.000009	0.000009	0.000000	0	0	0	0	0	0	0	0	0	dispatch_command	sql_parse.cc	1931
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    performance schema监控MySQL

    MySQL的performance schema 用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况

    入门

    在mysql的5.7版本中,性能模式是默认开启的,如果想要显式的关闭的话需要修改配置文件,不能直接进行修改,会报错Variable ‘performance_schema’ is a read only variable。

    --查看performance_schema的属性
    mysql> SHOW VARIABLES LIKE 'performance_schema';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | performance_schema | ON    |
    +--------------------+-------+
    1 row in set (0.01 sec)
    
    --在配置文件中修改performance_schema的属性值,on表示开启,off表示关闭
    [mysqld]
    performance_schema=ON
    
    --切换数据库
    use performance_schema;
    
    --查看当前数据库下的所有表,会看到有很多表存储着相关的信息
    show tables;
    
    --可以通过show create table tablename来查看创建表的时候的表结构
    mysql> show create table setup_consumers;
    +-----------------+---------------------------------
    | Table           | Create Table                    
    +-----------------+---------------------------------
    | setup_consumers | CREATE TABLE `setup_consumers` (
      `NAME` varchar(64) NOT NULL,                      
      `ENABLED` enum('YES','NO') NOT NULL               
    ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8 |  
    +-----------------+---------------------------------
    1 row in set (0.00 sec)         
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    速查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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    show processlist

    使用show processlist查看连接的线程个数,来观察是否有大量线程处于不正常的状态或者其他不正常的特征

    属性说明

    字段名说明
    idid表示session id
    useruser表示操作的用户
    hosthost表示操作的主机
    dbdb表示操作的数据库
    commondcommand表示当前状态
    infoinfo表示详细的sql语句
    timetime表示相应命令执行时间
    statestate表示命令执行状态

    属性commond状态说明

    状态说明
    sleep线程正在等待客户端发送新的请求
    query线程正在执行查询或正在将结果发送给客户端
    locked在mysql的服务层,该线程正在等待表锁
    analyzing and statistics线程正在收集存储引擎的统计信息,并生成查询的执行计划
    Copying to tmp table线程正在执行查询,并且将其结果集都复制到一个临时表中
    sorting result线程正在对结果集进行排序
    sending data线程可能在多个状态之间传送数据,或者在生成结果集或者向客户端返回数据
  • 相关阅读:
    【SpringBoot】体系描述
    kubernetes CoreDNS全解析
    【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )
    YOLOv9尝鲜测试五分钟极简配置
    QGISC++源码编译
    moviepy 视频剪切,拼接,音频处理
    View绘制流程的源码所得
    身份认证系统迁移至浪潮信息KOS5.8过程记录
    每次遇到sass 总要出问题,yarn不行,用cnpm i 就顺利了
    metrology
  • 原文地址:https://blog.csdn.net/m0_37540696/article/details/127884473