基础知识
根据 MySQL 文档:
"The slow query log consists of SQL statements that took more than long_query_time seconds to execute and required at least min_examined_row_limit rows to be examined." 慢查询日志由执行时间超过 long_query_time 秒且至少需要检查 min_examined_row_limit 行的 SQL 语句组成。
要记录所有查询,我们可以将 long_query_time 的值设置为 0 。
long_query_time 的默认值为 10 秒,min_examined_row_limit 的默认值为 0。
在线开启慢查询日志
我们也可以在 MySQL 中启用慢查询日志,而不是重新启动 mysqld 服务。
要启用慢查询日志,我们可以动态设置slow_query_log=1,并且可以使用slow_query_log_file 设置文件名。
要指定日志目标,请使用 -log-output :
- 设置 LONG_QUERY_TIME 并验证值。
mysql> SET @@GLOBAL.LONG_QUERY_TIME=5; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@GLOBAL.LONG_QUERY_TIME; +--------------------------+ | @@GLOBAL.LONG_QUERY_TIME | +--------------------------+ | 5.000000 | +--------------------------+ 1 row in set (0.00 sec)
mysql> SELECT @@GLOBAL.LONG_QUERY_TIME; +--------------------------+ | @@GLOBAL.LONG_QUERY_TIME | +--------------------------+ | 5.000000 | +--------------------------+ 1 row in set (0.00 sec)
- 设置慢查询文件。
默认情况下,它会在带有 hostname-slow 日志的数据目录中:
mysql> SELECT @@GLOBAL.slow_query_log_file; +---------------------------------+ | @@GLOBAL.slow_query_log_file | +---------------------------------+ | /var/lib/mysql/server1-slow.log | +---------------------------------+ 1 row in set (0.00 sec)
mysql> SET @@GLOBAL.slow_query_log_file='/var/log/mysql/mysql-slow.log'; Query OK, 0 rows affected (0.00 sec)
验证日志文件的新位置:
mysql> SELECT @@GLOBAL.slow_query_log_file; +-------------------------------+ | @@GLOBAL.slow_query_log_file | +-------------------------------+ | /var/log/mysql/mysql-slow.log | +-------------------------------+ 1 row in set (0.00 sec)
- 开启慢查询日志。
默认情况下它是禁用的,如下所示:
mysql> SELECT @@GLOBAL.slow_query_log; +-------------------------+ | @@GLOBAL.slow_query_log | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.00 sec)
mysql> SET @@GLOBAL.slow_query_log=1; Query OK, 0 rows affected (0.01 sec)
mysql> SELECT @@GLOBAL.slow_query_log; +-------------------------+ | @@GLOBAL.slow_query_log | +-------------------------+ | 1 | +-------------------------+ 1 row in set (0.00 sec)
在 MySQL 中启用慢查询日志
- 修改 /etc/my.cnf 的“mysqld”部分。
以下示例显示将需要超过五秒的查询记录到“/var/lib/mysql/mysqld-slow.log”:
# vi /etc/my.cnf [mysqld] long_query_time=5 slow_query_log=1 slow_query_log_file=/var/lib/mysql/mysqld-slow.log
- 完成上述更改后,重新启动 mysqld 服务。
# service mysqld restart
www. On IT Road .com
检查确认
- 检查配置是否有效。
检查“slow_query_log”参数(它应该是“ON”)。
mysql> show variables like '%slow%'; +---------------------+--------------------------------+ | Variable_name | Value | +---------------------+--------------------------------+ | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /var/lib/mysql/mysqld-slow.log | +---------------------+--------------------------------+ 4 rows in set (0.00 sec)
2.检查参数“long_query_time”,它的时间应该是5秒。
mysql> show variables like '%long%'; +--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | long_query_time | 5.000000 | | max_long_data_size | 1048576 | +--------------------+----------+ 2 rows in set (0.00 sec)
- 验证查询是否已记录(我们必须执行一些长时间运行的查询才能在慢查询日志中查看它们):
mysql> SELECT SLEEP(6); +----------+ | SLEEP(6) | +----------+ | 0 | +----------+ 1 row in set (6.00 sec)
shell> sudo less /var/log/mysql/mysql-slow.log /usr/sbin/mysqld, Version: 8.0.3-rc-log (MySQL Community Server (GPL)). started with: Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock Time Id Command Argument # Time: 2017-10-15T12:43:55.038601Z # User@Host: root[root] @ localhost [] Id: 7 # Query_time: 2.000845 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1508071435; SELECT SLEEP(6);
日期:2020-09-17 00:11:07 来源:oir作者:oir