关于MySQL慢日志,你想知道的都在这

https://mp.weixin.qq.com/s/Ifbq0Dk13SO3WVghqWVUbA

作者介绍
邹鹏,现任职于腾讯云数据库团队,负责腾讯云数据库MySQL中间件研发,多年的数据库、网络安全研发经验,对云计算平台的网络、计算、存储、安全有着深入的了解,在MySQL的高可用、高可靠、中间件方面有丰富的经验。

目录:
什么是慢日志?
什么情况下产生慢日志?
慢日志相关参数
慢日志输出内容
慢日志分析工具
慢日志的清理与备份

一、什么是慢日志?

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10s以上的语句。

默认情况下,MySQL数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志或多或少会带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

5.6官方说明:https://dev.mysql.com/doc/refman/5.6/en/slow-query-log.html
5.7官方说明:https://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html

二、什么情况下产生慢日志?

看图说话,有很多开关影响着慢日志的生成,相关的参数后面会挨个说明。从上图可以看出慢日志输出的内容有两个,第一执行时间过长(大于设置的long_query_time阈值);第二未使用索引,或者未使用最优的索引。

这两种日志默认情况下都没有打开,特别是未使用索引的日志,因为这一类的日志可能会有很多,所以还有个特别的开关log_throttle_queries_not_using_indexes用于限制每分钟输出未使用索引的日志数量。

关键代码如下:

Slow log调用栈(MySQL 5.6.34 ):

三、慢日志相关参数

以上应该是最完整的和慢日志相关的所有参数,大多数参数都有前置条件,所以在使用的时候可以参照上面的流程图。

5.6官方文档:
1、https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html
2、https://dev.mysql.com/doc/refman/5.6/en/server-options.html

四、慢日志输出内容

第一行:标记日志产生的时间,准确说是SQL执行完成的时间点,改行记录每一秒只打印一条。

第二行:客户端的账户信息,两个用户名(第一个是授权账户,第二个为登录账户),客户端IP地址,还有mysqld的线程ID。

第三行:查询执行的信息,包括查询时长,锁持有时长,返回客户端的行数,扫描行数。通常我需要优化的就是最后一个内容,尽量减少SQL语句扫描的数据行数。

第四行:通过代码看,貌似和第一行的时间没有区别。

第五话:最后就是产生慢查询的SQL语句。

--log-short-format=true:

如果mysqld启动时指定了--log-short-format参数,则不会输出第一、第二行。

log-queries-not-using-indexes=on   
log_throttle_queries_not_using_indexes > 0 :

如果启用了以上两个参数,每分钟超过log_throttle_queries_not_using_indexes配置的未使用索引的慢日志将会被抑制,被抑制的信息会被汇总,每分钟输出一次。

格式如下:

五、慢日志分析工具

官方自带工具: mysqldumpslow
开源工具:mysqlsla  
percona-toolkit:工具包中的pt-query-digest工具可以分析汇总慢查询信息,具体逻辑可以看SlowLogParser这个函数。

总的来说,MySQL的日志内容本身不复杂,上面3个工具都是用perl脚本实现,代码行数不超过200行,有兴趣的同学也可以自己尝试着解析下。

详情可以参阅下这篇文章:
《MySQL 慢查询设置和分析工具 》:
https://flyerboy.github.io/2016/12/23/mysql_slow/

以上工具可以支撑慢日志的常用统计,但是当我们需要做到SQL级别的统计时,我们还需要取解析SQL把参数提取出来。

六、慢日志的清理与备份

删除:直接删除慢日志文件,执行flush logs(必须的)。

备份:先用mv重命名文件(不要跨分区),然后执行flush logs(必须的)。

另外修改系统变量slow_query_log_file也可以立即生效;

执行flush logs,系统会先close当前的句柄,然后重新open;mv , rm日志文件系统并不会报错,具体的原因可以Google下linux  i_count   i_nlink ;

