MySQL使用profile分析语句性能消耗

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL使用profile分析语句性能消耗 --查看profile是否开启mysql> show variables like '%profil%';+------------------------+-...

MySQL使用profile分析语句性能消耗





--查看profile是否开启
mysql> show variables like '%profil%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| profiling              | OFF   |         --开启SQL语句剖析功能                                                  
| profiling_history_size | 15    |         --设置保留profiling的数目,缺省为15,范围为0至100,为0时将禁用profiling
+------------------------+-------+
2 rows in set (0.00 sec)

--基于会话级别开启
mysql> set profiling = 1;          --关闭则用set profiling = off
Query OK, 0 rows affected (0.00 sec)
 
mysql> show variables like '%profil%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| profiling              | ON    |
| profiling_history_size | 15    |
+------------------------+-------+
2 rows in set (0.00 sec)

mysql>  select distinct d.account,a.server_id from tab_appserver_user a
    -> inner join tab_department_parent b on a.key_id = b.parent_id
    -> inner join tab_department_member c on b.department_id = c.department_id and c.state=1
    -> and c.isdefault=1  inner join tab_user_info d on c.user_id = d.user_id and d.state=1
    -> where a.type=1  
    -> union                   
    -> select distinct b.account,a.server_id from tab_appserver_user a
    -> inner join tab_user_info b on a.key_id = b.user_id and b.state=1
    -> where a.type=0;

--显示缓存的profile    
mysql> show profiles;
+----------+------------+-------------------------------------------------------+
| Query_ID | Duration   | Query
         1 | 0.86754250 | select distinct d.account,a.server_id from tab_appserver_user a
+----------+------------+-------------------------------------------------------+
4 rows in set (0.00 sec)
从上面可以看到时间的消耗为0.8秒

以下是具体的消耗,进行详细的列出
mysql> show profile for query 1;       --1是query_id
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000018 |
| checking query cache for query | 0.000099 |
| Opening tables                 | 0.000963 |
| System lock                    | 0.000015 |
| Table lock                     | 0.000169 |
| optimizing                     | 0.000020 |
| statistics                     | 0.000027 |
| preparing                      | 0.000018 |
| Creating tmp table             | 0.000055 |
| executing                      | 0.000003 |
| Copying to tmp table           | 0.704845 |       --最主要的消耗点
| Sending data                   | 0.130039 |
| optimizing                     | 0.000029 |
| statistics                     | 0.000029 |
| preparing                      | 0.000020 |
| Creating tmp table             | 0.000142 |
| executing                      | 0.000003 |
| Copying to tmp table           | 0.000086 |
| Sending data                   | 0.000067 |
| optimizing                     | 0.000004 |
| statistics                     | 0.000005 |
| preparing                      | 0.000005 |
| executing                      | 0.000002 |
| Sending data                   | 0.023963 |
| removing tmp table             | 0.003420 |
| Sending data                   | 0.000005 |
| removing tmp table             | 0.003308 |
| Sending data                   | 0.000006 |
| removing tmp table             | 0.000007 |
| Sending data                   | 0.000009 |
| query end                      | 0.000003 |
| freeing items                  | 0.000144 |
| storing result in query cache  | 0.000011 |
| logging slow query             | 0.000003 |
| cleaning up                    | 0.000006 |
+--------------------------------+----------+
35 rows in set (0.00 sec)

--查看cpu的消耗情况    
mysql> show profile cpu for query 1;
+--------------------------------+----------+----------+------------+
| Status                         | Duration | CPU_user | CPU_system |
+--------------------------------+----------+----------+------------+
| starting                       | 0.000018 |     NULL |       NULL |
| checking query cache for query | 0.000099 |     NULL |       NULL |
| Opening tables                 | 0.000963 |     NULL |       NULL |
| System lock                    | 0.000015 |     NULL |       NULL |
| Table lock                     | 0.000169 |     NULL |       NULL |
| optimizing                     | 0.000020 |     NULL |       NULL |
| statistics                     | 0.000027 |     NULL |       NULL |
| preparing                      | 0.000018 |     NULL |       NULL |
| Creating tmp table             | 0.000055 |     NULL |       NULL |
| executing                      | 0.000003 |     NULL |       NULL |
| Copying to tmp table           | 0.704845 |     NULL |       NULL |  --此项消耗cpu最多
| Sending data                   | 0.130039 |     NULL |       NULL |
| optimizing                     | 0.000029 |     NULL |       NULL |
| statistics                     | 0.000029 |     NULL |       NULL |
| preparing                      | 0.000020 |     NULL |       NULL |
| Creating tmp table             | 0.000142 |     NULL |       NULL |
| executing                      | 0.000003 |     NULL |       NULL |
| Copying to tmp table           | 0.000086 |     NULL |       NULL |
| Sending data                   | 0.000067 |     NULL |       NULL |
| optimizing                     | 0.000004 |     NULL |       NULL |
| statistics                     | 0.000005 |     NULL |       NULL |
| preparing                      | 0.000005 |     NULL |       NULL |
| executing                      | 0.000002 |     NULL |       NULL |
| Sending data                   | 0.023963 |     NULL |       NULL |
| removing tmp table             | 0.003420 |     NULL |       NULL |
| Sending data                   | 0.000005 |     NULL |       NULL |
| removing tmp table             | 0.003308 |     NULL |       NULL |
| Sending data                   | 0.000006 |     NULL |       NULL |
| removing tmp table             | 0.000007 |     NULL |       NULL |
| Sending data                   | 0.000009 |     NULL |       NULL |
| query end                      | 0.000003 |     NULL |       NULL |
| freeing items                  | 0.000144 |     NULL |       NULL |
| storing result in query cache  | 0.000011 |     NULL |       NULL |
| logging slow query             | 0.000003 |     NULL |       NULL |
| cleaning up                    | 0.000006 |     NULL |       NULL |
+--------------------------------+----------+----------+------------+
35 rows in set (0.00 sec)

