slow-query-analyzer

star 1

数据库慢查询日志分析和 SQL 性能优化工具。支持 MySQL、PostgreSQL 慢查询日志解析,SQL 执行计划分析,索引优化建议,生成优化报告。用于诊断数据库性能问题、优化慢 SQL、提升查询效率。

wnzzer By wnzzer schedule Updated 3/23/2026

name: slow-query-analyzer description: 数据库慢查询日志分析和 SQL 性能优化工具。支持 MySQL、PostgreSQL 慢查询日志解析,SQL 执行计划分析,索引优化建议,生成优化报告。用于诊断数据库性能问题、优化慢 SQL、提升查询效率。 metadata: openclaw: emoji: 🐢 requires: config: [] tools: ["exec", "read"]


Slow Query Analyzer - 慢查询分析工具

专业的数据库慢查询分析工具,支持多种数据库的慢查询日志解析和 SQL 性能优化。

支持的数据库

数据库 慢查询日志 执行计划分析 索引建议
MySQL
PostgreSQL
MariaDB
TiDB ⚠️

🚀 快速开始

1. 分析 MySQL 慢查询日志

# 分析本地慢查询日志
python3 scripts/analyze_mysql_slow.py /var/log/mysql/slow.log

# 分析并生成报告
python3 scripts/analyze_mysql_slow.py slow.log --format html --output report.html

# 只显示耗时前 10 的查询
python3 scripts/analyze_mysql_slow.py slow.log --top 10

2. 分析单条 SQL

# 获取执行计划并分析
python3 scripts/analyze_sql.py "SELECT * FROM users WHERE email LIKE '%test%'" \
  --db mysql --host localhost --user root --database mydb

3. 批量分析 SQL 文件

# 分析文件中的所有 SQL
python3 scripts/analyze_sql_file.py queries.sql --db mysql --format json

📊 分析维度

慢查询日志分析

  • 查询频率 - 哪些查询被执行最多
  • 总耗时 - 累积执行时间最长的查询
  • 平均耗时 - 单次执行最慢的查询
  • 扫描行数 - 读取数据量过大的查询
  • 返回行数 - 返回结果集过大的查询

SQL 执行计划分析

  • 全表扫描 - 缺少索引的查询
  • 文件排序 - 使用了 filesort 的查询
  • 临时表 - 使用了临时表的查询
  • 索引使用 - 索引使用效率分析
  • JOIN 类型 - JOIN 优化建议

索引优化建议

  • 缺失索引 - 应该添加的索引
  • 冗余索引 - 可以删除的索引
  • 复合索引 - 复合索引优化建议
  • 索引选择性 - 索引字段选择性分析

📁 项目结构

slow-query-analyzer/
├── SKILL.md                  # 本文件
├── scripts/
│   ├── analyze_mysql_slow.py    # MySQL 慢查询分析
│   ├── analyze_postgres_slow.py # PostgreSQL 慢查询分析
│   ├── analyze_sql.py           # 单条 SQL 分析
│   ├── analyze_sql_file.py      # SQL 文件批量分析
│   └── generate_report.py       # 报告生成器
├── references/
│   ├── mysql_explain.md         # MySQL EXPLAIN 详解
│   ├── postgres_explain.md      # PostgreSQL EXPLAIN 详解
│   └── optimization_patterns.md # 常见优化模式
└── assets/
    └── report_template.html     # HTML 报告模板

🔧 详细用法

MySQL 慢查询分析

# 基础分析
python3 scripts/analyze_mysql_slow.py /var/lib/mysql/slow.log

# 指定时间范围
python3 scripts/analyze_mysql_slow.py slow.log --start "2024-01-01 00:00:00" --end "2024-01-31 23:59:59"

# 只显示特定数据库的查询
python3 scripts/analyze_mysql_slow.py slow.log --database myapp

# 过滤特定表
python3 scripts/analyze_mysql_slow.py slow.log --table users

# 生成不同格式的报告
python3 scripts/analyze_mysql_slow.py slow.log --format json --output report.json
python3 scripts/analyze_mysql_slow.py slow.log --format csv --output report.csv
python3 scripts/analyze_mysql_slow.py slow.log --format html --output report.html

PostgreSQL 慢查询分析

# 分析 PostgreSQL 日志(需先开启 log_min_duration_statement)
python3 scripts/analyze_postgres_slow.py /var/log/postgresql/postgresql-slow.log

# 分析特定数据库
python3 scripts/analyze_postgres_slow.py postgresql.log --database myapp

SQL 执行计划分析

# 分析单条 SQL(需要数据库连接)
python3 scripts/analyze_sql.py "SELECT u.*, COUNT(o.id) FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id" \
  --db mysql \
  --host localhost \
  --port 3306 \
  --user root \
  --password secret \
  --database myapp

# 从文件读取 SQL
python3 scripts/analyze_sql.py --file query.sql --db mysql --host localhost --user root --database myapp

生成优化报告

# 综合报告
python3 scripts/generate_report.py \
  --mysql-slow /var/log/mysql/slow.log \
  --postgres-log /var/log/postgresql/postgresql.log \
  --output optimization_report.html

📋 报告内容

生成的报告包含:

  1. 概览统计

    • 总查询数、慢查询数、慢查询占比
    • 平均执行时间、95 分位耗时
    • 最慢的查询 TOP N
  2. 查询模式分析

    • 查询类型分布(SELECT/INSERT/UPDATE/DELETE)
    • 表访问频率
    • JOIN 类型分布
  3. 性能问题识别

    • 全表扫描查询
    • 文件排序查询
    • 使用临时表的查询
    • 大偏移量分页
  4. 优化建议

    • 推荐添加的索引
    • 可以优化的 SQL 写法
    • 配置参数建议

💡 常见优化建议

索引优化

-- 优化前:全表扫描
SELECT * FROM users WHERE email LIKE '%test%';

-- 优化后:使用全文索引
ALTER TABLE users ADD FULLTEXT INDEX idx_email (email);
SELECT * FROM users WHERE MATCH(email) AGAINST('test');

分页优化

-- 优化前:大偏移量分页性能差
SELECT * FROM orders ORDER BY created_at DESC LIMIT 10 OFFSET 100000;

-- 优化后:使用覆盖索引+JOIN
SELECT o.* FROM orders o
JOIN (SELECT id FROM orders ORDER BY created_at DESC LIMIT 10 OFFSET 100000) tmp ON o.id = tmp.id;

JOIN 优化

-- 优化前:笛卡尔积
SELECT * FROM users u, orders o WHERE u.id = o.user_id;

-- 优化后:显式 JOIN
SELECT * FROM users u JOIN orders o ON u.id = o.user_id;

🔗 相关资源

⚠️ 注意事项

  1. 生产环境谨慎 - 分析生产数据库时注意不要影响正常业务
  2. 权限要求 - 需要数据库的查询权限和慢查询日志读取权限
  3. 敏感信息 - 慢查询日志可能包含敏感数据,注意保护
  4. 资源消耗 - 分析大日志文件可能消耗较多内存
Install via CLI
npx skills add https://github.com/wnzzer/openclaw-skills --skill slow-query-analyzer
Repository Details
star Stars 1
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator