MySQL 慢查询日志

作者: 不_悔 | 来源:发表于2020-03-21 08:03 被阅读0次

作者:闲不住的人

MySQL 慢查询日志的作用

在实际工作中,每个业务系统都离不开数据库,一个 简单的 SQL 语句却对性能有着极大的影响。SQL 优化也是作为一名运维工程师应该掌握的技能之一。通过慢查询日志,可以帮我们记录下那些执行时间大于我们所设定阈值的 SQL 语句。

配置 MySQL 慢查询日志

要查看当前 MySQL 实例是否已经开启了慢查询日志使用 show global variables like '%slow%';

查看mysql慢查询日志是否开启

默认情况下载安装完 MySQL 之后是没有启用慢查询日志的,要启用 MySQL 慢查询日志有两种方式,第一种是通过修改 my.cnf 配置文件,也是推荐的方式,不用担心重启实例后配置失效。第二种是在 MySQL 命令行通过 set global 方式设定,但是重启 MySQL 实例后会失效。

通过命令行开启 MySQL 慢查询日志

mysql> set global slow_query_log=ON; 

注意:使用 set global 设定启用慢查询日志,只在新的 MySQL 会话生效。

修改配置文件开启 MySQL 慢查询日志

在修改配置文件之前,先来了解几个参数的作用:

参数 作用
slow_query_log 是否开启慢查询日志
slow_query_log_file 配置慢查询日志文件名
long_query_time 设定慢查询阈值,运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
min_examined_row_limit 扫描记录少于该值的 SQL 不记录到慢查询日志
log_queries_not_using_indexes 将没有使用索引的 SQL 记录到慢查询日志
log_throttle_queries_not_using_indexes 限制每分钟记录没有使用索引 SQL 语句的次数
log_slow_admin_statements 记录管理操作,如 ALTER/ANALYZE TABLE
log_slow_slave_statements 在从服务器上开启慢查询日志
log_timestamps 写入时区信息
log_output={FILE|TABLE|NONE} 慢查询日志格式
expire_logs_days=90

了解以上参数的作用之后我们就可以来修改 my.cnf 配置文件了,这些参数建议在 MySQL 安装之后就添加上。

[mysqld]
########log settings########
log_error = error.log
slow_query_log = 1
slow_query_log_file = slow.log
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_throttle_queries_not_using_indexes = 10
expire_logs_days = 90
long_query_time = 2
min_examined_row_limit = 100

修改一配置文件然后重启 mysql 服务就完成了。接下来执行一条 SQL 语句检查慢查询日志能否生效。

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

上面的 select sleep(4) 会睡眠 4 秒然后执行,接下查看 slow.log 日志中是否有记录存在。

查看mysql慢查询日志

mysqldumpslow 工具

mysqldumpslow 是 MySQL 自带的一个工具,专门用来查看慢查询日志。当你的 MySQL 慢查询过大时使用 vim 等编辑器打开非常的不便于查看,而且当同一条慢 SQL 反复被执行时会记录大量重复的记录,使用 mysqldumpslow 工具,可以帮我们将那些重复记录合并显示。

Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

-s sort_type

如何对输出进行排序。的值 sort_type应从以下列表中选择:

t,at:按查询时间或平均查询时间排序

l,al:按锁定时间或平均锁定时间排序

r,ar:按已发送的行或已发送的平均行进行排序

c:按计数排序

-r 颠倒排序顺序;
mysqldumpslow执行结果

在上面执行结果中给出了如下信息:

  • 出现次数(Count)
  • 执行最长时间(Time)
  • 累计总耗费时间(Time)
  • 等待锁的时间(Lock)
  • 发送给客户端的行总数(Rows)
  • 扫描的行总数(Rows)
  • 用户以及 SQL 语句本身(抽象了一下格式,比如 sleep(4),用 sleep(N) 表示)
微信搜一搜

阅读原文

相关文章

  • Mysql 慢查询日志

    Mysql 慢查询日志 慢查询日志 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中...

  • MySQL慢查询日志总结

    MySQL慢查询日志总结 慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MyS...

  • MySQL慢查询日志如何开启以及分析

    1、MySQL慢查询日志是什么 (1)MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录MySQL中...

  • 慢查询日志

    1、慢查询日志介绍 慢查询日志是什么? 1.MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在My...

  • mysql调优及常用命令

    mysql常用命令 慢查询日志 mysqlddumpslow(查看慢查询日志) mysql5.7(虚拟列) mys...

  • 开启MySQL慢查询日志

    查询慢日志开关是否开启 打开慢查询日志开关 再次查询,发现开关打开了 查询mysql安装路径 慢查询日志默认是放在...

  • mysql 开启慢查询及其用mysqldumpslow做日志分析

    mysql 开启慢查询 mysql慢查询日志是mysql提供的一种日志记录,它是用来记录在mysql中相应时间超过...

  • MySQL之binlog日志、undo日志、redo日志

    一、MySQL常用的几种日志 MySQL主要包含以下几种日志: 错误日志 查询日志 慢查询日志 事务日志 [und...

  • mysql-慢查询日志

    1、什么是慢查询日志 mysql慢查询日志是mysql提供的一种日志记录,它用来记录在MySQL中响应时间超过...

  • Mysql-日志-慢查询日志

    本篇文章主要记述Mysql慢查询的学习过程,内容目录如下:慢查询日志是什么?慢查询日志开启和配置慢查询日志相关操作...

网友评论

    本文标题:MySQL 慢查询日志

    本文链接:https://www.haomeiwen.com/subject/lzweyhtx.html