关于MySQL慢日志,你想知道的都在这的更多相关文章

  1. mysql 二进制日志后缀数字最大为多少

    之前看到mysql二进制日志后面会加一个以数字递增为结尾的后缀,一直在想当尾数到达999999后会发生什么情况,先查了一下官网,对后缀有这样一句介绍:The server creates binary ...

  2. MySQL慢日志查询全解析:从参数、配置到分析工具【转】

    转自: MySQL慢日志查询全解析:从参数.配置到分析工具 - MySQL - DBAplus社群——围绕数据库.大数据.PaaS云,运维圈最专注围绕“数据”的学习交流和专业社群http://dbap ...

  3. MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库【转载】

    转自 MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库 - _安静 - 博客园http://www.cnblogs.com/xionghui/archive/2012/ ...

  4. mysql基础---日志文件

    一 基本日志文件 MYSQL有不同类型的日志文件(各自存储了不同类型的日志),从它们当中可以查询到MYSQL里都做了些什么,对于MYSQL的管理工作,这些日志文件是不可缺少的. 1.错误日志(The ...

  5. 【转载】mysql binlog日志自动清理及手动删除

    说明:当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间.mysql-bin.000001mysql-bin.000002mysql-b ...

  6. ELK 构建 MySQL 慢日志收集平台详解

    ELK 介绍 ELK 最早是 Elasticsearch(以下简称ES).Logstash.Kibana 三款开源软件的简称,三款软件后来被同一公司收购,并加入了Xpark.Beats等组件,改名为E ...

  7. mysql binlog日志自动清理及手动删除

    说明:当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间.mysql-bin.000001mysql-bin.000002mysql-b ...

  8. MySQL二进制日志(binary log)总结

    本文出处:http://www.cnblogs.com/wy123/p/7182356.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  9. MySQL slow_log日志表出现非法字段值

    背景 从mysql.slow_log 获取慢查询日志很慢,该表是csv表,没有索引. 想添加索引来加速访问,而csv引擎不能添加索引(csv引擎存储是以逗号分割的文本来存储的),只能改存储引擎来添加索 ...

随机推荐

  1. 抓包神器 tcpdump 使用介绍

    tcpdump 命令使用简介 简单介绍 tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上.熟悉 tcpdump 的使用能够帮助你分析.调试网络数据. 要想使用很好地掌握 tcpdu ...

  2. Android Studio系列-签名打包

    本篇博客纪录使用Android Studio对项目进行签名打包,跟Eclipse大同小异,读者朋友注意其中到差别. 第一步 创建签名文件 第二步 填写签名参数 第三步 选择构建类型 第四步 查看生成第 ...

  3. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  4. jqweui 关于$(document.body).infinite的bug

    jqweui,0.8.2版本infinite存在bug,会存在下拉不触发的情况,解决办法: 源代码3730行附近 Infinite.prototype.scroll = function() { va ...

  5. com.android.jack.CommandLine: Internal compiler error

    Android studio编译的时候出现错误: SEVERE: com.android.jack.CommandLine: Internal compiler error Error:Executi ...

  6. CUDA加opencv复现导向滤波算法

    CUDA是GPU通用计算的一种,其中现在大热的深度学习底层GPU计算差不多都选择的CUDA,在这我们先简单了解下其中的一些概念,为了好理解,我们先用DX11里的Compute shader来和CUDA ...

  7. Golang查缺补漏(一)

    Go语言高级编程(Advanced Go Programming) Go语言高级编程(Advanced Go Programming) golang都是传值,与其他语言不同的是数组作为参数时,也是传值 ...

  8. 新内容转入github

    所有新内容已经转入 https://github.com/honggzb/Study-General https://github.com/honggzb/Study2016

  9. Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数)

    [转]Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题.我是在运维过程中要用到的.因此,今天给出Wind ...

  10. CSS外边距属性,深入理解margin

    margin See the Pen margin by wmui (@wmui) on CodePen. 该属性用于设置元素的外边距,外边距是透明的,默认值0.这是一个简写属性,属性值最多为4个,例 ...