开启 MySQL 的慢查询日志(Slow Query Log)可以帮助你分析和优化数据库中的慢查询语句。通过记录执行时间超过阈值的 SQL 查询,慢查询日志能够提供以下用途:
性能优化
: 慢查询日志能够帮助你找出执行时间较长的 SQL 查询语句,以及执行次数较多的查询。通过分析这些慢查询语句,你可以定位到导致性能瓶颈的代码块或者查询操作,进而对其进行优化,提高数据库的响应性能。发现问题查询
: 慢查询日志可以捕获执行时间较长的查询,帮助你发现潜在的性能问题、高查询负载或者设计不合理的查询语句。通过对慢查询日志的监控,你可以及时识别并修复这些问题,确保数据库的稳定性和可靠性。优化索引
: 慢查询日志可以揭示缺乏合适索引的查询语句。通过分析慢查询日志,你可以确定需要创建或优化的索引,提高查询的效率和性能。监控查询情况
: 通过定期分析慢查询日志,你可以了解数据库的查询模式和查询趋势。这有助于对系统性能进行长期监控,优化数据库设计和查询规划。请注意,在生产环境中开启慢查询日志需要谨慎,因为它会产生额外的磁盘 I/O 和日志记录开销。你可以根据具体情况和需求来选择是否开启和设置合适的阈值。
注意:不需要重启mysql服务,直接修改后生效。
第1步
:先在服务器创建存放慢SQL日志文件夹的路径,确保路径存在再执行第2步。
第2步
:执行sql,设置为 ON 表示启用慢查询日志。
set global slow_query_log=ON;
第3步
:执行sql,指定执行时间多少秒以上的查询将被视为慢查询。在上述示例中,查询时间超过 10 毫秒的查询将被记录。
set global long_query_time=0.01
第4步
:执行sql,指定日志文件的路径和名称。您可以根据实际需求更改路径和名称。
set global slow_query_log_file='/var/log/mysql/slow_query_20230713.log'
注意:需要重启mysql服务,但是生成的存放慢SQL的日志文件只有一个。
第1步
:先将慢SQL开启脚本open_the_slow_sql_configuration_file.sh上传服务器某个路径下,进入该路径,并执行授权命令:
chmod 777 open_the_slow_sql_configuration_file.sh
第2步
:先修改open_the_slow_sql_configuration_file.sh脚本中的日志存放路径slowSqlLogPath属性值。
第3步
:根据第2步的存放路径在服务器创建文件夹,确保路径文件夹存在情况下再执行第3步。
第4步
:重启网管服务让慢SQL功能生效。
注意:需要重启mysql服务,执行Shell脚本后需要重启网管,效果是重启后生成当天日期对应的日志文件。
第1步
:执行Sell脚本,进入存放的目录中执行命令:
./open_the_slow_sql_configuration_file.sh
第2步
:重启网管服务让慢SQL功能生效。
服务器连接登录mysql或者在数据库连接软件中执行相应sql,查看结果,如果结果都是你刚刚配置的,那就说明功能已开启且配置正确:
这是一个计数器,表示自 MySQL 服务器启动以来发生的慢查询数量。
show global status like '%slow_queries%';
这是一个计时器,表示自 MySQL 服务器启动以来所有慢查询执行所花费的总时间(以秒为单位)。
show global variables like 'long_query_time';
这是一个配置参数,表示被认为是慢查询的最小执行时间阈值。默认情况下,它的值是 10 秒,意味着执行时间超过 10 秒的查询将被记录为慢查询。您可以根据需求调整此值。
show variables like '%slow_query_log%';
Tcp port: 18753 Unix socket: /home/ems/3rdparty/mysql/mysql.sock
Time Id Command Argument
# Time: 230714 14:11:08
# User@Host: herounms[herounms] @ [10.161.29.105] Id: 6
# Query_time: 0.306785 Lock_time: 0.020101 Rows_sent: 0 Rows_examined: 1393
use lte_ems;
SET timestamp=1689315068;
update lte_ems.monitor_sys_log
SET STATUS = 1
where PRODUCT = 'PLATFORM'
and STATUS = 0
and LOG_TYPE = 'start';
参数介绍:
open_the_slow_sql_configuration_file.sh
#!/bin/bash
# Open the slow sql configuration file
# Open slow SQL switch
sed -i "s|slow_query_log = .*|slow_query_log = ON|" /home/ems/3rdparty/mysql/my.cnf
echo "Configuration slow_query_log complete!"
# Set the current date to the log name
current_date=$(date +%Y%m%d)
slowSqlLogPath=/var/log/mysql
sed -i "s|slow_query_log_file = .*|slow_query_log_file = $slowSqlLogPath/slow_query_$current_date.log|" /home/ems/3rdparty/mysql/my.cnf
echo "Configuration slow_query_log_file complete!"
# Queries that take longer than a specified number of seconds to execute are considered slow
sed -i "s|long_query_time = .*|long_query_time = 0.01|" /home/ems/3rdparty/mysql/my.cnf
echo "Configuration long_query_time success!"
echo "Configuration Complete!"