mysql慢查询

开启慢查询对性能有影响,有影响但不是非常大。当发现性能问题时,可以开启一定时间的慢查询,如3天或一周。

开启慢查询,修改配置文件:

slow_query_log=1;

long_query_time=2;

为了能作用在所有连接上,可以修改配置文件后,写个批处理(右键属性改为以管理员身份运行),加入到系统的定时任务中,到凌晨自动重启即可。

net stop mysql

net start mysql

查看是否开启,以及慢查询日志的名字:

show global VARIABLES like "%slow_query_log%";

mysql慢查询

查看慢查询判定时间:

show global variables like "%long_query_time%";

mysql慢查询

查看数据目录:

show global VARIABLES like ‘datadir‘;

mysql慢查询

 开启慢查询后,进行慢查询,生成的慢查询日志默认存在于数据目录中。

文件名:slow_query_log_file

是否开启:slow_query_log

时间限制(秒):long_query_time

数据目录变量:datadir,慢查询生成的日志文件默认是在这个数据目录中

得出的慢查询日志文件中,lock_time(等待锁的时间)和query_time(执行时间)的关系:

  1. 后者的时间包含了前者。
  2. 真正的执行时间 = query_time – lock_time
  3. 而且仅当真正的执行时间query_time – lock_time >= long_query_time的时候,才会记录为慢查询。

慢查询格式:

mysql慢查询

* 第一行,SQL查询执行的时间

* 第二行,执行SQL查询的连接信息,用户和连接IP

* 第三行,记录了一些我们比较有用的信息,如下解析

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

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

    Rows_sent,查询返回的行数

    Rows_examined,查询检查的行数,越长就当然越费时间

* 第四行,设置时间戳,没有实际意义,只是和第一行对应执行时间。

* 第五行及后面所有行(第二个# Time:之前),执行的sql语句记录信息,因为sql可能会很长。

分析工具

mysql自带的分析工具mysqldump

Window下使用的话,先安装perl环境,然后运行bin目录中mysqldumpslow.pl文件:perl mysqldumpslow.pl -h 查看使用帮助

pt工具集

下载:https://github.com/percona/percona-toolkit

提供一系列mysql的运维工具。

pt-diskstats

查看系统磁盘状态

pt-summary

收集和显示系统概况

pt-deadlock-logger

提取和记录mysql死锁信息

pt-index-usage

分析日志中索引使用情况,并出报告

pt-online-schema-change

在线修改表结构

pt-duplicate-key-checker

列出并删除重复的索引和外键

以下以pt-query-digest为例,perl pt-query-digest "xx-slow.log",得出结果:

第一部分:整体概要信息

mysql慢查询

Overall:总共出现多少次查询

Unique:不同的有多少条

Range:日志记录的时间范围

Exec:执行时间,这个值包括了等待锁的时间

Lock:等待锁的时间

Sent:发送的行数

Examine:扫描的行数(M是百万,k是千)

Query size:执行的SQL的长度统计(如当前慢查询日志中,只记录了一条查询语句,则这个值就是这个查询语句字符串的长度)。

QPS:是这个工具预估出来的值,不是准确值

第二部分信息:某些查询在整体中的概要信息

mysql慢查询

第三部分:就是第二部分中具体到某个sql的信息统计

mysql慢查询

相关推荐