mysql show profile 性能分析工具

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mysql show profile 执行时间 消耗时间 时间切片 -DENABLED_PROFILING=bool

mysql profile使用场景及方法

今天有客户反馈,同样的SQL和同样数据量的数据库在RDS和自建库上面,执行时间差异非常大,需要排查一下具体的原因,当时用了show profile给客户说明了具体时间花费在哪一步。首先当然看下具体情况、数据量、索引、执行计划等是否真的如客户所说完全一致,当然这不在我们这篇文档的范围内。

今天我们主要来讲一下mysql show profile查看SQL执行的时间到底去哪了。

准备工作

相关参数:
[profiling] 控制是否开启profiling,值为bool,默认为off。
[profiling_history_size] 控制保存的statement数量,默认为15,上限100,设置为0时关闭profiling。

语法:
SHOW PROFILE [type [, type] ... ]
[FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
type: {
ALL
| BLOCK IO
| CONTEXT SWITCHES
| CPU
| IPC
| MEMORY
| PAGE FAULTS
| SOURCE
| SWAPS
}

使用profile之前,我们先要开启profiling,默认该参数是关闭的,我们可以会话级别设置开启来进行临时测试。

mysql> show variables like 'profiling';
Variable_name Value
profiling OFF

1 row in set (0.00 sec)
mysql> set session profiling = 1;

执行SQL:
select * from class_a_score where id = 1;

mysql> show variables like 'profiling_history_size';
Variable_name Value
profiling_history_size 15

SHOW profiles 结果:show profiles 是查看所有在history size(当前为15)的语句执行花费的时间和具体SQL语句。

mysql> show profiles;
Query_ID Duration Query
1 0.00034000 explain select * from class_a_score where id = 1
2 0.00304225 show variables like 'profiling_history_size'

指定上面SQL_ID,查看具体的query,每个阶段所花费的时间。(注意,show profile只显示上一条SQL的结果)
这里的status,就是show processlist中类似的结果。[可以另外加limit 和 offset 来控制输出内容]

mysql> show profile for query 1;
Status Duration
starting 0.000069
checking permissions 0.000011
Opening tables 0.000018
init 0.000027
System lock 0.000010
optimizing 0.000011
statistics 0.000041
preparing 0.000042
explaining 0.000041
end 0.000005
query end 0.000008
closing tables 0.000014
freeing items 0.000038
cleaning up 0.000005

14 rows in set, 1 warning (0.01 sec)

mysql> show profile for query 1 limit 1;
Status Duration
starting 0.000069

1 row in set, 1 warning (0.01 sec)

mysql> show profile for query 1 limit 1 offset 2;
Status Duration
Opening tables 0.000018

1 row in set, 1 warning (0.01 sec)

show profile 进阶

另外可以加上type 查看具体花费在CPU还是读写数据上等。

mysql> show profile cpu;
Status Duration CPU_user CPU_system
starting 0.000065 0.000000 0.000053
checking permissions 0.000011 0.000000 0.000010
Opening tables 0.000019 0.000000 0.000018
init 0.000016 0.000000 0.000016
System lock 0.000010 0.000000 0.000010
optimizing 0.000006 0.000000 0.000006
statistics 0.000010 0.000000 0.000009
preparing 0.000009 0.000000 0.000009
executing 0.000005 0.000000 0.000005
Sending data 0.000482 0.000000 0.000483
end 0.000006 0.000000 0.000005
query end 0.000008 0.000000 0.000009
closing tables 0.000008 0.000000 0.000008
freeing items 0.000051 0.000000 0.000060
cleaning up 0.000014 0.000000 0.000005

15 rows in set, 1 warning (0.01 sec)
D8D71183_D7C0_4b77_8AD5_BA7BD6CD755B
这个就是因为时间都花费在物理读上面,导致执行时间过长。

在performance_schema中的应用

因为官方文档中指出,可能再不久将来会废除show profile(因为确实有局限性,比如只能在当前会话使用),目前已经支持使用performance_schema来查看,如下是开启过程:

1、查看是否需要限制哪些前端线程会被记录
SELECT * FROM performance_schema.setup_actors;
INSERT INTO performance_schema.setup_actors
(HOST,USER,ROLE,ENABLED,HISTORY)
VALUES('localhost','test_user','%','YES','YES');

2、开启统计timer和eventUPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE (NAME LIKE '%statement/%' or NAME LIKE '%stage/%');

UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE (NAME LIKE '%events_statements_%' or NAME LIKE '%events_stages_%');

3.查找出来event_id
SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like '%sql_text%'

4.把上一步查出来event_id带入
SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration

FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=<?>;

查考:
https://dev.mysql.com/doc/refman/5.6/en/show-profile.html

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
关系型数据库 MySQL
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
28 0
|
18天前
|
算法 Unix Linux
【C/C++ 实用工具】性能分析工具一览
【C/C++ 实用工具】性能分析工具一览
53 0
|
18天前
|
数据可视化 关系型数据库 编译器
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
203 2
|
18天前
|
Web App开发 JavaScript 前端开发
JavaScript中的性能优化:代码优化技巧与性能分析工具
【4月更文挑战第22天】本文探讨JavaScript性能优化,包括代码优化技巧和性能分析工具。建议避免全局查找、减少DOM操作、使用事件委托、优化循环和异步编程以提升代码效率。推荐使用Chrome DevTools、Lighthouse和jsPerf等工具进行性能检测和优化。持续学习和实践是提升JavaScript应用性能的关键。
|
12天前
|
监控 Java 开发者
Java一分钟之-Java性能分析与调优:JProfiler, VisualVM等工具
【5月更文挑战第21天】本文介绍了Java性能优化的两个利器——JProfiler和VisualVM。JProfiler通过CPU Profiler、内存分析器和线程视图帮助解决过度CPU使用、内存泄漏和线程阻塞问题;VisualVM则聚焦于GC行为调整和类加载优化,以减少内存压力和提高应用性能。使用这些工具进行定期性能检查,是提升Java应用效率的关键。
31 0
3个常用的Python性能分析工具及其使用方法
以下是几个常用的性能分析工具及其使用方法和常用命令:
|
18天前
|
存储 安全 关系型数据库
MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)
MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)
|
18天前
|
缓存 Linux
linux性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)
这些工具可以帮助你监视系统的内存使用情况、识别内存泄漏、找到高内存消耗的进程等。根据具体的问题和需求,你可以选择使用其中一个或多个工具来进行内存性能分析。注意,内存分析通常需要综合考虑多个指标和工具的输出,以便更好地理解系统的行为并采取相应的优化措施。
41 6
|
18天前
|
SQL 关系型数据库 MySQL
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
|
18天前
|
Dart 前端开发 开发者
【Flutter前端技术开发专栏】Flutter中的性能分析工具Profiler
【4月更文挑战第30天】Flutter Profiler是用于性能优化的关键工具,提供CPU、GPU、内存和网络分析。它帮助开发者识别性能瓶颈,如CPU过度使用、渲染延迟、内存泄漏和网络效率低。通过实时监控和分析,开发者能优化代码、减少内存占用、改善渲染速度和网络请求,从而提升应用性能和用户体验。定期使用并结合实际场景与其它工具进行综合分析,是实现最佳实践的关键。
【Flutter前端技术开发专栏】Flutter中的性能分析工具Profiler