MySQL性能优化(慢查询)

1 MySQL性能优化之慢查询

1.1 性能优化的思路

  1. 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语句

  2. 其次使用explain命令去查看有问题的SQL的执行计划

  3. 最后可以使用show profile[s] 查看有问题的SQL的性能使用情况

1.2 介绍

l 数据库查询快慢是影响项目性能的一大因素,对于数据库,我们除了要优化 SQL,更重要的是得先找到需要优化的 SQL

l MySQL 数据库有一个“慢查询日志”功能,用来记录查询时间超过某个设定值的SQL,这将极大程度帮助我们快速定位到症结所在,以便对症下药。

  • 至于查询时间的多少才算慢,每个项目、业务都有不同的要求。

  • 传统企业的软件允许查询时间高于某个值,但是把这个标准放在互联网项目或者访问量大的网站上,估计就是一个bug,甚至可能升级为一个功能性缺陷。

l MySQL的慢查询日志功能,默认是关闭的,需要手动开启

1.3 开启慢查询功能

l 查看是否开启慢查询功能

image.png

参数说明****:

  • slow_query_log :是否开启慢查询日志,ON 为开启,OFF 为关闭,如果为关闭可以开启。

  • log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log

  • slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log

  • long_query_time:慢查询阈值,当查询时间多于设定的阈值时,记录日志,单位为秒。

l 临时开启慢查询功能

在 MySQL 执行 SQL 语句设置,但是如果重启 MySQL 的话将失效

set global slow_query_log = ON;

set global long_query_time = 1;

[图片上传失败...(image-ce3eec-1561296099961)]

l 永久开启慢查询功能

修改/etc/my.cnf配置文件,重启 MySQL, 这种永久生效.

[mysqld]

slow_query_log = ON

slow_query_log_file = /var/log/mysql/slow.log

long_query_time = 1

image.png

l 慢日志格式

image.png
image.png

格式说明:

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

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

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

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

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

    Rows_sent,查询返回的行数

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

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

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

1.4 分析慢查询日志

1.4.1 MySQL自带的mysqldumpslow

[root@localhost mysql]# mysqldumpslow /var/lib/mysql/localhost-slow.log

常用参数说明:

l -s:是表示按照何种方式排序

image.png

l -t:是top n的意思,即为返回前面多少条的数据

l -g:后边可以写一个正则匹配模式,大小写不敏感的

示例:

得到按照时间排序的前10条里面含有左连接的查询语句。

mysqldumpslow -s t -t 10 -g “left join” /var/lib/mysql/localhost_slow.log

1.4.2 使用mysqlsla工具

l mysqlsla工具,功能非常强大。数据报表,非常有利于分析慢查询的原因,包括执行频率,数据量,查询消耗等。

l 不过此工具已停止维护,项目 github 介绍页面推荐使用 percona-toolkit,下面有介绍。

mysqlsla -lt /var/log/mysql/slow.log

1.4.3 使用percona-toolkit工具

percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等。

l 下载

https://www.percona.com/downloads/percona-toolkit/3.0.11/binary/tarball/percona-toolkit-3.0.11_x86_64.tar.gz

l 安装

  • tar -xf percona-toolkit-3.0.11_x86_64.tar.gz

  • cd percona-toolkit-3.0.11

  • perl Makefile.PL

  • make

  • make install

l 调错

Can't locate ExtUtils/MakeMaker.pm in @INC 错误的解决方式:

  • yum install -y perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

Can't locate Time/HiRes.pm in @INC

*yum install -y perl-Time-HiRes

l 使用pt-query-digest查看慢查询日志

pt-query-digest /var/lib/mysql/localhost-slow.log

你可能感兴趣的:(MySQL性能优化(慢查询))