温欣爸比

  • 主页
  • Alfred Workflow
  • 《Vim 练级手册》
  • 常用命令
  • 代码笔记
  • 合辑
  • 在线工具
所有文章 友链 关于我

温欣爸比

  • 主页
  • Alfred Workflow
  • 《Vim 练级手册》
  • 常用命令
  • 代码笔记
  • 合辑
  • 在线工具

Mysql 开始慢查询日志

2019-08-01

项目长期运行过程中,Mysql 慢查询的监控是必不可少的一步日常工作,今天来说下配置过程。

  • 配置
  • 分析工具

配置

先来查看默认慢查询日志开启状态

1
2
3
4
5
6
7
8
mysql> show variables like "%slow_query_log%";
+---------------------+--------------------------------------+
| Variable_name | Value |
+---------------------+--------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/1bcb14797cd4-slow.log |
+---------------------+--------------------------------------+
2 rows in set (0.01 sec)
  • slow_query_log 是否开启慢查询日志,默认关闭
  • slow_query_log_file 慢查询日志的默认位置,系统自动生成的文件名。自定义的日志名最好符合 *-slow.log 格式,后面会讲到原因。

因为慢查询日志本身比较耗性能,所以默认是关闭的,在需要的时候我们需要手动打开。

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

该命令可以全局开启该功能,但是如果 Mysql 服务重启则会还原默认值,想要持久化,需要修改配置文件,然后重启

1
$ vim /etc/mysql/my.cnf
1
2
3
4
5
[mysqld]
# 开启慢查询日志
slow_query_log=1
# 设置慢查询日志位置
slow_query_log_file=/var/lib/mysql/slow.log
1
$ sudo systemctl restart mysql

修改 slow_query_log_file 时需要注意,文件的目录位置必须已存在,否则会报错,慢查询日志功能自动关闭。

另外还一些其他的参数可以修改,方法跟上面的一样。

  • long_query_time 慢查询阈值,当查询时间多于设定的阈值时记录日志。默认 10 秒。
  • log_queries_not_using_indexes 未使用索引的查询也被记录到慢查询日志中(可选项)。
  • log_output 日志存储方式。log_output=’FILE’表示将日志存入文件,默认值是’FILE’。log_output=’TABLE’表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=’FILE,TABLE’。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件。

分析工具

Mysql 提供了慢查询日志的分析工具 mysqldumpslow,这要比自己查看日志文件要方便的多。

下面是几个常用的参数

  • -s 是表示按照何种方式排序
1
2
3
4
5
6
7
c: 访问计数
l: 锁定时间
r: 返回记录
t: 查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
  • -t 是top n的意思,即为返回前面多少条的数据
  • -g 后边可以写一个正则匹配模式,大小写不敏感的

更多的参数可以查看帮助文档 mysqldumpslow --help

举个例子,查看记录最多的 10 个 sql

1
2
$ mysqldumpslow -s r -t 10
Can't find '/var/lib/mysql/*-slow.log'

如果我们自定义了日志文件,并且格式比较随意,那默认会报找不到文件的错误。

如果你的日志文件已经自定义为其它格式,那也可以通过传入文件名的方式分析

1
$ mysqldumpslow -s r -t 10 /var/lib/mysql/some-name.log
  • The Slow Query Log
  • mysqldumpslow — Summarize Slow Query Log Files
最近更新
Alfred Workflow 命令行帮助工具
最近热读
Go 判断数组中是否包含某个 item
Vim 高级功能 vimgrep 全局搜索文件
办理北京工作居住证的一些细节
Go 语法错误:Non-declaration statement outside function body
Mac 电脑查看字体文件位置
扫码关注公众号,或搜索公众号“温欣爸比” 及时获取我的最新文章
赏

谢谢你请我喝咖啡

支付宝
微信
  • mysql
Docker 配置国内仓库
Ansible 在 Vagrant 中使用
  1. 1. 配置
  2. 2. 分析工具
© 2017 - 2022 温欣爸比 京ICP备15062634号 总访问量1358692次 访客数1116563人次 本文总阅读量504次
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链
  • 关于我

tag:

  • python
  • flask
  • javascript
  • docker
  • 工具
  • openresty
  • 微信
  • java
  • hexo
  • 杂谈
  • vim
  • git
  • mysql
  • http
  • linux
  • mac
  • tmux
  • ssh
  • 算法
  • 开发
  • node
  • 杂文
  • jinja2
  • maven
  • spring
  • 北京
  • 生活
  • springboot
  • react
  • shell
  • graphql
  • iterm
  • expect
  • nginx
  • sqlalchemy
  • html
  • electron
  • vagrant
  • elastic
  • 宝贝
  • ansible
  • css
  • jquery
  • go
  • markdown
  • awk
  • redis
  • leetcode
  • zsh
  • 漫威
  • ssr
  • android
  • ffmpeg
  • chrome
  • vmware
  • youtube
  • windows
  • jupyter
  • excel
  • jq
  • Mac
  • Homebrew
  • mongo
  • py2
  • HomeBrew
  • movie
  • nodejs

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • Guru99
每天看书
每天背单词
每天一篇
写写代码
听听周杰伦
爱爱老婆