ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql之慢sql与pt-query-digest

2021-08-07 23:03:53  阅读:220  来源: 互联网

标签:之慢 slow log pt mysql 查询 time sql query


 参考文章

《数据库优化——慢查询MySQL定位优化流程》

《MySQL慢查询分析工具pt-query-digest详解》

 

写在开头:本文为学习后的总结,可能有不到位的地方,错误的地方,欢迎各位指正。

 

1. 慢sql

我们将查询时间超出一定阈值的sql称为慢sql,mysql提供了慢sql日志帮助我们进行优化分析

慢sql相关参数:

(1)是否开启慢sql日志:slow_query_log

使用

set global slow_query_log=on;

开启慢sql记录

(2)慢sql阈值:long_query_time

使用

set global long_query_time=1; 

记录查询时间大于1秒的sql

(3)慢sql日志路径:slow_query_log_file

默认slow.log,路径为mysql的data目录下

(4)是否记录未使用索引的查询 log_queries_not_using_indexes

记录未使用索引的sql:

set global log_queries_not_using_indexes=on

(5)sql扫描行数大于 min_examined_row_limit 时才记录

sql扫描行数大于100时才记录

set global min_examined_row_limit=100;

 

2. pt-query-digest

我们利用mysql日志分析工具对slow.log进行分析(慢sql只能记录已经查询完的sql,正在执行的慢sql则无法记录,

不过可以使用show full processlist查看正在运行的sql,不过这个更接近运维的范畴,这里不做深入讲解,有兴趣的

可以移步这里看下《MySQL show processlist说明》

比如我们对2021年7月5日下午1点到5点的慢sql日志进行分析

pt-query-digest slow.log --since '2021-07-05 13:00:00' --until '2021-07-05 17:00:00' -->/tmp/slow_0705.report

--since 从什么时间开始分析,值为字符串,可以是指定的某个”yyyy-mm-dd [hh:mm:ss]”格式的时间点,也可以是简单的一个时间值:s(秒)、h(小时)、m(分钟)、d(天)

,如12h就表示从12小时前开始统计。

--until 截止时间,配合—since可以分析一段时间内的慢查询。

(1)第一部分:总体情况

Overall:查询总数、唯一查询数量、QPS、并发

Time range:查询的时间范围

Exec time :执行时间

Lock time:被阻塞时间

Rows sent:查询返回行数

Rows examine : 查询扫描行数

query size : 查询数据量

total:总计 min:最小 max:最大 avg:平均

95%:把所有值从小到大排列,位于95%的值

median:中位数,把所有值从小到大排列,位于中间的值

(2)第二部分:查询分组统计结果

Rank:所有语句的排名,默认按查询时间降序排列

Query ID:查询的ID (有说法是sql id 去掉空格和文本字符后计算的hash)

Response:总执行时间

time:该查询在本次分析中总的时间占比

calls:执行次数,即本次分析总共有多少条这种类型的查询语句

R/Call:平均每次执行的响应时间

V/M:响应时间Variance-to-mean的比率

Item:查询对象(记录了查方法与涉及到的表等信息)

(3)第三部分:每个查询的详细统计结果

Query:对应第二部分中的Rank排名

ID:查询ID号,即第二部分中的Query ID对应

Time range:查询时间范围

Attribute:针对此类查询的统计

Databases:数据库名

Hosts:执行查询的IP分布(占比)

Users:各个用户执行的次数(占比)

Query_time distribution :查询时间分布, 长短体现区间占比。

Tables :查询中涉及到的表

EXPLAIN :显示具体的sql

 

3. explain

在分析完后,我们确定了存在异常的sql,那么接下来就要对其进行进一步的解析与优化。

之前在索引介绍里简单介绍了下explain,这里再做下补充

使用explain对慢sql分析日志中的异常sql再进行详细分析,就可以有针对性的进行sql优化,

比如是调整sql写法还是增加索引。

标签:之慢,slow,log,pt,mysql,查询,time,sql,query
来源: https://www.cnblogs.com/jchen104/p/15113624.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有