mysql慢查询配置和测试

在系统的优化过程中,对SQL语句的优化更是非常重要的一部分。系统上线后发现了许多对性能有影响的SQL。本文主要是讲解利用MySQL的一些状态分析并且记录影响数据库性能的语句

MySQL状态查询

show status;//MySQL状态查询
分析其中相对好理解的几点
show status like 'com_insert';---显示执行了多少次插入操作
show status like 'com_update';---显示执行了多少次更新
show status like  'com_delete';---显示执行了多少次删除
show status like 'com_select';---显示执行多少次查询
show status like 'uptime';---显示mysql数据库启动多长时间,如果时间很长,数据库表的存储引擎是MyISAM,这个时候要注意碎片整理。


显示慢查询
显示慢查询需要先开始慢查询,MySQL中慢查询默认为关闭状态,查询慢SQL是否开启

show variables like 'slow_query_log';默认为OFF状态


查询记录没有使用索引的查询是否开启(默认没有开启)

show variables like 'log_queries_not_using_indexes'


查询时间慢查询的sql语句的时长(默认10秒)

show variables like 'long_query_time'; 显示慢查询的时间,默认情况下是10秒一个慢查询


开启慢查询后查询慢查询的条数

show status like 'slow_queries';显示慢查询的条数


查看记录慢查询的sql的位置

show variables like 'slow_query_log_file';#为慢查询文件的位置


如何修改配置默认配置?
方式一(需要重启mysql服务,但是配置可以持续保留)

#开启慢查询日志记录  
slow_query_log=1  
#查询时间超过0.1秒的sql语句会被记录  
long_query_time=0.1  
#记录没有使用索引的查询  
log_queries_not_using_indexes=1  
#记录慢查询日志的文件地址  
slow-query-log-file=/var/lib/mysql/localhost-slow.log

测试:

select sleep(5);

关于long_query_time设置

通常我们设置long_query_time的值为2,表示查询SQL语句超过两秒的就记录,通常2秒就够了,默认是10秒。然而,对于许多WEB程序来说,2秒的查询还是太长了。的确在许多站点中,一个SQL语句超过1秒的执行时间都算慢的了。

mysql5.1.21以后才提供更细粒度的long_query_time设定,之前的版本只能以秒做单位。

查看日志

[root@lizhong tmp]# tail -f /tmp/mysql_slow.log

Time: 120815 23:22:11

User@Host: root[root] @ localhost []

Query_time: 9.869362 Lock_time: 0.000035 Rows_sent: 1 Rows_examined: 6261774

SET timestamp=1294388531;

select count(*) from blog;

第一行:执行时间

第二行:执行用户

第三行(重要):

Query_time SQL执行的时间,越长则越慢

Lock_time 在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间

Rows_sent 查询返回的行数

Rows_examined 查询检查的行数

最后

1、日志不能说明一切问题,知识表象,可能跟锁表、系统繁忙的偶发性有关,当然,如果某条SQL语句经常查询慢那基本可以判断是可以再次优化的。

2、不要开启log-queries-not-using-indexes没有索引查询记录功能,这个功能实际用处不大。就是记录SQL查询的时候,没有索引的通通记录。虽然索引对查询的速度有影响,但要看数据量大小。因为开启了这个功能以后,select * from tab这样的查询也会被记录在日志中,很快日志文件就会被垃圾信息给充满,从而影响主要的查询慢日志记录的查看。

3、MySQL自带了mysqldumpslow工具用来分析slow query日志,或者其它工具也可以,通过工具配合可以更好的分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值