show profile是mysql提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优测量。官网
分析步骤:
show variables like 'profiling';

开启功能,默认是关闭,使用前需要开启。
set profiling=on;运行sql:
select * from emp group by id%10;
select * from emp group by id%20 order by 5;
...通过show profiles查看执行sql时间的结果:

Query_ID 查询的ID
Duration 执行时间
Query 当前执行SQL语句诊断SQL
show profile cpu,block io for query [Query_ID]
show profile cpu,block io for query 12

这里只列出了cpu和 block io 当然 诊断类型不止这些:
ALL 显示所有的开销信息
BLOCK IO 显示块IO相关开销
CONTEXT SWITCHES 上下文切换相关开销
CPU 显示CPU相关开销信息
IPC 显示发送和接收相关开销信息
MEMORY 显示内存相关开销信息
PAGE FAULTS 显示页面错误相关开销
SOURCE 显示和Source_function,Source_file,Source_line相关的开销信息
SWAPS 显示交换次数相关开销的信息
虽然show profile让我们粒度更细的去分析整个sql生命周期,那么如何区分哪条SQL有问题呢?
日常开发注意结论,出现以下4个就会出现很大问题:
converting HEAP to MyISAM 查询结果太大,内存都不够用了往磁盘上搬
Creating tmp table 创建临时表,拷贝数据到临时表,用完再删除
Copy to tmp table on disk 把内存中临时表赋值到磁盘,很危险
locked 存在锁
查看id=19语句生命周期:它的时间很长
show profile cpu,block io for query 19;

Creating tmp table
Copy to tmp table
removing tmp table
当然会慢了只允许在测试环境上使用,永远不要在生产环境开启此功能
启动
1.终端启动:
set global general_log=1;
set global log_output='TABLE';
# 以后,你所编写的sql语句,将会记录到mysql库里的general_log表中,可以用下面命令查看
select * from mysql.general_log;
2.配置文件启动:
mysql的my.cnf 设置
general_log=1
general_log_file=/path/logfile # 记录日志文件的路径
log_output=FILE #输出格式原文:https://www.cnblogs.com/xujunkai/p/12496634.html