8.4 show profile分析SQL
目录
Mysql从5.0.37版本开始增加了对 show profiles 和 show profile 语句的支持。show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于sql的调优的测量。
通过 have_profiling 参数,能够看到当前MySQL是否支持profile:
show variables like 'profiling'; select @@have_profiling;
默认profiling是关闭的,可以通过set语句在Session级别开启profiling:
set profiling=1; # 开启profiling 开关
通过profile,我们能够更清楚地了解SQL执行的过程。
首先,我们可以执行一系列的操作,如下图所示:
show databases; use db01; show tables; select * from tb_item where id < 5; select count(*) from tb_item;
执行完上述命令之后,再执行show profiles
指令, 来查看SQL语句执行的耗时:
show profiles;
诊断SQL:通过show profile for query query_id 语句可以查看到该SQL执行过程中每个线程的状态和消耗的时间:
-- 查看query_id 为6的执行SQL情况 show profile for query 6;
TIP : Sending data 状态表示MySQL线程开始访问数据行并把结果返回给客户端,而不仅仅是返回个客户端。由于在Sending data状态下,MySQL线程往往需要做大量的磁盘读取操作,所以经常是整个查询中耗时最长的状态。
在获取到最消耗时间的线程状态后,MySQL支持进一步选择 all、cpu、block io 、context switch、page faults等明细类型类查看MySQL在使用什么资源上耗费了过高的时间。例如,选择查看CPU的耗费时间 :
字段 | 含义 |
---|---|
Status | sql 语句执行的状态 |
Duration | sql 执行过程中每一个步骤的耗时 |
CPU_user | 当前用户占有的cpu |
CPU_system | 系统占有的cpu |
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/16063252.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步