mysql中profile的使用方法教程
profile是什么
当我们要对某一条sql的性能进行分析时,可以使用它。
Profiling是从mysql5.0.3版本以后才开放的。
启动profile之后,所有查询包括错误的语句都会记录在内。
关闭会话或者setprofiling=0就关闭了。(如果将profiling_history_size参数设置为0,同样具有关闭MySQL的profiling效果。)
此工具可用来查询SQL执行状态,Systemlock和Tablelock花多少时间等等,
对定位一条语句的I/O消耗和CPU消耗非常重要。(SQL语句执行所消耗的最大两部分资源就是IO和CPU)
--在mysql5.7之后,profile信息将逐渐被废弃,mysql推荐使用performanceschema
mysql官网定义
TheSHOWPROFILEandSHOWPROFILESstatementsdisplayprofilinginformationthatindicatesresourceusageforstatementsexecutedduringthecourseofthecurrentsession.
简单的说,当前会话资源的消耗情况。
注意:showprofile和showProfiles都是不建议使用的,在mysql后期的版本中可能会被删除;官网建议使用PerformanceSchema
怎么使用
profile默认关闭,生产环境中也建议关闭。
查看当前环境的profile设置
mysql>showvariableslike'%profiling%'; +------------------------+-------+ |Variable_name|Value| +------------------------+-------+ |have_profiling|YES| |profiling|OFF| |profiling_history_size|15| +------------------------+-------+
profilingoff表示profile关闭,profiling_history_size15表示保存最近15条SQL的资源消耗情况。
开启profile功能,可以使用命令
setglobalprofiling=1;
然后就可以使用下面命令
showprofiles;
查看最近15条SQL的情况;
如果要查看某一条的具体情况,SQL格式为:
SHOWPROFILE[type[,type]...] [FORQUERYn] [LIMITrow_count[OFFSEToffset]] type:{ ALL |BLOCKIO |CONTEXTSWITCHES |CPU |IPC |MEMORY |PAGEFAULTS |SOURCE |SWAPS }
官网对type中各个字段的解释为:
ALLdisplaysallinformation
BLOCKIOdisplayscountsforblockinputandoutputoperations
CONTEXTSWITCHESdisplayscountsforvoluntaryandinvoluntarycontextswitches
CPUdisplaysuserandsystemCPUusagetimes
IPCdisplayscountsformessagessentandreceived
MEMORYisnotcurrentlyimplemented
PAGEFAULTSdisplayscountsformajorandminorpagefaults
SOURCEdisplaysthenamesoffunctionsfromthesourcecode,togetherwiththenameandlinenumberofthefileinwhichthefunctionoccurs
SWAPSdisplaysswapcounts
profiling对每个会话有效,当会话结束后,当前的profiling信息就会丢失。
使用案例
mysql>showprofiles; +----------+------------+----------------------------+ |Query_ID|Duration|Query| +----------+------------+----------------------------+ |1|0.00060275|select*fromcustomers| |2|0.00222450|showtables| |3|0.00567425|select*fromoffices| |4|0.00052050|showtables| |5|0.01123300|select*frompayments| |6|0.00111675|showtables| |7|0.02049625|select*fromproductlines| +----------+------------+----------------------------+
在排查SQL执行情况,或者是哪条SQL执行非常慢,慢在哪里;profile都是非常的辅助工具。
显示一条SQL的具体花销在哪里
mysql>showprofileforquery7; +----------------------+----------+ |Status|Duration| +----------------------+----------+ |starting|0.000043| |checkingpermissions|0.000005| |Openingtables|0.014552| |init|0.000025| |Systemlock|0.000009| |optimizing|0.000004| |statistics|0.000011| |preparing|0.000010| |executing|0.000003| |Sendingdata|0.005653| |end|0.000010| |queryend|0.000009| |closingtables|0.000020| |freeingitems|0.000121| |cleaningup|0.000023| +----------------------+----------+
信息一目了然,这样我就能对SQL执行情况有个大概的了解。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。