记录执行时间超出指定值或条件的sql语句。
参数
参数名 | 说明 |
---|---|
slow_query_log | 慢查询开关 |
slow-query-log-file | 记录慢查询语句的文件 |
long_query_time | 记录大于指定N秒的sql语句 ,默认是10秒 |
log_queries_not_using_indexes | 记录没有使用到索引的sql语句,默认值是off |
min_examined_row_limit | 记录结果集大于N行的sql语句,默认是0行 |
log_slow_admin_statements | 记录管理的慢sql语句 |
log_throttle_queries_not_using_indexes | 限制每分钟写入的慢sql语句的数量,默认是0没有限制 |
mysql -uroot -p123456 -e "show variables like 'slow_query%';";
+---------------------+---------------------------+
| Variable_name | Value |
+---------------------+---------------------------+
| slow_query_log | ON |
| slow_query_log_file | /usr/local/mysql/slow.log |
+---------------------+---------------------------+
进入my.cnf配置文件中设置成OFF 或ON 即可
vi /usr/local/mysql/my.cnf
[mysqld]
# 慢查询配置
slow-query-log=ON # 开启慢查询
slow-query-log-file=/usr/local/mysql/slow.log #记录sql语句的文件
long_query_time=2 #记录大于2秒的sql语句
log_queries_not_using_indexes=ON #没有使用到索引的sql语句
min_examined_row_limit=800 # 记录结果集中大于800 行的sql语句
systemctl restart mysql
利用计划任务按天切割慢查询日志文件,便于分析。
创建一个slow.sh的shell脚本
#! /bin/bash
user=root
passwd=123456
cd /usr/local/mysql &&\
mv slow.log slow.log.$(date +%F) &&\
mysqladmin -u$user -p$passwd flush-log
将slow.sh脚本添加到linux计划任务中。
[root@localhost ~]# crontab -e
// 将下面这段代码添加到计划任务中
0 0 * * * sh ./slow.sh > /dev/null 2 > &1
systemctl restart crond.service