--查看内存消耗
mysql> show profile memory for query 1;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000018 |
| checking query cache for query | 0.000099 |
| Opening tables                 | 0.000963 |
| System lock                    | 0.000015 |
| Table lock                     | 0.000169 |
| optimizing                     | 0.000020 |
| statistics                     | 0.000027 |
| preparing                      | 0.000018 |
| Creating tmp table             | 0.000055 |
| executing                      | 0.000003 |
| Copying to tmp table           | 0.704845 |
| Sending data                   | 0.130039 |
| optimizing                     | 0.000029 |
| statistics                     | 0.000029 |
| preparing                      | 0.000020 |
| Creating tmp table             | 0.000142 |
| executing                      | 0.000003 |
| Copying to tmp table           | 0.000086 |
| Sending data                   | 0.000067 |
| optimizing                     | 0.000004 |
| statistics                     | 0.000005 |
| preparing                      | 0.000005 |
| executing                      | 0.000002 |
| Sending data                   | 0.023963 |
| removing tmp table             | 0.003420 |
| Sending data                   | 0.000005 |
| removing tmp table             | 0.003308 |
| Sending data                   | 0.000006 |
| removing tmp table             | 0.000007 |
| Sending data                   | 0.000009 |
| query end                      | 0.000003 |
| freeing items                  | 0.000144 |
| storing result in query cache  | 0.000011 |
| logging slow query             | 0.000003 |
| cleaning up                    | 0.000006 |
+--------------------------------+----------+

--查看io及cpu的消耗
mysql> show profile block io,cpu for query 1;
+--------------------------------+----------+----------+------------+--------------+---------------+
| Status                         | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+--------------------------------+----------+----------+------------+--------------+---------------+
| starting                       | 0.000018 |     NULL |       NULL |         NULL |          NULL |
| checking query cache for query | 0.000099 |     NULL |       NULL |         NULL |          NULL |
| Opening tables                 | 0.000963 |     NULL |       NULL |         NULL |          NULL |
| System lock                    | 0.000015 |     NULL |       NULL |         NULL |          NULL |
| Table lock                     | 0.000169 |     NULL |       NULL |         NULL |          NULL |
| optimizing                     | 0.000020 |     NULL |       NULL |         NULL |          NULL |
| statistics                     | 0.000027 |     NULL |       NULL |         NULL |          NULL |
| preparing                      | 0.000018 |     NULL |       NULL |         NULL |          NULL |
| Creating tmp table             | 0.000055 |     NULL |       NULL |         NULL |          NULL |
| executing                      | 0.000003 |     NULL |       NULL |         NULL |          NULL |
| Copying to tmp table           | 0.704845 |     NULL |       NULL |         NULL |          NULL |
| Sending data                   | 0.130039 |     NULL |       NULL |         NULL |          NULL |
| optimizing                     | 0.000029 |     NULL |       NULL |         NULL |          NULL |
| statistics                     | 0.000029 |     NULL |       NULL |         NULL |          NULL |
| preparing                      | 0.000020 |     NULL |       NULL |         NULL |          NULL |
| Creating tmp table             | 0.000142 |     NULL |       NULL |         NULL |          NULL |
| executing                      | 0.000003 |     NULL |       NULL |         NULL |          NULL |
| Copying to tmp table           | 0.000086 |     NULL |       NULL |         NULL |          NULL |
| Sending data                   | 0.000067 |     NULL |       NULL |         NULL |          NULL |
| optimizing                     | 0.000004 |     NULL |       NULL |         NULL |          NULL |
| statistics                     | 0.000005 |     NULL |       NULL |         NULL |          NULL |
| preparing                      | 0.000005 |     NULL |       NULL |         NULL |          NULL |
| executing                      | 0.000002 |     NULL |       NULL |         NULL |          NULL |
| Sending data                   | 0.023963 |     NULL |       NULL |         NULL |          NULL |
| removing tmp table             | 0.003420 |     NULL |       NULL |         NULL |          NULL |
| Sending data                   | 0.000005 |     NULL |       NULL |         NULL |          NULL |
| removing tmp table             | 0.003308 |     NULL |       NULL |         NULL |          NULL |
| Sending data                   | 0.000006 |     NULL |       NULL |         NULL |          NULL |
| removing tmp table             | 0.000007 |     NULL |       NULL |         NULL |          NULL |
| Sending data                   | 0.000009 |     NULL |       NULL |         NULL |          NULL |
| query end                      | 0.000003 |     NULL |       NULL |         NULL |          NULL |
| freeing items                  | 0.000144 |     NULL |       NULL |         NULL |          NULL |
| storing result in query cache  | 0.000011 |     NULL |       NULL |         NULL |          NULL |
| logging slow query             | 0.000003 |     NULL |       NULL |         NULL |          NULL |
| cleaning up                    | 0.000006 |     NULL |       NULL |         NULL |          NULL |
+--------------------------------+----------+----------+------------+--------------+---------------+
35 rows in set (0.00 sec)


