您的位置:首页 > 数据库 > MySQL

MySQL慢查询日志与磁盘IO

2017-05-24 17:40 302 查看
分析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;
1
2
3
4
5
6
7
1
2
3
4
5
6
7
分析:

查询用户为: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相关:

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