-
- 介绍
- Query Profiler是MYSQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的性能瓶颈在什么地方。
- 通常我们是使用的explain,以及slow query log都无法做到精确分析,但是Query Profiler却可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,IO等,以及该SQL执行所耗费的时间等。不过该工具只有在MYSQL 5.0.37以及以上版本中才有实现。
- 默认的情况下,MYSQL的该功能没有打开,需要自己手动启动。
- 语句使用
- show profile 和 show profiles 语句可以展示当前会话(退出session后,profiling重置为0) 中执行语句的资源使用情况.
- show profiles :以列表形式显示最近发送到服务器上执行的语句的资源使用情况.显示的记录数由变量:profiling_history_size 控制,默认15条
- show profile: 展示最近一条语句执行的详细资源占用信息,默认显示 Status和Duration两列
- show profile 还可根据 show profiles 列表中的 Query_ID ,选择显示某条记录的性能分析信息
-
- 开启Profile功能
- Profile 功能由MySQL会话变量 : profiling控制,默认是OFF关闭状态。
- 查看是否开启了Profile功能:
* select @@profiling;
* show variables like ‘%profil%’;
- 开启profile功能
* set profiling=1; --1是开启、0是关闭
-
- 示例
- 查看是否打开了性能分析功能
select @@profiling;
- 打开 profiling 功能
set profiling=1;
- 执行sql语句
- 执行 show profiles 查看分析列表
- 查询第二条语句的执行情况
show profile for query 2;
- 可指定资源类型查询
show profile cpu,swaps for query 2;
具体的性能优化细节
- 合理的创建及使用索引(考虑数据的增删情况)
- 合理的冗余字段(尽量建一些大表,考虑数据库的三范式和业务设计的取舍)
- 使用SQL要注意一些细节:select语句中尽量不要使用*、count(*),WHERE语句中尽量不要使用1=1、in语句(建议使用exists)、注意组合索引的创建顺序按照顺序组着查询条件、尽量查询粒度大的SQL放到最左边、尽量建立组合索引
- 合理利用慢查询日志、explain执行计划查询、show profile查看SQL执行时的资源使用情况