当前位置:安徽it生活网 >> 数码 >> 文章正文

老板:谁再制造这种SQL慢查询事故 就走人!

发布于:2020-11-10 被浏览:3096次

作者介绍

陈哈哈,, MySQL社区非著名贡献者,擅长白嫖知识;陪伴MySQL五年,致力于高性能SQL和事务锁优化的研究;路漫漫其修远兮,希望你通过自己的分享,少踩几个坑。我是陈哈哈,一个爱笑的程序员。

查询速度慢会有什么后果?之前一直觉得返回数据会比较慢,用户体验会变差。其实远不止如此。我经历过几次在线事故,其中一次是由一个缓慢的SQL查询引起的。

那一次,一个SQL查询花费了2-3秒,并且错过了索引,导致了一个全表扫描。因为是高频查询,所以很快填满了DB线程池,导致大量查询请求堆积。数据库服务器的CPU长时间100%占用,大量请求超时.

终于系统崩溃了,老板出现了!所以,如果团队对慢查询不够重视,风险很大。

事故发生后,我们老板说:谁的代码又发生类似事故了,开发和部门领导一起走了,吓得很多领导慌了,赶紧招了两个DBA同事。

慢查询,顾名思义,执行慢查询。有多慢?超过long_query_time参数设置的时间阈值(默认值为10s)被认为是缓慢的,需要优化。慢速查询记录在慢速查询日志中。

默认情况下,慢速查询日志不会打开。如果需要优化SQL语句,可以开启这个功能,可以让你很容易的知道哪些语句需要优化(想想一个SQL需要10秒就很可怕了)。好了,我们来看看如何处理慢查询。


慢查询配置


开启慢查询

MySQL支持以下列方式打开慢速查询:

输入命令打开慢速查询(临时),MySQL服务重启后会自动关闭;

打开my.cnf (my.cnf(Windows)的系统文件,修改配置文件就是持久打开慢查询的方式。

方法1:通过命令打开慢速查询

第一步:查询slow_query_log,查看是否打开了slow查询日志:

显示变量,如“% slow _ query _ log %”;

mysql显示像“%slow_query_log%”这样的变量;

- -

|变量名|值|

- -

|慢速_查询_日志|关闭|

| slow _ query _ log _ file |/var/lib/MySQL/localhost-slow . log |

- -

2行一组(0.01秒)

第二步:打开慢速查询命令:

设置全局slow _ query _ log=' ON

第三步:指定记录慢速查询日志的SQL执行时间的阈值(long_query_time单位:秒,默认为10秒)。

如下,我将其设置为1秒,执行时间超过1秒的SQL将被记录在慢速查询日志中:

设置global long _ query _ time=1;

第四步:查询“慢速查询日志文件的存储位置”。

显示变量,如“% slow _ query _ log _ file %”;

mysql显示像“%slow_query_log_file%”这样的变量;

- -

|变量名|值|

- -

| slow _ query _ log _ file |/var/lib/MySQL/localhost-slow . log |

- -

1行一组(0.01秒)

Slow_query_log_file指

标签: 索引 条件 数据