0%

Mysql进阶--Show Profile进行Sql分析及优化

Show Profile的作用

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

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

默认情况下,参数处于关闭状态,并保存最近15次的运行结果

1.首先使用命令查看是否开启,OFF表示处于关闭状态,NO表示开启状态,
1
show variables like 'profiling%';

image-20201125095548068

2.使用命令开始profiling,
1
set profiling=on; 

image-20201125095709137

3.执行Sql进行测试,先查询普通sql,输入语句,
1
2
3
select * from tbl_emp;
select * from tbl_emp e inner join tbl_dept d on e.deptId = d.id;
select * from tbl_emp e left join tbl_dept d on e.deptId = d.id;

image-20201125095919371

为了让执行时长变长便于观察,执行语句,

1
2
3
select * from emp group by id limit 30000;
select * from emp group by id limit 40000;
select * from emp group by id limit 50000;

image-20201125100848551

image-20201125101027572

image-20201125100939970

4.使用命令查看刚刚执行的Sql语句,
1
show profiles;

image-20201125104958313

5.然后使用命令来通过Quert_Id来诊断Sql语句,如果有需要,还可以加需要查看的参数,这四个是主要的,
1
show profile cpu, block io for query SQL编号;

image-20201125105216354

参数介绍:

  1. ALL:显示所有的开销信息
  2. BLOCK IO:显示块IO相关开销
  3. CONTEXT SWITCHES:上下文切换相关开销
  4. CPU:显示CPU相关开销信息
  5. IPC:显示发送和接收相关开销信息
  6. MEMORY:显示内存相关开销信息
  7. PAGE FAULTS:显示页面错误相关开销信息
  8. SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息
  9. SWAPS:显示交换次数相关开销的信息
6.日常开发问题总结,如果profile诊断出现以下字段,则表示Sql存在问题,需要优化,

converting HEAP to MyISAM:查询结果太大,内存已经不够用了,往磁盘上搬了。

Creating tmp table:创建临时表,mysql 先将拷贝数据到临时表,然后用完再将临时表删除

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

locked:锁表

----------本文结束感谢您的阅读----------