如何开启MySQL慢查询日志

如何开启MySQL慢查询日志摘要:前言数据库日志记录了用户对数据库的各种操作及数据库发生的各种事件。能帮助数据库管理员追踪、分析问题。MySQL提供了错误日志、二进制日志、查询日志、慢查询日志。MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值(long_query_time,单位:秒)的SQL语句。前言数据库日志记录了用户对数据库的各种操作及数据库发生的各种事件。能帮助数据…

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

Jetbrains全系列IDE稳定放心使用

摘要: 前言 数据库日志记录了用户对数据库的各种操作及数据库发生的各种事件。能帮助数据库管理员追踪、分析问题。MySQL提供了错误日志、二进制日志、查询日志、慢查询日志。 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值(long_query_time,单位:秒)的SQL语句。

前言

数据库日志记录了用户对数据库的各种操作及数据库发生的各种事件。能帮助数据库管理员追踪、分析问题。MySQL提供了错误日志、二进制日志、查询日志、慢查询日志。

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值(long_query_time,单位:秒)的SQL语句。默认情况下,MySQL不启动慢查询日志。本文简单介绍如何开启慢查询日志,如何用mysqldumpslow分析慢查询。

开启慢查询日志

修改my.cnf

在配置文件my.cnf(一般为/etc/my.cnf)中的[mysqld] section增加如下参数。

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow-query.log   # 若没有指定,默认名字为hostname_slow.log
long_query_time = 1

log_queries_not_using_indexes = 1

其中,

  • slow_query_log = 1

    • 表示开启慢查询,0表示关闭
  • slow_query_log_file

    • 指定慢查询日志路径
    • 需要MySQL对该路径有写权限
  • long_query_time = 1

    • 表示查询时间>=1秒才记录日志
    • 默认10s
  • log_queries_not_using_indexes = 1

    • 表明记录没有使用索引的 SQL 语句

重启MySQL服务

# 重启
$ sudo service mysqld restart

# 重启后进程如下

root     22373  0.0  0.0  66064  1424 pts/3    S    16:59   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
mysql    22721  0.3  0.5 890996 467040 pts/3   Sl   16:59   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/lib/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

重启MySQL后会看到/var/lib/mysql/slow-query.log文件。

检查参数

通过如下命令可以检查上述参数配置情况。

mysql> show variables like 'slow_query%';
+---------------------+-------------------------------+
| Variable_name | Value                         | +---------------------+-------------------------------+ | slow_query_log      | ON |
| slow_query_log_file | /var/lib/mysql/slow-query.log | +---------------------+-------------------------------+ 2 rows in set (0.00 sec) mysql> show variables like 'long_query_time'; +-----------------+----------+ | Variable_name   | Value |
+-----------------+----------+
| long_query_time | 1.000000 | +-----------------+----------+ 1 row in set (0.00 sec)

测试

慢查询

制造慢查询并执行。如下。

mysql> select sleep(1);
+----------+
| sleep(1) |
+----------+
|        0 |
+----------+
1 row in set (1.00 sec)

慢查询日志

打开慢查询日志文件。可以看到上述慢查询的SQL语句被记录到日志中。

# Time: 180620 17:13:06
# User@Host: apsara[apsara] @ dc1487859883577.et2sqa [11.239.51.96] Id: 3
# Query_time: 1.000246 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1529485986;
select sleep(1);

慢查询分析工具

mysqldumpslow

mysqldumpslow是MySQL自带的分析慢查询的工具。该工具是Perl脚本。

常用参数如下。

-s:排序方式,值如下
    c:查询次数
    t:查询时间
    l:锁定时间
    r:返回记录
    ac:平均查询次数
    al:平均锁定时间
    ar:平均返回记录书
    at:平均查询时间
-t:top N查询
-g:正则表达式

例子

  • 我们执行了多次类似如下的查询。
select * from db_user where name like 'zb%';
select * from db_user where name like 'aaa%';
select * from db_user where name like 'bc%';
...
  • 获取访问次数最多的5个SQL语句
$ mysqldumpslow -s c -t 5 /var/lib/mysql/slow-query.log

