mysql慢查询日志分析命令

Dear 丶 2023-09-25 09:49 39阅读 0赞

MySQL慢查询日志能否记录正在执行的SQL语句

一、MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句

1,slow_query_log

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

2,long_query_time

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

3,slow_query_log_file

记录日志的文件名。

4,log_queries_not_using_indexes

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

二、检测mysql中sql语句的效率的方法

1、通过查询日志

(1)、Windows下开启MySQL慢查询

MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上

log-slow-queries=F:/MySQL/log/mysqlslowquery。log

long_query_time=2

(2)、Linux下启用MySQL慢查询

MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上

log-slow-queries=/data/mysqldata/slowquery。log

long_query_time=2

log-slow-queries=F:/MySQL/log/mysqlslowquery。

为慢查询日志存放的位置,一般这个目录要有MySQL的运行帐号的可写权限,一般都将这个目录设置为MySQL的数据存放目录;

long_query_time=2中的2表示查询超过两秒才记录;

2.showprocesslist命令

SHOWPROCESSLIST显示哪些线程正在运行。您也可以使用mysqladminprocesslist语句得到此信息。

mysql慢查询日志分析命令\_mysql慢查询日志分析可视化

压测时在mysql慢查询日志中有一条很简单的SQL语句,不知为何

这是一个慢查询日志的展示工具,能够帮助DBA或者开发人员分析数据库的性能问题,给出全面的数据摆脱直接查看slow-log。QAN(QueryAnalytics)

PMM目前有2个版本,但是对于QAN来说其大致由三部分组成:

QAN-Agent(client):负责采集slow-log的数据并上报到服务端

QAN-API(server):负责存储采集的数据,并对外提供查询接口

QAN-APP:专门用来展示慢查询数据的grafana第三方插件

1.数据流转

slow-log—>QAN-Agent—>QAN-APIQAN-APP(grafana)

2.pmm1架构图

3.pmm2架构图

本回答由网友推荐

如何开启MySQL慢查询日志

可以通过文件方式:

在 mysql 配置文件 my.cnf 中增加:

log-slow-queries=/opt/data/slowquery.log

long_query_time=2

也可以通过命令方式:

set global slow_query_log=on;

set global long_query_time=1;

set global slow_query_log_file=‘/opt/data/slow_query.log’;

这种方式不用重启 mysql 服务

mysql慢查询日志分析命令\_mysql慢查询日志分析可视化\_02

Could not use /data/mysql/mysql-slow.log for logging

由于最近自己管理的mysql有出现查询慢的情况,为了能够查询出慢查询的sql语句,故启动了mysql的慢查询日志,具体启动慢查询的方法有以下两种:

1、直接登入mysql, 更改mysql参数.(注:登入账号需有管理员权限)

mysql> set global log_slow_queries=on;

mysql> set global slow_query_log_file=/data/mysql.slow.log;

mysql> set global long_query_time=1;

如果是这种方法的话,重启数据库之后就不生效了。

2、直接更改my.conf

[mysqld]

log-slow-queries = /data/mysql.slow.log

long_query_time = 1

我本次使用的是第2种方法,但是重启mysql之后发现慢查询日志没有生效,查询了一下mysql日志,发现日志报如下错误:

110907 18:28:04 InnoDB: Started; log sequence number 0 4245951191

/usr/libexec/mysqld: File ‘/data/mysql.slow.log’ not found (Errcode: 13)

110907 18:28:04 [ERROR] Could not use /data/mysql.slow.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it.

出现这个情况,一般通过以下操作就可以解决:

touch /data/mysql.slow.log

chown mysql.mysql /data/mysql.slow.log

chmod o-r /data/mysql.slow.log

可是还是不行,再次认真分析了下log发现主要还是/data/mysql.slow.log文件无法找到引起的,但是实际上/data/mysql.slow.log文件是存在的;没办法一下子没找到原因,先把慢查询文件路径改为/var/log/mysql-slow.log试试,这样就行了。

110907 18:39:57 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

110907 18:39:57 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

110907 18:39:57 [Warning] ‘—log_slow_queries’ is deprecated and will be removed in a future release. Please use ‘’—slow_query_log’/‘—slow_query_log_file’’ instead.

110907 18:39:57 InnoDB: Started; log sequence number 0 4245951191

110907 18:39:57 [Note] Event Scheduler: Loaded 0 events

110907 18:39:57 [Note] /usr/libexec/mysqld: ready for connections.

Version: ‘5.1.52-log’ socket: ‘/var/lib/mysql/mysql.sock’ port: 3306 Source distribution

[root@localhost log]# ll |grep mysql

-rw-r——-. 1 mysql mysql 512181 Sep 7 18:39 mysqld.log

-rw-r—r—. 1 mysql mysql422 Sep 7 18:41 mysql-slow.log

[root@localhost log]# cat mysql-slow.log

/usr/libexec/mysqld, Version: 5.1.52-log (Source distribution). started with:

Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock

TimeId CommandArgument

# Time: 110907 18:41:29

# : root[root] @ localhost []

# Query_time: 1.512086 Lock_time: 0.000001 Rows_sent: 26 Rows_examined: 2443129

use idmanage;

SET timestamp=1315392089;

select type,count(*) from client where status=1 group by type;

经过自己的分析原因应该是:好像不支持跨硬盘写数据。

我的实际情况是这样的,我以前的空间不够用了,然后我再挂了一块硬盘进去了,且新硬盘mount的路径就是/data。

[root@localhost log]# df -h

FilesystemSize Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root

7.0G 6.6G12M 100% /

tmpfs250M0 250M0% /dev/shm

/dev/sda1485M29M 432M7% /boot

/dev/mapper/VolGroup-lv_file

485M11M 449M3% /file

/dev/sdb19.9G 8.1G 1.3G 87% /data开启慢查询日志 , 配置样例:

/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

发表评论

表情:
评论列表 (有 0 条评论,39人围观)

还没有评论,来说两句吧...

相关阅读