手把手教你定位线上MySQL慢查询问题,包教包会

1. 慢查询日志的作用

默认情况下不启用慢速日志。建议手动启用,以便我们更轻松地定位在线问题。

[En]

Slow log is not enabled by default. It is recommended to enable it manually to make it easier for us to locate online problems.

执行时间超过阈值的SQL会被写入到慢查询日志当中,这样可以帮助我们记录执行时间过长的SQL语句,定位线上慢SQL问题,方便我们进行SQL性能调优。

2. 慢查询日志的配置

2.1 查看是否开启了慢查询日志

show variables like 'slow_query_log';

手把手教你定位线上MySQL慢查询问题,包教包会

默认是OFF,不开启,可以手动开启。

2.2 开启慢查询日志

一种方法是可以使用MySQL命令开启:

set global slow_query_log=1;

手把手教你定位线上MySQL慢查询问题,包教包会

另一种方法是修改MySQL配置文件,重新MySQL服务后,开启。

修改配置文件my.cnf,加入下面一行命令
slow_query_log = ON

2.3 设置慢查询日志的阈值

慢查询日志的阈值默认是10,单位是秒。

对于线上服务来说,10秒太长了,我们可以手动修改。

手把手教你定位线上MySQL慢查询问题,包教包会

一种是通过MySQL命令修改,比如修改为1秒:

set long_query_time=1;

手把手教你定位线上MySQL慢查询问题,包教包会

另一种方法是修改MySQL配置文件,重新MySQL服务后,开启。

修改配置文件my.cnf,加入下面一行命令
long_query_time = 1

2.4 修改慢查询日志位置

使用MySQL命令查看慢查询日志位置:

show variables like '%slow_query_log_file%';

手把手教你定位线上MySQL慢查询问题,包教包会

想要修改慢查询日志位置,可以修改MySQL配置文件,重新MySQL服务后,开启。

修改配置文件my.cnf,加入下面一行命令
slow_query_log_file = /usr/local/mysql/data/localhost_slow.log

2.5 记录更多慢查询SQL

默认情况下管理语句是不会被记录到慢查询日志中,管理语句包括ALTER TABLE、 ANALYZE TABLE、 CHECK TABLE、 CREATE INDEX、 DROP INDEX、 OPTIMIZE TABLE和 REPAIR TABLE等。

手把手教你定位线上MySQL慢查询问题,包教包会

管理语句也是非常重要的,如果想要被记录,可以通过MySQL命令修改:

set global log_slow_admin_statements=ON;

手把手教你定位线上MySQL慢查询问题,包教包会

默认情况下,不会记录不使用索引的语句。

[En]

By default, statements that do not use an index will not be recorded.

真是个骗局!不经意间掉进坑里,不记录不用索引的语句,为什么查询日志慢?

[En]

What a trick! Inadvertently fell into the pit, do not record the statements that do not use the index, why slow query the log?

手把手教你定位线上MySQL慢查询问题,包教包会

如果要记录不使用索引的语句,可以使用以下命令修改它们:

[En]

If you want to record statements that do not use indexes, you can modify them with the command:

set global log_queries_not_using_indexes=ON;

手把手教你定位线上MySQL慢查询问题,包教包会

3. 慢查询日志的使用

手动造一条慢SQL,测试一下效果,user表中有100万表数据:

select * from user;

然后查看慢查询日志文件的内容:

[En]

Then take a look at the contents of the slow query log file:

cat /usr/local/mysql/data/localhost_slow.log

手把手教你定位线上MySQL慢查询问题,包教包会

SQL语句和执行时间都被记录了。

4. 分析慢查询日志

有时候慢查询日志较多,手动查看起来并不是很方便,好在MySQL提供了分析慢查询日志的工具 mysqldumpslow

常用参数有

-s: 表示按何种方式排序:
  c: 访问次数
  l: 锁定时间
  r: 返回记录
  t: 查询时间
  al: 平均锁定时间
  ar: 平均返回记录数
  at: 平均查询时间
-t: 返回前面多少条的数据;

4.1 查询返回结果最多的10条SQL:

mysqldumpslow -s r -t 10 /usr/local/mysql/data/localhost_slow.log

手把手教你定位线上MySQL慢查询问题,包教包会

4.2 查询耗时最长的10条SQL:

mysqldumpslow -s t -t 10 /usr/local/mysql/data/localhost_slow.log

手把手教你定位线上MySQL慢查询问题,包教包会

