MySQL慢查询日志与磁盘IO

分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。

对于有效率问题的SQL语句(“慢查询”),MySQL通过慢查询日志进行监控。


SHOW VARIABLES LIKE ‘slow_query_log’;

查看慢查询日志是否开启:

这里写图片描述


SHOW VARIABLES LIKE ‘%log%’;

查看关于日志的所有属性:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


SET GLOBAL log_queries_not_using_indexes = ON;

设置全局变量,没用到索引的查询也要记录:

这里写图片描述


SHOW VARIABLES LIKE ‘long_query_time’;

查看超过多长时间的查询会被记录到慢查询日志中:

这里写图片描述


SET GLOBAL slow_query_log = ON;

开启慢查询日志:

这里写图片描述


SET GLOBAL long_query_time = 0;

设置慢查询日志记录时间为0秒,即全部查询都记录:

这里写图片描述


SHOW VARIABLES LIKE ‘slow%’;

查看慢查询日志所在位置:

这里写图片描述


查看全局变量是否设置成功(新开一个客户端):

这里写图片描述


查看慢查询日志内容:

# Time: 160715 15:00:30
# User@Host: root[root] @ localhost [127.0.0.1]  Id:     1
# Query_time: 0.000000  Lock_time: 0.000000 Rows_sent: 109  Rows_examined: 109
use sakila;
SET timestamp=1468566030;
SELECT * FROM country;

分析:

查询用户为:root[root] @ localhost [127.0.0.1](User@Host)
查询花费时间:0.000000秒(Query_time)
锁定时间:0.000000秒(Lock_time)
返回记录行数:109(Rows_sent)
检索行数:109(Rows_examined)
查询语句:SELECT * FROM country;


总结:

慢查询日志实时记录查询的相关信息,有利于及时发现开发过程中效率低下的SQL语句,及时进行优化!


磁盘IO相关:

  1. Rows_examined代表检索的行数,其值一定程度上与磁盘的IO程度有关。IO即读写。试想,如果某个SQL操作需要(联合)查询的行数Rows_examined很大很大(从磁盘中读出数据至MySQL服务器内存中进行SQL条件判断),意味着磁盘的读出操作比较繁忙,IO程度大。
  2. 若磁盘IO过大,很容易形成IO阻塞,导致系统瓶颈。数据库文件存储在硬盘中,硬盘的读写速度远远落后于CPU与内存(硬盘是磁盘的一种,磁盘还包括软盘,磁盘是通过磁性进行读写功能的设备,断电后保存的文件不会丢失。内存也可以储存信息,但存储的载体和磁盘不同,断电后就不能保存数据。
  3. 内存是电脑的数据存储设备之一,其特点为容量较小,但数据传送速度较快,用以弥补硬盘虽然容量大但传送速度慢的缺点。在电脑中,内存被架设在硬盘和高速缓存器(容量比内存更小同时速度比内存更快的存储器,架设在内存和CPU之间)之间,从而可以充分发挥CPU的运算能力,不至于使CPU的高速运算能力因数据提取速度过慢而浪费,所以,电脑的运行速度是由CPU,高速缓存器以及内存等存储设备共同决定的。
  4. 硬盘是电脑中用来存放暂时不用的信息(包括系统文件)的数据存储设备,特点是存储容量大,但数据传送速度慢。硬盘上的信息永远是暂时不用的,如果用,要先装入内存!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值