Mysql调优之profile的使用方法
发表时间:2023-05-29 来源:明辉站整理相关软件相关文章人气:
[摘要]本篇文章给大家带来的内容是关于Mysql调优之profile的使用方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。在我们做mysql性能分析的时候,最常用的有三种方式:(1)慢查...
本篇文章给大家带来的内容是关于Mysql调优之profile的使用方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
在我们做mysql性能分析的时候,最常用的有三种方式:
(1)慢查询 (分析出现出问题的sql)
(2)Explain (显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句)
(3)Profile(查询到 SQL 会执行多少时间, 并看出 CPU/Memory 使用量, 执行过程中 Systemlock, Table lock 花多少时间等等.)
本章主要是对profile做简单的概述,用来对某一条sql语句进行性能分析。
Profiling是从 mysql5.0.3版本以后才开放的。但是在mysql5.7之后,profile信息将逐渐被废弃,mysql推荐使用performance schema。
profile此工具可用来查询SQL执行状态,System lock和Table lock 花多少时间等等,对定位一条语句的I/O消耗和CPU消耗 非常重要。(SQL 语句执行所消耗的最大两部分资源就是IO和CPU)
profile工具使用
查看自己的mysql版本:
mysql> select version();
+------------+
version()
+------------+
5.6.35-log
+------------+
查看是否开启profile功能(profiling=on代表开启):
mysql> show variables like '%profil%';
+------------------------+-------+
Variable_name Value
+------------------------+-------+
have_profiling YES
profiling OFF
profiling_history_size 15
+------------------------+-------+
开启profile:
mysql> set profile=1;
开启profile之后,执行要分析的sql语句:
mysql> select t1.*,t2.action from pre_forum_thread as t1
left join
(select a.* from pre_forum_threadmod as a,(select tid,max(dateline) as dateline from pre_forum_threadmod group by tid) as b
where a.tid=b.tid and a.dateline=b.dateline) as t2
on t1.tid=t2.tid
where t1.displayorder>=0 and t1.fid in (47,49) and t1.tid > 100318
and (t1.authorid =7683017 or t2.action<>'DWN' or t2.action is null )
order by t1.dateline desc limit 20;
查看生成的profile信息:
mysql> show profiles;
+----------+------------+--------------------------------------------------------------------------------------------------------+
Query_ID Duration Query
+----------+------------+--------------------------------------------------------------------------------------------------------+
1 1.37183777 select t1.*,t2.action from pre_forum_thread as t1
2 0.00078796 show columns from `bbs`.`t2`
3 0.00150425 show columns from `bbs`.`pre_forum_thread`
+----------+------------+--------------------------------------------------------------------------------------------------------+
获取指定的query语句的开销:
mysql> show profile for query 2;
+----------------------+----------+
Status Duration
+----------------------+----------+
starting 0.000147
checking permissions 0.000023
Opening tables 0.000047
init 0.000081
System lock 0.000031
optimizing 0.000034
statistics 0.001650
preparing 0.000046
executing 0.000018
Sending data 2.460588
end 0.000041
query end 0.000019
closing tables 0.000022
freeing items 0.000055
cleaning up 0.000085
+----------------------+----------+
关闭profile:
mysql> set profiling=0;
相关具体的参数:
type:
ALL --显示所有的开销信息
BLOCK IO --显示块IO相关开销
CONTEXT SWITCHES --上下文切换相关开销
CPU --显示CPU相关开销信息
IPC --显示发送和接收相关开销信息
MEMORY --显示内存相关开销信息
PAGE FAULTS --显示页面错误相关开销信息
SOURCE --显示和Source_function,Source_file,Source_line相关的开销信息
SWAPS --显示交换次数相关开销的信息
例如,想要查看cpu和io开销可以执行命令:
mysql> SHOW profile CPU,BLOCK IO FOR query 2;
总结
一般简易的流程:
(1)set profiling=1; //打开profile分析
(2)run your sql1;
(3)run your sql2;
(4)show profiles; //查看sql1,sql2的语句分析
(5)SHOW profile CPU,BLOCK IO io FOR query 1; //查看CPU、IO消耗
(6)set profiling=0; //关闭profile分析
以上就是Mysql调优之profile的使用方法的详细内容,更多请关注php中文网其它相关文章!
学习教程快速掌握从入门到精通的SQL知识。