加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL数据库深入mysql慢查询设置的详解

发布时间:2020-12-12 02:35:22 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL数据库深入mysql慢查询设置的详解》要点: 本文介绍了MYSQL数据库深入mysql慢查询设置的详解,希望对您有用。如果有疑问,可以联系我们。 在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会

《MYSQL数据库深入mysql慢查询设置的详解》要点:
本文介绍了MYSQL数据库深入mysql慢查询设置的详解,希望对您有用。如果有疑问,可以联系我们。

在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比拟长的SQL语句找出呢?MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!那么如何应用慢查询呢?MYSQL必读

1.开启MySQL的慢查询日志功能
默认情况下,MySQL是不会记录超过必定执行时间的SQL语句的.要开启这个功能,我们需要修改MySQL的配置文件,windows下修改my.ini,Linux下修改my.cnf文件,在[mysqld]最后增加如下命令:
MYSQL必读

代码如下:
slow_query_log
long_query_time = 1

2.测试慢查询日志功能
(1)进入MySql控制台,执行如下语句:
代码如下:
select sleep(2);

mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
|??????? 0 |
+----------+
1 row in set (2.12 sec)
(2)查看慢查询日志文件think-slow.log,在文件最后发现:
代码如下:
# Time: 121120 20:06:23
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 2.104120? Lock_time: 0.000000 Rows_sent: 1? Rows_examined: 0
SET timestamp=1353413183;
select sleep(2);

3.解释:
(1)slow_query_log 这句是开启记录慢查询功能,slow_query_log=0关闭;slow_query_log=1开启(这个1可以不写)

(2)long_query_time = 1 这句是记录超过1秒的SQL执行语句MYSQL必读

(3)那么这个日志文件存放在什么地方呢?
默认是放在mysql的data目录,并且文件名为host_name-slow.log即 主机名-slow.log,好比在笔者的开发机上就是THINK-slow.log(因为偶用的Thinkpad,呵呵)MYSQL必读

(4)如果日志文件不想放在data目录,我们可以通过如下配置指定存放的目录及日志文件名:
slow_query_log_file=file_name
其中file_name便是你的存放日志的目录和文件名,在这里注意有的资料上可能是log-slow-queries=file_name,这个在mysql5.5版已经过时!MYSQL必读

4.如何记录低于1s的慢查询记录呢?
MySQL5.21版以前long_query_time 参数的单位是秒,默认值是10.这相当于说最低只能记录执行时间超过 1 秒的查询,怎么记录查询时间超过100毫秒的SQL语句记录呢?在mysql5.21+后版本支持毫秒记录
(1)进入MySql控制台,运行如下sql语句:
MYSQL必读

代码如下:
set global long_query_time=0.1

该句是设置记录慢查询超过时间100ms的SQL,记住要重启mysql能力生效!
(2)测试
进入mysql控制台,执行如下sql语句:
代码如下:
select sleep(0.5);

查看慢查询日志文件,我们看到最后添加的新信息:
代码如下:
# Time: 121120 20:42:06
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.500028? Lock_time: 0.000000 Rows_sent: 1? Rows_examined: 0
SET timestamp=1353415326;
select sleep(0.5);

欢迎参与《MYSQL数据库深入mysql慢查询设置的详解》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读