--使用查询语句对消耗进行排序

mysql> SELECT STATE,
    ->        SUM(DURATION) AS TOTAL_R,
    ->        ROUND(100 * SUM(DURATION) /
    ->              (SELECT SUM(DURATION)
    ->                 FROM INFORMATION_SCHEMA.PROFILING
    ->                WHERE QUERY_ID = 1),
    ->              2) AS PCT_R,
    ->        COUNT(*) AS CALLS,
    ->        SUM(DURATION) / COUNT(*) AS "R/Call"
    ->   FROM INFORMATION_SCHEMA.PROFILING
    ->  WHERE QUERY_ID = 1
    ->  GROUP BY STATE
    ->  ORDER BY TOTAL_R DESC;

+--------------------------------+----------+-------+-------+--------------+
| STATE                          | Total_R  | Pct_R | Calls | R/Call       |
+--------------------------------+----------+-------+-------+--------------+
| Copying to tmp table           | 0.704931 | 81.26 |     2 | 0.3524655000 |
| Sending data                   | 0.154089 | 17.76 |     6 | 0.0256815000 |
| removing tmp table             | 0.006735 |  0.78 |     3 | 0.0022450000 |
| Opening tables                 | 0.000963 |  0.11 |     1 | 0.0009630000 |
| Creating tmp table             | 0.000197 |  0.02 |     2 | 0.0000985000 |
| Table lock                     | 0.000169 |  0.02 |     1 | 0.0001690000 |
| freeing items                  | 0.000144 |  0.02 |     1 | 0.0001440000 |
| checking query cache for query | 0.000099 |  0.01 |     1 | 0.0000990000 |
| statistics                     | 0.000061 |  0.01 |     3 | 0.0000203333 |
| optimizing                     | 0.000053 |  0.01 |     3 | 0.0000176667 |
| preparing                      | 0.000043 |  0.00 |     3 | 0.0000143333 |
| starting                       | 0.000018 |  0.00 |     1 | 0.0000180000 |
| System lock                    | 0.000015 |  0.00 |     1 | 0.0000150000 |
| storing result in query cache  | 0.000011 |  0.00 |     1 | 0.0000110000 |
| executing                      | 0.000008 |  0.00 |     3 | 0.0000026667 |
| cleaning up                    | 0.000006 |  0.00 |     1 | 0.0000060000 |
| logging slow query             | 0.000003 |  0.00 |     1 | 0.0000030000 |
| query end                      | 0.000003 |  0.00 |     1 | 0.0000030000 |
+--------------------------------+----------+-------+-------+--------------+
18 rows in set (0.01 sec)


--最后说明:

    profile是一个非常量化的




>

>

>

>

>

>

>

>

   


























 

    

    

     

>

   

     

               

            

             

  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

>>>>>
>
>
>
 
   

    

     

 
   

 

         

   

   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  •  

  •    

  •  

  •  

  •    

  •    

  •    

  •    

  •    

  •  

  •    



    


DBA笔试面试讲解
欢迎与我联系

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
17天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
54 3
|
17天前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
79 6
|
17天前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
69 1
|
2月前
|
存储 关系型数据库 MySQL
深入理解MySQL索引类型及其应用场景分析。
通过以上介绍可以看出各类MySQL指标各自拥有明显利弊与最佳实践情墁,在实际业务处理过程中选择正确型号极其重要以确保系统运作流畅而稳健。
119 12
|
3月前
|
存储 SQL 关系型数据库
MySQL的Redo Log与Binlog机制对照分析
通过合理的配置和细致的管理,这两种日志机制相互配合,能够有效地提升MySQL数据库的可靠性和稳定性。
121 10
|
2月前
|
缓存 关系型数据库 MySQL
MySQL数据库性能调优:实用技术与策略
通过秉持以上的策略实施具体的优化措施,可以确保MySQL数据库的高效稳定运行。务必结合具体情况,动态调整优化策略,才能充分发挥数据库的性能潜力。
117 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
|
4月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
5月前
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
5月前
|
缓存 JSON 关系型数据库
MySQL 查询优化分析 - 常用分析方法
本文介绍了MySQL查询优化分析的常用方法EXPLAIN、Optimizer Trace、Profiling和常用监控指标。

推荐镜像

更多