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%'; |
2.使用命令开始profiling,
1 | set profiling=on; |
3.执行Sql进行测试,先查询普通sql,输入语句,
1 | select * from tbl_emp; |
为了让执行时长变长便于观察,执行语句,
1 | select * from emp group by id limit 30000; |
4.使用命令查看刚刚执行的Sql语句,
1 | show profiles; |
5.然后使用命令来通过Quert_Id来诊断Sql语句,如果有需要,还可以加需要查看的参数,这四个是主要的,
1 | show profile cpu, block io for query SQL编号; |
参数介绍:
- ALL:显示所有的开销信息
- BLOCK IO:显示块IO相关开销
- CONTEXT SWITCHES:上下文切换相关开销
- CPU:显示CPU相关开销信息
- IPC:显示发送和接收相关开销信息
- MEMORY:显示内存相关开销信息
- PAGE FAULTS:显示页面错误相关开销信息
- SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息
- SWAPS:显示交换次数相关开销的信息
6.日常开发问题总结,如果profile诊断出现以下字段,则表示Sql存在问题,需要优化,
converting HEAP to MyISAM:查询结果太大,内存已经不够用了,往磁盘上搬了。
Creating tmp table:创建临时表,mysql 先将拷贝数据到临时表,然后用完再将临时表删除
Copying to tmp table on disk:把内存中临时表复制到磁盘,危险!!!
locked:锁表