`

mysql 的慢查询调优

阅读更多

原文:http://blog.csdn.net/zm2714/article/details/8510893

 

慢查询定义及作用

慢查询日志,顾名思义,就是查询慢的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。

 

开启慢查询日志

在mysql的配置文件(linux是my.cnf、windows是my.ini)中的mysqld下方添加以下参数:

#这个参数设置为ON,或1,可以捕获执行时间超过一定数值的SQL语句

slow_query_log = 1

#当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短,单位秒,缺省是10秒。

long_query_time = 1

#这个参数设置为ON或1,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。

log_queries_not_using_indexes = 1

#记录慢查询日志的文件名

slow_query_log_file=/data/mysql/log/slow-query.log

 

注意

log-slow-queries <slow_query_log_file>指定日志文件存放位置,该目录文件一定要有写的权限。可以不用设置,系统会给一个缺省的文件host_name-slow.log ;这2个参数类似,一般都知道明确的文件日志位置;

 

给mysql用户组的mysql用户对某个目录或文件,赋读写权限;

chown -R mysql:mysql /var/log/slow-query.log 
chmod 660 /var/log/ slow-query.log 

给mysql用户组的mysql用户的某个目录或文件赋写权限; 

chown -R mysql:mysql /var/log/slow-query.log

chmod +w /var/log/slow-query.log

 

log-long-format

简单的说log-long-format选项是用来设置日志的格式,它是以扩展方式记录有关事件。扩展方式可记录谁发出查询和什么时候发出查询的信息。可使我们更好地掌握客户端的操作情况。

准确的说,它是记录激活的更新日志、二进制更新日志、和慢查询日志的大量信息。例如,所有查询的用户名和时间戳将记录下来。不赞成选用该选项,因为它现在代表 默认记录行为。

log-short-format

记录激活的更新日志、二进制更新日志、和慢查询日志的少量信息。例如,用户名和时间戳不记录下来。

 

配置文件修改后必须保存、重启mysql服务器;

查看日志方法:

方法1:tail -f /data/mysql/log/slow-query.log  通过这种tail -f    日志文件    命令模式可以查看;

 

# Time: 151028 10:46:06

# User@Host: root[root] @  [172.168.48.196]  Id:   298

# Query_time: 0.104143  Lock_time: 0.000479 Rows_sent: 5  Rows_examined: 9502

SET timestamp=1446000366;

SELECT CASE WHEN c.street IS NULL THEN CONCAT(c.province,c.city,c.town,c.detailAddress) ELSE CONCAT(c.province,c.city,c.town,c.street,c.detailAddress)  END  AS customerAddress,u.userId as workerId,u.realName repairman_name,u.telephone repairman_phone,s.arrAdd repairman_address FROM dispatch_info a JOIN  user_info u ON (a.serverId=u.sermanagerId OR a.serverId=u.userId)   AND a.object_id='312497904'  AND u.isDelete=0 JOIN customer_info c ON a.customerId=c.customerId LEFT OUTER JOIN (SELECT us.id,us.arrAdd,us.workId FROM user_sign us,(SELECT MAX(id) as id from user_sign GROUP BY workId)uus where us.id=uus.id ) s ON u.userId=s.workId;

 

 

第一行,SQL查询执行的时间 
第二行,执行SQL查询的连接信息 
第三行记录了一些我们比较有用的信息 
Query_time SQL执行的时间,越长则越慢 
Lock_time 在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间 
Rows_sent 查询返回的行数 
Rows_examined 查询检查的行数

 

方法2:不用重启数据库,通过设置mysql的全局变量模式来查看;

登陆到mysql上执行一下sql脚本即可

mysql> set global slow_query_log=ON;

mysql> set global long_query_time=1;

mysql> set global log_queries_not_using_indexes = 1;     #打开没有使用索引的sql

然后通过一下命令查看是否成功

查看long_query_time 的值

mysql> show variables like '%long%';

+--------------------------------------------------------+----------+

| Variable_name                                          | Value    |

+--------------------------------------------------------+----------+

| long_query_time                                        | 1.000000 |

| performance_schema_events_stages_history_long_size     | 10000    |

| performance_schema_events_statements_history_long_size | 10000    |

| performance_schema_events_waits_history_long_size      | 10000    |

+--------------------------------------------------------+----------+

 

mysql> show variables like 'slow%';

+---------------------+--------------------------------+

| Variable_name       | Value                          |

+---------------------+--------------------------------+

| slow_launch_time    | 2                              |

| slow_query_log      | ON                             |

| slow_query_log_file | /data/mysql/log/slow-query.log |

+---------------------+--------------------------------+

 

方法3:

随着mysql数据库服务器运行时间的增加,可能会有越来越多的SQL查询被记录到了慢查询日志文件中,这时要分析该文章就显得不是很容易了。mysql提供的mysqldumpslow命令,可以很好地解决这个问题。

 

使用方法如下:

命令行下,进入 mysql/bin 目录,输入 mysqldumpslow ?help 或 --help 可以看到这个工具的参数

mysqldumpslow -s c -t 20 host-slow.log

mysqldumpslow -s r -t 20 host-slow.log 

上述命令可以看出访问次数最多的 20 个 sql 语句和返回记录集最多的 20 个 sql 

mysqldumpslow -t 10 -s t -g "left join" host-slow.log

这个是按照时间返回前 10 条里面含有左连接的 sql 语句。

mysqldumpslow -s c -t 10 /database/mysql/slow-log

这会输出记录次数最多的10条SQL语句,其中:

-s order,是表示按照何种方式排序,order值有:c、t、l、r 分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒序;
-t num,即为返回前面多少条的数据;
-g pattern,pattern可以写一个正则匹配模式,大小写不敏感的;

使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对MySQL查询语句的监控、分析、优化是MySQL优化的第一步,也是非常重要的一步。

相关命令

查看慢查询的记录数

mysql> show global status like '%slow%';

+---------------------+-------+

| Variable_name       | Value |

+---------------------+-------+

| Slow_launch_threads | 0     |

| Slow_queries        | 3444  |

+---------------------+-------+

2 rows in set (0.00 sec)

 

查看log_queries_not_using_indexes状态

mysql> show variables like 'log_queries_not_using_indexes';

+-------------------------------+-------+

| Variable_name                 | Value |

+-------------------------------+-------+

| log_queries_not_using_indexes | ON    |

+-------------------------------+-------+

1 row in set (0.00 sec)

 

 

 

 

 

分享到:
评论

相关推荐

    实战MySQL慢SQL调优

    实战MySQL慢SQL调优

    MySQL慢查询查找和调优测试

    MySQL慢查询查找和调优测试,接下来详细介绍,需要了解的朋友可以参考下

    mysql性能调优思路1

    mysql性能调优思路定位慢sql语句启动慢查询,mysqldumpslow分析分析慢sql语句explain执行计划分析语句优化创建最合理的索引避免模糊查询=

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...

    MySQL性能调优与架构设计 - 简朝阳.mobi

    2.1、 日志文件含 错误日志,二进制日志,更新日志(5.0后不支持),查询日志,慢查询日志,redo日志 2.2、数据文件含 .frm文件(表结构信息),.myd文件(), 2.3、Replication相关文件含 master.info文件,relay log和...

    慢查询日志分析工具说明

    mysql的slow_query_log慢查询日志分析工具说明,主要用来进行慢查询日志的linux平台分析输出结果文档进行MySQL的调优/优化数据库

    Mysql慢查询操作梳理总结

    Mysql慢查询解释 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10...

    MySQL慢查询相关参数原理解析

    当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。 此外,慢查询日志支持将日志记录写入文件和数据库表。  MySQL 慢查询的相关参数解释: l slow_query_log:...

    Mysql数据库调优

    数据库调优,慢查询语句,Myisam与InnoDb区别,索引的查询原理, 执行计划,profiling,索引优化,索引覆盖

    MYSQL5 LOG 分析工具.rar

    其实启用MySQL的慢查询日志很简单,只需要在MYSQL.INI 增加参数即可 log="c:/mysql_query.log" 重启mysql就可以将数据库所有操作记录下来,为了方便分析,提供一个简单快速的查看器。 打开文件设置执行目录与...

    MYSQL数据库优化秘籍

    MYSQL数据库优化秘籍,大牛出的,值得你反复研读 MySQL在Linux环境下的安装 文件引擎MyISAM与InnoDB比较 LOAD DATA INFILE/mysqldump DBA的分析命令 MySQL的系统配置参数、诊断操作系统的状态 MySQL的分库分表,分区...

    MySQL的慢日志线上问题及优化方案

    使用慢日志可找出执行时间较长或未走索引等 SQL 语句,为进行系统调优提供依据。 本文将结合一个线上案例,分析如何正确设置 MySQL 慢日志参数和使用慢日志功能,并介绍下网易云 RDS 对 MySQL 慢日志功能的增强。 ...

    【MySQL面试题干货集合】20个经典常用面试题-需要找工作的一定要看 共11页.pdf

    你们的慢日志都是怎么查询的? 9 13 你是否做过主从一致性校验,如果有,怎么做的,如果没有,你打算怎么做? 9 14 你们数据库是否支持emoji表情,如果不支持,如何操作? 9 15 你是如何维护数据库的数据字典的? 10...

    Mysql调优

    2.获取Mysql的慢查询语句。 3.常用存储引擎的底层原理。 4.索引的基本使用、不同存储引擎下的查询原理、索引优化策略、索引的应用场景。 5.数据库设计原理。 6.生产环境中数据库的查询调优。  

    中间件参数调优手册大全.pdf

    * long-query-time:慢查询阈值,当查询时间多于设定的阈值时才记录日志,可以根据具体业务需要设置,设置太小慢日志数据就会记录很多,也不利于分析慢查询 * expire-logs-days:日志文件过期时间,以天为单位 * ...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    05-MySQL服务慢查询日志介绍及实践 06-MySQL服务二进制日志的3种工作模式详细介绍 07-MySQL服务二进制日志的3种工作模式配置方法实战 第十部-老男孩MySQL常用引擎及优缺点-应用场景-调优详解(14节) 01-MySQL服务...

    mysql数据库.pptx

    MySQL简介 什么是数据库,什么是MySQL 1 使用MySQL DML ,DDL 排序,过滤,IN,NOT,UNION和分组 2 高级进阶 关联查询,内置函数和自定义函数,存储过程 3 性能调优 基础设置,SQL语句调优 4 目录 3 mysql数据库全文共...

    php资料库4 防止foeach中变量不是数组

    如何对MySQL 服务器进行调优(页 1) - 数据库-数据仓库 - ZDNetChina中文社区 资讯硬件软件开发技术论坛.mht 如何对MySQL服务器进行调优-Linux认证考试-考试大.mht MySQL状态变量解释_含笑的波浪在逐浪.mht mysql查看...

    Mysql高级性能优化思维导图

    查询优化:编写高效的SQL查询语句,避免使用慢查询或复杂查询,优化查询语句的逻辑和结构。 配置调优:优化MySQL的配置参数,包括缓存大小、连接数、并发线程等,以最大程度地利用系统资源和提高性能。 表分区和分...

Global site tag (gtag.js) - Google Analytics