用 Show Profile 进行 sql 分析|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 快速学习用 Show Profile 进行 sql 分析

开发者学堂课程【MySQL 高级应用 - 索引和锁用 Show Profile 进行 sql 分析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/598/detail/8628


用 Show Profile 进行 sql 分析


目录:

一、Show Profile 的定义

二、Show Profile 分析步骤

三、日常开发需要注意的结论

 

一、Show Profile 的定义

前情回顾:我们要进行数据的调优和排查,第一步先让故障重现

一般都是 DBA 或者运维工程师从监控系统里面收到了报站,系统变慢了。因为重要的系统都会有另外一套辅助的系统监控,这种监控系统慢于一个模块平均时间优化以后应该更快执行完毕,那么现在还是时间很长,所以程序还是有问题。

1、Show Profile 定义

mysql 提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于 SQL 的调优的测量。

四层结构连接、服务、引擎、存储,打一条 sql 过来完整的生命周期走一圈。

假设有一种命令,能够把我走的全部路径走一遍,能够告诉你每一个执行步骤,分别使用了多长时间。

官网:

http://dev.mysql.com/doc/refman/5.5/en/show-profile.html

默认情况下,参数处于关闭状态,并保持最近15次的运行结果。//show profile 后台记录每一条 sql

show profile 命令用于跟踪执行过的 sql 语句的资源消耗信息,可以帮助查看 sql 语句的执行情况,可以在做性能分析或者问题诊断的时候作为参考。

二、Show Profile 分析步骤

1.是否支持,看看当前的 mysql 版本是否支持

Show variables like 'profiling';

image.png

默认是关闭,使用前需要开启,或者:

Show variables like 'profiling%';

2.开启功能,默认是关闭,使用前需要开启

show variables like 'profiling'

set profiling=on;

查看是否开启(on 代表已经开启,off 关闭):

SHOW VARIABLES LIKE 'profiling';

//运行结果如下图

image.png

示例:

Mysql>select * from tbl_emp;

//运行结果如下

image.png

8 rows in set (0.05 sec)

Mysql> select *  from tbl_emp e inner join tbl_dept on e.deptip=d.id;

//运行结果如下图所示:

Error 1054(42s22):unknown column ‘d.id’ in ‘on clause’

Mysql> select * from tbl_emp e inner join tbl_dept d on e.deptid=d.id;

image.png

重复点击按钮就会重复发出一条 sql,后台就会记录到每一条 sql 的运行。

3. 运行 SQL

执行 show profiles 命令;

Mysql>select*from emp group by id%10 limit 150000;

//除数取余分组

运行代码显示结果如下图:

image.png

select*from emp group byid%20 order by5

//按照20分组查询

运行代码显示结果如下图:

image.png

4. 查看结果show profiles

//查询系统上所有执行过的 sql

image.png

Query_id 是从开始到现在发过9sql

Duration 是执行的时间

query 是执行命令的内容

5. 诊断 SQLshow profile cpu,block io for query 上一步前面的问题 SQL 数字号码;

命令:

Show profile type for query Query_ID

示例:

Mysql>show profile cpu,block io for query 3

//执行结果如下图

image.png

显示了完成查询生命周期,每一个步骤用了多少时间

参数备注:

ALL --显示所有的开销信息

BLOCKIO --显示块10相关开销

CONTEXTSWITCHES--上下文切换相关开销

CPU --显示 CPU 相关开销信息

IPC --显示发送和接收相关开销信息

MEMORY --显示内存相关开销信息

PAGEFAULTS --显示页面错误相关开销信息

SOURCE --显示和 Sourcefunction,Source file,Source line 相关的开销信息

SWAPS --显示交换次数相关开销的信息

 

三、日常开发需要注意的结论

1、converting HEAP to MyISAM 查询结果太大,内存都不够用了往磁盘上搬了。

2、Creating tmp table 创建临时表

为什么创建临时表比较难?

第一步新建临时表,第二步拷贝数据到程序表,第三步数据推送给主人以后还需要删掉临时表

拷贝数据到临时表

用完再删除

3、Copying to tmp table on disk 把内存中临时表复制到磁盘,危险!!!

4、locked

出现以上四个问题,一定是耗损内存,降低速度。,必须要进行优化。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
3月前
|
前端开发 Java JSON
Struts 2携手AngularJS与React:探索企业级后端与现代前端框架的完美融合之道
【8月更文挑战第31天】随着Web应用复杂性的提升,前端技术日新月异。AngularJS和React作为主流前端框架,凭借强大的数据绑定和组件化能力,显著提升了开发动态及交互式Web应用的效率。同时,Struts 2 以其出色的性能和丰富的功能,成为众多Java开发者构建企业级应用的首选后端框架。本文探讨了如何将 Struts 2 与 AngularJS 和 React 整合,以充分发挥前后端各自优势,构建更强大、灵活的 Web 应用。
58 0
|
3月前
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
48 0
|
3月前
|
SQL 数据采集 算法
【电商数据分析利器】SQL实战项目大揭秘:手把手教你构建用户行为分析系统,从数据建模到精准营销的全方位指南!
【8月更文挑战第31天】随着电商行业的快速发展,用户行为分析的重要性日益凸显。本实战项目将指导你使用 SQL 构建电商平台用户行为分析系统,涵盖数据建模、采集、处理与分析等环节。文章详细介绍了数据库设计、测试数据插入及多种行为分析方法,如购买频次统计、商品销售排名、用户活跃时间段分析和留存率计算,帮助电商企业深入了解用户行为并优化业务策略。通过这些步骤,你将掌握利用 SQL 进行大数据分析的关键技术。
181 0
|
3月前
|
SQL 数据挖掘 BI
【超实用技巧】解锁SQL聚合函数的奥秘:从基础COUNT到高级多表分析,带你轻松玩转数据统计与挖掘的全过程!
【8月更文挑战第31天】SQL聚合函数是进行数据统计分析的强大工具,可轻松计算平均值、求和及查找极值等。本文通过具体示例,展示如何利用这些函数对`sales`表进行统计分析,包括使用`COUNT()`、`SUM()`、`AVG()`、`MIN()`、`MAX()`等函数,并结合`GROUP BY`和`HAVING`子句实现更复杂的数据挖掘需求。通过这些实践,你将学会如何高效地应用SQL聚合函数解决实际问题。
50 0
|
3月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
|
4月前
|
SQL 存储 数据库
MySQL设计规约问题之性能分析工具如Sql explain、show profile和mysqlsla在数据库性能优化中有什么作用
MySQL设计规约问题之性能分析工具如Sql explain、show profile和mysqlsla在数据库性能优化中有什么作用
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
111 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。