Mysql慢查询日志

Mysql慢查询日志

有没有办法从/var/log/mysql/mysql-slow.log文件中过滤 mysql 慢查询数据库。我有一个带有 5 个实时数据库的 mysql 服务器。我正在尝试优化此服务器。

另外我想知道优化 mysql 服务器的最佳实践是什么。

我的设置是:

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 5
log-queries-not-using-indexes

答案1

mysqldumpslow /var/log/mysql/mysql-slow.log

这将为您提供一个不同的慢速和非索引查询列表,按查询运行的次数排序,次数最多的查询排在最前面。对每个日志运行该操作,如果查询执行时间小于慢速时间 (5),则它是一个非索引查询。

希望这对某人有帮助。

答案2

我没有慢查询日志可以查看,所以我无法自己测试,但你可能想看看类似mysql 日志过滤器

这是一个 PHP 脚本,可以解析 MySQL 慢查询日志,并提供许多不同的选项。也许其中一个可以让您获得所需的信息,或者至少更接近所需的信息。值得一试!

答案3

我发现了一个很好的实用程序 mysqlsla,可以解析慢查询日志或按数据库过滤它们。 http://hackmysql.com/mysqlsla

我们还可以使用这个 bash 脚本来自定义慢查询并生成报告。该脚本使用实用程序 mysqlsla。

#!/bin/bash

# Script to process multiple mysql slow logs
# using mysqlsla http://hackmysql.com/mysqlsla

# Directory containing slow logs
sl_dir="/home/rhys/Desktop/slow_logs";

cd "$sl_dir";
#slow_logs=$(ls "$sl_dir");

# Folder for reports
if [ ! -d "$sl_dir"/reports ]; then
                mkdir "$sl_dir"/reports;
fi

# process each slow log file
for file in "$sl_dir"/*
do
                echo "Processing file: $file";
                filename=$(basename "$file")
                mysqlsla -lt slow "$file" > "reports/$filename.rpt";
                echo "Finished processing file: $file";
done

答案4

此脚本提供的输出比 mysqldumpslow 更清晰:

https://github.com/LeeKemp/mysql-slow-query-log-parser/

相关内容