(七)MySQL高级——用Show Profile进行sql分析&全局查询日志

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Steriles_/article/details/84858026

Show  Profile 介绍:

是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于sql的调优的测试。默认情况下,参数处于关闭状态,并保存最近15次的运行结果。

Show  Profile 分析步骤:

1、是否支持,查看当前的MySQL版本是否支持;

Show variables like 'profiling';
-- 或者
Show variables like 'profiling%';

2、开启功能,默认是关闭状态,使用前需要开启;

-- 开启语句
set profiling=on;

3、运行SQL;

4、查看结果,Show  Profile ;

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

-- 举个例子
show profile cpu,block io for query 3;

举个例子,它的执行效果如下:

参数备注:

ALL    ---   显示所有的开销信息
BLOCK  IO   ---   显示块IO相关开销
CONTEXT  SWITCHES   ---   上下文切换相关开销
CPU   ---   显示CPU相关开销信息
IPC   ---   显示发送和接受相关开销信息
 MEMORY   ---   显示内存相关开销信息
PAGE  FAULTS   ---   显示页面错误相关开销信息
SOURCE   ---    显示和Source_function  ,  Source_file  ,  Source_line相关的开销信息
SWAPS   ---   显示交换次数相关开销的信息

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

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

(2)Creating  tmp  table 创建临时表:拷贝数据到临时表,用完再删除,过程太麻烦还容易发生意外。

(3)Copying  to  tmp  table  on  disk:把内存中临时表复制到磁盘,危险操作!

(4)locked

比如说举个例子,创建临时表的情况,copying to tmp table就耗费了很长时间。


全局查询日志:只能在测试环境使用,不能在生产环境使用。

配置启用:在mysql的my.cnf中,设置如下

-- 开启
general_log = 1
-- 记录日志文件的路径
general_log_file=/path/logfile
-- 输出格式
log_output=FILE

编码启用:

-- 命令
set global general_log = 1;

set global log_output='TABLE';

效果如图:

此后所编写的sql语句,将会记录到mysql库里的general_log表,可以用该命令查看:

select * from mysql.general_log;

猜你喜欢

转载自blog.csdn.net/Steriles_/article/details/84858026
今日推荐