MySQL调优之show profile 应用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL调优之show profile 应用

show profile是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以帮助进行SQL问题的诊断。默认情况下处于关闭状态,并保存最近15次的运行结果。本文测试环境为MySQL8.0.26版本。

查看配置

show variables like '%profiling%'
# 本文这里如下
have_profiling  YES       //是否支持profile
profiling OFF           // OFF表示关闭,默认关闭
profiling_history_size  15   // 记录最近15条语句

可以使用命令set global profiling=ON进行临时开启,如果需要永久生效则在MySQL的配置文件中进行配置。需要注意的是,你可能遇到当前会话配置不生效的情况,那么建议你进行如下开启:

## 全局配置,但是对当前会话不生效
set global profiling=ON;
# 对当前会话生效
set  profiling=ON;

show profiles查看最近SQL

用来查看最近15条SQL,如下所示主要有Query_ID、Duration以及Query三项。其中Query_ID将在下面详细分析时使用。Duration则表示该条语句执行的时间。

show profile默认查看最新一条SQL执行情况

# Query_ID = 3 
mysql> show profile;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000096 |
| Executing hook on transaction  | 0.000005 |
| starting                       | 0.000009 |
| checking permissions           | 0.000007 |
| Opening tables                 | 0.000043 |
| init                           | 0.000007 |
| System lock                    | 0.000010 |
| optimizing                     | 0.000012 |
| statistics                     | 0.000020 |
| preparing                      | 0.000023 |
| executing                      | 0.000606 |
| end                            | 0.000006 |
| query end                      | 0.000005 |
| waiting for handler commit     | 0.000009 |
| closing tables                 | 0.000010 |
| freeing items                  | 0.000015 |
| cleaning up                    | 0.000011 |
+--------------------------------+----------+
17 rows in set, 1 warning (0.00 sec)

其与下根据ID查询效果一样的:

mysql> show profile cpu,block io for query 3;
+--------------------------------+----------+----------+------------+--------------+---------------+
| Status                         | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+--------------------------------+----------+----------+------------+--------------+---------------+
| starting                       | 0.000096 | 0.000086 |   0.000010 |            0 |             0 |
| Executing hook on transaction  | 0.000005 | 0.000005 |   0.000001 |            0 |             0 |
| starting                       | 0.000009 | 0.000008 |   0.000001 |            0 |             0 |
| checking permissions           | 0.000007 | 0.000006 |   0.000000 |            0 |             0 |
| Opening tables                 | 0.000043 | 0.000038 |   0.000005 |            0 |             0 |
| init                           | 0.000007 | 0.000006 |   0.000000 |            0 |             0 |
| System lock                    | 0.000010 | 0.000009 |   0.000001 |            0 |             0 |
| optimizing                     | 0.000012 | 0.000011 |   0.000001 |            0 |             0 |
| statistics                     | 0.000020 | 0.000018 |   0.000003 |            0 |             0 |
| preparing                      | 0.000023 | 0.000020 |   0.000002 |            0 |             0 |
| executing                      | 0.000606 | 0.000606 |   0.000000 |            0 |             0 |
| end                            | 0.000006 | 0.000006 |   0.000000 |            0 |             0 |
| query end                      | 0.000005 | 0.000005 |   0.000000 |            0 |             0 |
| waiting for handler commit     | 0.000009 | 0.000009 |   0.000000 |            0 |             0 |
| closing tables                 | 0.000010 | 0.000010 |   0.000000 |            0 |             0 |
| freeing items                  | 0.000015 | 0.000015 |   0.000000 |            0 |             0 |
| cleaning up                    | 0.000011 | 0.000011 |   0.000000 |            0 |             0 |
+--------------------------------+----------+----------+------------+--------------+---------------+

查看SQL详细情况

show profile [OPTIONS]  for query Query_ID;
# 如下
show profile cpu,block io   for query 2;

选项注释

选项 说明
ALL 显示所有的开销信息
BLOCK IO 显示块IO相关开销
CPU 显示CPU相关开销信息
CONTEXT SWITCHES 上下文切换相关开销
IPC 显示发送和接收相关开销信息
MEMORY 显示内存相关开销信息
PAGE FAULTS 显示页面错误相关开销信息
SOURCE 显示和source_function,source_file,source_line相关的开销信息
SWAPS 显示交换次数相关开销的信息

日常开发需要注意的地方


即当你从上面详细跟踪中看到下面几个,要特别注意。


convertiong heap to myisam : 查询结果太大,内存不够用,数据往磁盘上搬了。


creating tmp table : 创建临时表(拷贝数据到临时表,用完临时表后删除临时表)。


copying to tmp table on disk : 把内存中临时表复制到磁盘,这是一个危险的动作。


locked : 无需多言,锁的时间比较长


注意,show profile命令将被弃用,我们可以从 information_schema中的profiling数据表进行查看。


Navicat中的应用

其实这一块在Navicat也有简要提示,我们也可以通过Navicat这个图形化界面工具来使用。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
1月前
|
SQL 监控 关系型数据库
MySQL事务处理:ACID特性与实战应用
本文深入解析了MySQL事务处理机制及ACID特性,通过银行转账、批量操作等实际案例展示了事务的应用技巧,并提供了性能优化方案。内容涵盖事务操作、一致性保障、并发控制、持久性机制、分布式事务及最佳实践,助力开发者构建高可靠数据库系统。
|
3月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
|
2月前
|
存储 关系型数据库 MySQL
MYSQL数据加密压缩函数应用实战指南。
总的来说,加密和压缩是维护MySQL数据库中数据安全性和效率的有效手段。使用时需权衡性能与安全,合理应用加密和压缩函数。在设计数据库架构时要考虑到加密字段的查询性能,因为加密可能使得一些索引失效。压缩数据能有效减少存储空间的占用,但在服务器负载较高时应避免实时压缩和解压,以免影响总体性能。
110 10
|
11月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
582 66
|
6月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
6月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
12月前
|
存储 关系型数据库 MySQL
MySQL在企业内部应用场景有哪些
【10月更文挑战第17天】MySQL在企业内部应用场景有哪些
460 0
|
12月前
|
存储 关系型数据库 MySQL
介绍一下MySQL的一些应用场景
【10月更文挑战第17天】介绍一下MySQL的一些应用场景
2607 0
|
7月前
|
缓存 关系型数据库 MySQL
ThinkPHP框架show columns引发mysql性能问题
ThinkPHP框架的show columns引发mysql性能问题,结尾有关闭方式。
238 13
|
7月前
|
SQL 负载均衡 关系型数据库
MySQL复制以及调优
本文介绍了MySQL自带复制方案的实现及其注意事项。复制方案能提供数据备份、负载均衡与分布式数据管理的优势。文章详细描述了复制步骤:主库(master)记录更改到二进制日志,发送同步消息给从库(slave),从库接收后将日志复制到本地并执行。实现复制包括配置主库的server-id和二进制日志、创建复制账号、初始化主库数据、设置从库参数及开启复制。此外,还探讨了三种日志格式(row、statement、mixed)的特点及选择建议,并分析了主从复制延迟的优化方法,如控制事务大小、优化日志传输和多线程还原日志等。最后,文中列出了搭建过程中需要注意的关键点。
137 3

推荐镜像

更多