慢查询日志
精度微妙级别
开销最低,精度最高的测量查询时间的工具。
对IO密集型应用影响可忽略。仅对CPU密集型应用影响较大。
最应该关注的是开启慢查询日志后,会造成磁盘空间的消耗。长期开启慢查询日志要做好日志轮转。
通过慢查询日志可以定位到需要优化的单条SQL。
拿到单条SQL,需要确认为什么耗时这么长,如何进行优化。
使用SHOW STATUS、SHOW PROFILE 来测量查询执行的各个部分耗费的时间。
SHOW PROFILE默认禁止使用,需要手动开启:SET profiling=1;
当一条查询提交给服务器的时候,此工具会记录剖析信息到一张临时表,并给查询一个从1开始的整数标识符
SHOW PROFILES
响应时间精度高小数点后8位,精确到微妙,对查询快的sql很有意义,MySQL客户端只展示2位小数
SHOW PROFILE FOR QUERY 1;
打印出查询1 的剖析报告
剖析报告中展示了 查询执行的每个步骤及其花费的时间(按照执行顺序排序 不是按照耗费时间排序 但我们更关注哪个步骤耗费时间最多)
解决办法是,直接查询INFORMATION_SCHEMA.PROFILING表按照我们想要的格式输出(比如按照消耗时长排序)
SHOW PROFILE 能定位到哪些子活动花费了最多的时间,
但还需要知道为什么子活动耗费这么多时长
EXPLAIN通过预估计返回指令执行状态,且无法表明临时表是磁盘表还是内存临时表
实际读索引的频繁程度可以通过SHOW STATUS进行展示。但他仅为计数器,并不能展示出消耗的时间。