文章持续更新,可以微信搜一搜「 一灯架构 」第一时间阅读更多技术干货。

Original: https://www.cnblogs.com/yidengjiagou/p/16553559.html
Author: 一灯架构
Title: 手把手教你定位线上MySQL慢查询问题,包教包会

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505091/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring 学习笔记

    Spring 框架是由于软件开发的复杂性而创建的。Spring 使用的是基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。 Spring 一. Spring Fra…

    数据库 2023年6月11日
    0126
  • 5个必知的高级SQL函数

    5个必知的高级SQL函数 SQL是关系数据库管理的标准语言,用于与数据库通信。它广泛用于存储、检索和操作数据库中存储的数据。SQL不区分大小写。用户可以访问存储在关系数据库管理系统…

    数据库 2023年6月11日
    0152
  • 项目管理构建工具——Maven(基础篇)

    项目管理构建工具——Maven(基础篇) 在前面的内容中我们学习了JDBC并且接触到了jar包概念 在后面我们的实际开发中会接触到很多jar包,jar包的导入需要到互联网上进行就会…

    数据库 2023年6月14日
    0111
  • Linux–>磁盘分区,挂载

    对于IDE硬盘,驱动器标识符为 “hdx~”,其中”hd”表明分区所在设备类型,这里是指IDE硬盘 “x”为…

    数据库 2023年6月14日
    0140
  • 记一次血淋淋的MySQL崩溃修复案例

    摘要:今天给大家带来一篇MySQL数据库崩溃的修复案例 问题描述 研究MySQL源代码,调试并压测MySQL源代码时,MySQL崩溃了!问题是它竟然崩溃了!而且还损坏了InnoDB…

    数据库 2023年5月24日
    0168
  • jar工具常用命令

    参考链接:https://www.ibm.com/developerworks/cn/java/j-jar/index.html Original: https://www.cnb…

    数据库 2023年6月9日
    0122
  • python中的cls和self区别

    self:Always use self for the first argument to instance methods self是作为类进行实例化传递的第一个参数,也就是我…

    数据库 2023年6月6日
    093
  • 用相对定位实现简单的图片边框阴影效果

    实现阴影效果方法有很多,一般复杂一点的外发光式的阴影都使用png作为背景图片来实现阴影,今天做的这个比较简单,阴影是纯色的,所以可以直接使用背景颜色,图片的位移一下就能使图片产生阴…

    数据库 2023年6月11日
    0121
  • centos系统下mysql的配置

    配置文件路径 /etc/my.cnf Hole yor life get everything if you never give up. Original: https://ww…

    数据库 2023年6月9日
    0109
  • mysql进阶

    1.二进制格式mysql安装 下载二进制格式的mysql软件包 [root@localhost ~]# cd /usr/src/ [root@localhost src]# wge…

    数据库 2023年5月24日
    0157
  • 符合标准的正常工作的对联广告(漂浮广告JS代码)

    符合标准的正常工作的对联广告JS代码(漂浮广告)。DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN…

    数据库 2023年6月11日
    0105
  • Linux–>软件包管理

    rpm用于互联网下载包的打包和安装工具,它包含在某些Linux分发版本中。 它生成具有.RPM扩展名的文件。 RPM是RedHat Package Manager(RedHat软件…

    数据库 2023年6月14日
    0144
  • 一个属性同时使用Autowired和Resource注解会发生什么?

    首发于公众号:BiggerBoy右侧图片wx扫码关注有惊喜欢迎关注,查看更多技术文章 如题,如果在同一个属性上使用@Autowired注解注入bean1,然后使用@Resource…

    数据库 2023年6月11日
    0131
  • go 切片的扩容

    slice type slice struct { array unsafe.Pointer len int cap int } func makeslice(et *_type,…

    数据库 2023年6月9日
    099
  • 如何使用Intellij IDEA工具导入SVN项目

    步骤一:选择VCS 打开Intellij IDEA开发工具,在导航栏中选择 VCS栏位,如图。 步骤二:创建SVN地址 执行步骤二,可以看见打开了一个SVN Repositorie…

    数据库 2023年6月6日
    0127
  • 如何识别 SQL Server 的版本

    本文介绍如何识别当前的Microsoft SQL Server 版本号和相应的产品或Service Pack 级别。同时介绍如何识别正在使用的SQL Server 具体版本。 如何…

    数据库 2023年6月11日
    0103
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球