mysql的慢查询日志_docker查看日志最后100行

mysql的慢查询日志_docker查看日志最后100行一.慢查询介绍MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过指定阀值的SQL语句,运行时间超过long_query_time值的SQL,会被记录到慢查询日志中。默认情况下,MySQL数据库并不启动慢查询日志,需要手动开启。如果不是调优需要的话,一般不建议开启,因为开启慢查询日志会或多或少带来一定的性能影响。在SQLServer中我们利用S…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一. 慢查询介绍

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过指定阀值的SQL语句,运行时间超过long_query_time值的SQL,会被记录到慢查询日志中。

默认情况下,MySQL数据库并不启动慢查询日志,需要手动开启。如果不是调优需要的话,一般不建议开启,因为开启慢查询日志会或多或少带来一定的性能影响。

SQL Server中我们利用SQL Profile来记录SQL执行情况,在Oracle中我们可以使用AWR、ASH报告来分析历史SQL执行情况,类似的调优方式映射到MySQL中,即对应为慢查询日志

二. 参数介绍

介绍与慢查询日志相关的参数

slow_query_log:是否开启慢查询日志,1表示开启,0表示关闭。

slow_query_log_file:MySQL慢查询日志存储路径。

long_query_time :慢查询阈值(s),当查询时间多于设定的阈值时,记录日志。

log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中。

log_throttle_queries_not_using_indexes:表示每分钟允许记录到slow_log的且未使用索引的sql语句次数(0为无限制,如果为固定值,可能会记录不到sql)。

log_output:日志存储方式。’FILE’表示存入文件,‘TABLE’表示存入系统表。因为FILE模式开销比较低,所以默认为FILE。

log_slow_admin_statements = 1: 记录ALTER TABLE等语句引发的慢查询

log_slow_slave_statements = 1:记录从服务器产生的慢查询

min_examined_row_limit = 100 :SQL扫描行数大于等于100行才会被记录

 

我们可以通过show variables命令查看当前具体的参数值,如下查看当前slow_query_log为OFF,即表示未开启慢查询日志,long_query_time值为2,即表示慢查询阈值为2s。

mysql> show variables like '%slow_query_log%';
+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| slow_query_log      | OFF      |
| slow_query_log_file | slow.log |
+---------------------+----------+

mysql> show variables like '%long_query_time%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 2.000000 |
+-----------------+----------+

 

三. 开启慢查询日志

开启慢查询日志只需要如下修改部分参数即可,这里设置的慢查询阈值为0.1s,项目上可以根据实际情况调整,这边的建议是如果压测可以设置为0.1s,如果是非压测可以设置为2s。由于开启了log_queries_not_using_indexes,所以慢日志不仅会记录超过阈值的SQL,没有走索引的SQL也会记录日志,即使这些SQL并没有超过阈值。过set global设置参数后,只会在新连接中生效,所以要查看修改后的参数值,需要重新连接。

mysql> set global long_query_time = 0.1;   
Query OK, 0 rows affected (0.00 sec)

mysql> set global log_queries_not_using_indexes = 1;    
Query OK, 0 rows affected (0.00 sec)

mysql> set global log_throttle_queries_not_using_indexes = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global min_examined_row_limit = 100;
Query OK, 0 rows affected (0.00 sec)

mysql> set global slow_query_log = 1;
Query OK, 0 rows affected (0.00 sec)

 

 

四. 日志内容

我们得到慢查询日志后,最重要的一步就是去分析这个日志。我们先来看下慢日志里到底记录了哪些内容。

如下图是慢日志里其中一条SQL的记录内容,可以看到有时间戳,用户,查询时长及具体的SQL等,内容其实是很齐全的。但是存在一个问题,慢日志里往往有许多SQL,不可能一条一条SQL看过去,我们需要将所有的慢SQL分组统计后在进行分析。

 

# Time: 2018-08-16T00:00:04.821003+08:00
# User@Host: zwfwroot[zwfwroot] @ 19.15.0.30 [19.15.0.30]  Id: 67508
# Schema: gdqlk  Last_errno: 0  Killed: 0
# Query_time: 14.344185  Lock_time: 0.000028  Rows_sent: 237064  Rows_examined: 237064  Rows_affected: 0
# Bytes_sent: 96078006
SET timestamp=1534348804;
SELECT * FROM `audit_catalog_lobby`;

 

 

五. 日志分析

pt-query-digest是用于分析MySQL慢查询的一个工具,先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,同时把分析结果输出到文件中,我们可以借助分析结果找出问题进行优化。

pt-query-digestpercona-toolkit工具包下的一个工具,如果MySQL是使用Linux_5.7.22版本的bin包安装的话,默认会安装percona-toolkit,可以直接使用pt-query-digest命令来分析慢查询日志。

