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这个图形化界面工具来使用。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
197 66
|
3月前
|
存储 关系型数据库 MySQL
MySQL在企业内部应用场景有哪些
【10月更文挑战第17天】MySQL在企业内部应用场景有哪些
122 0
|
3月前
|
存储 关系型数据库 MySQL
介绍一下MySQL的一些应用场景
【10月更文挑战第17天】介绍一下MySQL的一些应用场景
454 0
|
4月前
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
872 4
|
2月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
55 2
|
2月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
346 1
|
4月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
684 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
3月前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
132 1
|
3月前
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
212 5
|
2月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
131 0