mysql中slow query log慢日志查询分析

在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析每条sql执行的状态与性能从而进行优化了。

一、慢查询日志 配置

开启慢查询日志 , 配置样例:

/etc/mysql/my.cnf
[mysqld]
log-slow-queries

在 my.cnf 配置文件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能生效。慢查询 日志将写入参数 DATADIR (数据目录:/var/lib/mysql)
指定的路径下,默认文件名是 host_name-slow.log 。
和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。下例中演示了慢查询日志的设置和读取过程。

1 )首先查询一下 long_query_time 的值 。

mysql> show variables like ‘long%‘;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)

( 2 )为了方便测试,将修改慢查询时间为 5 秒。

mysql> set long_query_time=1;
Query OK, 0 rows affected (0.02 sec)

以上操作只限于当前有效,关闭服务器得重新设置。下面的方法可直接写入my.cnf

log-slow-queries=/var/lib/mysql/slowquery.log

long_query_time=1

二、mysqldumpslow 的常用参数如下:

-s 后面接下面的参数表示 mysqldumpslow 结果显示的顺序!
c query执行的次数
t sql执行的时间
l lock锁表的时间
r sql返回的行数
ac,at,al,ar,表示倒序排列
-t,是top n,即为返回前面n条数据。
-g,后边可以写一个正则匹配模式,大小写不敏感
显示执行时间最长的前两个
[[email protected] python]# mysqldumpslow -s t -t 2 /opt/mysql/data/slowquery.log
Reading mysql slow query log from /opt/mysql/data/slowquery.log
Count: 2 Time=412.54s (825s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@localhost
select count(N) from sbtest ,t1 where t1.c=sbtest.c
Count: 1 Time=778.20s (778s) Lock=0.00s (0s) Rows=1.0 (1), root[root]@localhost
select count(N) from sbtest where sbtest.id not in ( select id from t1 )
#显示次数最多的前两个
[[email protected] python]# mysqldumpslow -s c -t 2 /opt/mysql/data/slowquery.log
Reading mysql slow query log from /opt/mysql/data/slowquery.log
Count: 12 Time=0.00s (0s) Lock=0.00s (0s) Rows=1.0 (12), root[root]@localhost
select count(N) from tab_1
Count: 2 Time=412.54s (825s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@localhost
select count(N) from sbtest ,t1 where t1.c=sbtest.c

时间: 2024-12-10 04:10:01

mysql中slow query log慢日志查询分析的相关文章

MySQL:动态开启慢查询日志(Slow Query Log)

前言 在开发中,高效能的程序 也包括 高效能的查询,所以优化SQL也是程序员必要技能之一.要优化就必须要有慢日志记录才可以知道哪些查询慢,然后反向去修改 慢日志设置方式 写入文件 写入数据库 实践操作 方式一:写入文件 编辑my.conf 中修改 log_slow_queries 的日志地址 $ cd /etc/mysql $ cat my.cnf |grep slow  log_slow_queries = /data/logs/mysql/mysql-slow.log $ sudo /etc

MySQL 慢查询日志(Slow Query Log)

同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等.本文主要描述通用查询日志. 1.MySQL日志文件系统的组成   a.错误日志:记录启动.运行或停止mysqld时出现的问题.   b.通用日志:记录建立的客户端连接和执行的语句.   c.更新日志:记录更改数据的语句.该日志在M

mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用

mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句. 慢查询配置和使用 在msyqld的启动配置文件或命令行参数中增加以下参数 long_query_time=1 log-slow-queries=/var/mysql/logs/slow.log long_query_time参数表示的是慢查询的度量时间,单位是秒,最小是1,缺省值是10,凡是执行时间超过long_query_ti

Mysql slow query log

一.概念部分:  顾名思义,慢查询日志中记录的是执行时间较长的query,也就是我们常说的slow query,通过设--log-slow-queries[=file_name]来打开该功能并设置记录位置和文件名,默认文件名为hostname-slow.log,默认目录也是数据目录.     慢查询日志采用的是简单的文本格式,可以通过各种文本编辑器查看其中的内容.其中记录了语句执行的时刻,执行所消耗的时间,执行用户,连接主机等相关信息.MySQL还提供了专门用来分析满查询日志的工具程序mysql

MySQL慢日志查询分析方法与工具

MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或者不使用索引的查询 MySQL日志文件系统的组成   a.错误日志:记录启动.运行或停止mysqld时出现的问题.   b.通用日志:记录建立的客户端连接和执行的语句.   c.更新日志:记录更改数据的语句.该日志在MySQL

玩转SSH之Spring(一)---关于Srping框架中使用@query注解实现复杂查询

在Spring框架中,关于从数据表获取数据有不同的方法,当数据查询比较简单时,可以通过继承JpaRepository<T, L> 使用findBy***方法,通过分析方法名来实现查询,T表示要查询的数据表所对应的实体,L表示该实体主键的类型,比如Long.关于findBy方法如何通过分析方法名来实现查询,网上资料很多,不做赘述. 如果查询的数据比较复杂,查询条件比较复杂时,可以考虑使用JPA的@query方法来实现查询.关于使用方法,下面做简单介绍: 1.首先Dao层需继承Repository

说说MySQL中的Redo log Undo log都在干啥

阅读目录(Content) 1 undo 1.1 undo是啥 1.2 undo参数 1.3 undo空间管理 2 redo 2.1 redo是啥 2.2 redo 参数 2.3 redo 空间管理 3 undo及redo如何记录事务 3.1 Undo + Redo事务的简化过程 3.2  IO影响 3.3 恢复 在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件. MySQL中的日志文件,

MySQL中的基本多表连接查询 转自脚本之家(作者:真实的归宿)

一.多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢.一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN 2.   内连接INNER JOIN 在MySQL中把I SELECT * FROM table1 CROSS JOIN tabl

Ubuntu中没有/var/log/messages日志

在Ubuntu中没有/var/log/messages,Ubuntu中对应的应该是/etc/rsyslog.conf和rsyslogd. 解决方法:用vim打开/etc/rsyslog.d/50-default.conf文件末尾增加一行内容如下:*.info;mail.none;authpriv.none;cron.none /var/log/messages然后保存:按ESC,然后:wq:在重启系统 ,然后查看.var/log/messages就有了