如何定位 MySQL 慢查询

有时用户在开始对其数据发出查询时会遇到问题。在一些数据库系统(包括 MySQL)中,查询语句必须以分号(;)结尾才能完成查询,就像下面的例子一样:

SHOW * FROM table_name;

如果你在查询的末尾没有包含分号,提示符会继续显示在新的一行,直到你输入分号并按下 ENTER 键来完成查询。

一些用户可能会发现他们的查询非常慢。找出哪个查询语句导致了减速的一种方法是启用并查看 MySQL 的慢查询日志。要做到这一点,打开你的 mysqld.cnf 文件,该文件用于配置 MySQL 服务器的选项。这个文件通常存储在 /etc/mysql/mysql.conf.d/ 目录中:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

浏览文件,直到你看到下面的行:

. . .
#slow_query_log         = 1
#slow_query_log_file    = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
. . .

这些被注释掉的指令提供了 MySQL 慢查询日志的默认配置选项。具体来说,这是它们各自的作用:

  • slow-query-log:将其设置为 1 可以启用慢查询日志。
  • slow-query-log-file:这定义了 MySQL 将记录任何慢查询的文件。在这种情况下,它指向 /var/log/mysql-slow.log 文件。
  • long_query_time:通过将这个指令设置为 2,它配置 MySQL 记录任何需要超过 2 秒才能完成的查询。
  • log_queries_not_using_indexes:这告诉 MySQL 也记录任何在 /var/log/mysql-slow.log 文件中运行而没有使用索引的查询。这个设置并不是慢查询日志功能的必需条件,但它有助于发现低效的查询。

通过去掉每行开头的井号(#)来取消注释这些行。现在这一部分看起来是这样的:

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
. . .

启用慢查询日志后,保存并关闭文件。然后重新启动 MySQL 服务:

sudo systemctl restart mysql

有了这些设置,你可以通过查看慢查询日志找到有问题的查询语句。你可以使用 less 来这样做:

sudo less /var/log/mysql_slow.log

一旦找出导致减速的查询,你可能会发现我们的指南《如何在 VPS 上优化 MySQL 和 MariaDB 中的查询和表》对于优化它们会很有帮助。

此外,MySQL 包括 EXPLAIN 语句,它提供了关于 MySQL 如何执行查询的信息。官方 MySQL 文档中的这个页面提供了如何使用 EXPLAIN 来突出显示低效查询的见解。

如果需要理解基本的查询结构,请参阅我们的《MySQL 查询入门》。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张无忌打怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值