Linux下使用如下命令分析指定时间范围内的慢查询,slow.log需要指定具体路径,slow_report.log指定输出文件。

 # pt-query-digest slow.log –since ‘2017-01-07 09:30:00’ –until ‘2017-01-07 10:00:00’ > slow_report.log

 

 

下面介绍通过pt-query-digest分析slow.log后得到的slow_report.log文件。

文件内容总体分成3个部分,第一部分为总体统计结果第二部分为查询分组统计结果第三部分为每一类查询的详细统计结果

(1) 总体统计结果

mysql的慢查询日志_docker查看日志最后100行mysql的慢查询日志_docker查看日志最后100行
Overall:查询总数、唯一查询数量、QPS、并发 
Time range:查询的时间范围 
Exec time :执行时间 
Lock time:被阻塞时间 
Rows sent:查询返回行数 
Rows examine : 查询扫描行数 
query size : 查询数据量 
total:总计 min:最小 max:最大 avg:平均 stddev: 标准差 
95%:把所有值从小到大排列,位于95%的值 
median:中位数,把所有值从小到大排列,位于中间的值

(2) 查询分组统计结果

mysql的慢查询日志_docker查看日志最后100行mysql的慢查询日志_docker查看日志最后100行
Rank:所有语句的排名,默认按查询总时间降序排列 
Query ID:SQL的ID 
Response:总执行时间 
time:该查询在本次分析中总的时间占比 
calls:执行次数,即本次分析总共有多少条这种类型的查询语句 
R/Call:平均每次执行的响应时间 
V/M:方差均值 
Item:查询对象

 (3) 每个查询的详细统计结果 

mysql的慢查询日志_docker查看日志最后100行mysql的慢查询日志_docker查看日志最后100行
Query:对应第二部分中的Rank排名 
ID:查询ID号,与Query ID对应 
Time range:查询时间范围 
Attribute:针对此类查询的统计 
Databases:数据库名 
Hosts:执行查询的IP分布(占比) 
Users:各个用户执行的次数(占比) 
Query_time distribution :查询时间分布, 长短体现区间占比,本例中10s以上查询数较多。

六. 总结

项目上可以通过此方法来优化SQL,根据Rank排名先后,依次分析优化SQL即可。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183546.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 针不戳,数据库性能优化八大方案。[通俗易懂]

    针不戳,数据库性能优化八大方案。[通俗易懂]毫不夸张的说咱们后端工程师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速、准确的去选择出合适的优化方案,我相信能够快速准备解决咱么日常遇到的80%甚至90%的性能问题。从解决问题的角度出发,我们得先了解到问题的原因;其次我们得有一套思考、判断问题的流程方式,让我们合理的站在哪个层面选择方案;数据库的优化方案核心本质有三种减少数据量、用空间换性能、选择合适的存储系统。这也对应了开篇讲解的慢的三个原因https。…

    2022年9月15日
    0
  • java中的 Set转List

    java中的 Set转List//构造Map数据 Map<String,String>map=newHashMap<String,String>(); map.put("ele1","小樱"); map.put("ele2","若曦"); map.put("ele3","晴川"); Set<String>s

    2022年10月18日
    0
  • python全国计算机二级报名_python有证书考吗

    python全国计算机二级报名_python有证书考吗第一次参加全国计算机等级考试的考生对于网上报名的流程,对全国计算机考试流程中某些环节并不清楚,小编今天就整理下全国计算机等级考试流程及详细说明,提供网上报名流程示意图,解决大家在全国计算机等级考试报名过程中的疑问。(如有出入,请以官方信息为准)考生需登录各地计算机等级考试官方报名网站,进入“全国计算机等级考试报名系统”进行注册登录。(一)注册账号和登录一、注册ETEST通行证1.考生首次登录系…

    2022年9月3日
    3
  • 学算法先学数据结构?是否是无稽之谈?[通俗易懂]

    学算法先学数据结构?是否是无稽之谈?[通俗易懂]头发没了

    2022年8月10日
    3
  • visio professional2007产品密钥_输入您的产品密钥

    visio professional2007产品密钥_输入您的产品密钥W2JJW-4KYDP-2YMKW-FX36H-QYVD8

    2022年8月13日
    6
  • stun协议笔记一(stun格式简介)「建议收藏」

    stun协议笔记一(stun格式简介)「建议收藏」一、stun协议格式1、STUN报文头1)最高的2位必须置零,这可以在当STUN和其他协议复用的时候,用来区分STUN包和其他数据包。2)STUNMessageType字段定义了消息的类型(请求/成功响应/失败响应/指示)和消息的主方法。虽然我们有4个消息类别,但在STUN中只有两种类型的事务,即请求/响应类型和指示类型。响应类型分为成功和出错两种,用来帮助快速处理STUN…

    2022年7月17日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号