Reading mysql slow query log from /var/lib/mysql/slow-query.log
Count: 15  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), apsara[apsara]@dc1487859883577.et2sqa
  # Query_time: N.N  Lock_time: N.N Rows_sent: N  Rows_examined: N
  SET timestamp=N;
  select * from db_user where name like 'S'

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), apsara[apsara]@dc1487859883577.et2sqa
  # Query_time: N.N  Lock_time: N.N Rows_sent: N  Rows_examined: N
  use test;
  SET timestamp=N;
  select * from db_user where name like 'S'
  • 按照时间排的top 5个SQL语句
$ mysqldumpslow -s t -t 5 /var/lib/mysql/slow-query.log
  • 按照时间排序且含有’like’的top 5个SQL语句
$ mysqldumpslow -s t -t 3 -g "like" /var/lib/mysql/slow-query.log

小结

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

原文链接

本文为云栖社区原创内容,未经允许不得转载。

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

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

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


相关推荐

  • JAVA卸载与安装(Linux)

    JAVA卸载与安装(Linux)检查JAVA版本java-version检查路径whichjava删除整个路径rm-rf路径检查java是否还存在vi命令编辑文件profilevi/etc/profile(未做,没有配置环境变量)安装:上传所需的JAVA安装包在所需位置创建目录(这里是/…

    2022年5月12日
    62
  • cheerio获取outerHTML

    cheerio获取outerHTMLcheerio作为node中jquery的替代品,拥有与jquery相似的api,甚至连详细文档的地址都指向api.jquery.com。但是由于执行环境的关系,并没有完全继承jquery中的方法。对于这样的页面<html> <head></head> <body> <ulid=”fruits”> <li>…

    2022年6月22日
    26
  • java获取当前时间到毫秒_java获取当前时间毫秒

    java获取当前时间到毫秒_java获取当前时间毫秒()为获取当前系统时间,也可使用当前时间戳获取时间戳三种方法执行效率比较:importjava.util.Calendar;importjava.util.Date;publicclassTimeTest{……java获得系统时间转换成字符串关键字:java有时候经常用到JAVA时间转换如字符串转换成时间,时间转换成字符串1.long字符串转换成…

    2025年9月19日
    6
  • 大数据告诉你中老年人上网爱干什么[通俗易懂]

    大数据告诉你中老年人上网爱干什么[通俗易懂]中老年人最爱用微信,最喜欢看心灵鸡汤,最易被“免费领红包”骗……昨天,中国社科院国情调查与大数据研究中心和腾讯社会研究中心联合发布《中老年互联网生活研究报告》,报告对50岁以上人群的互联网生活进行了多方面解读。数据显示,中老年人不仅将微信作为即时通讯工具,还将其视作表达情感和维系社交的互动平台,如在微信里发表情和图片(81.8%)或小视频(68.9%),在朋友圈与他人互动(81.6%),接收或发微…

    2022年10月5日
    2
  • 指纹解锁特效怎么做?2022最简单的教程来咯「建议收藏」

    指纹解锁特效怎么做?2022最简单的教程来咯「建议收藏」在视频模板的制作过程中我们是有机会用到手机解锁的动效的,AE怎么制作手机解锁动效呢?今天就来跟大家分享一波BeardChicken大神制作的极具炫酷以及科技感的手机解AE制作手机解锁动效教程1.在绘图软件中画好背景、指纹图标以及指纹上方的圆圈,将其导入到AE中,指纹和圆圈生成合成,然后将指纹解锁的光效也导入到AE中,并调整其位置缩放后调整到指纹上层;2.打开[展开“转换控制”窗格]和[展开“入点”“出点”“持续时间”“伸缩”窗格],降低[持续时间],勾选[剪切蒙版];.

    2022年8月10日
    6
  • 流程图的绘图规范_流程图绘制的基本规则

    流程图的绘图规范_流程图绘制的基本规则画了多年的流程图,你真的画规范了吗?|人人都是产品经理流程有哪些作用?我们为什么要画流程图呢?正确的画流程图规范是什么?流程图是一个很强大的工具,在我们的日常工作中经常会使用到。但我们也发现,有时看到别人流程图的画法、规范都不太一样,这是为什么呢?难道流程图就没有统一的标准或规范吗?基于这个疑问,我出于好奇认http://www.woshipm.com/zhichang/2329530.html以上为笔记来源出!一、流程图的符号要求 有几个重要且常用的符号:…

    2025年7月15日
    3

发表回复

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

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