温馨提示×

怎样分析linux慢查询日志

小樊
37
2026-09-29 14:16:46
栏目: 智能运维

在 Linux 环境下,“慢查询日志”通常不是指 Linux 系统本身的日志,而多见于数据库(如 MySQL、PostgreSQL)或Web 服务(如 Nginx、慢请求)。下面按常见场景说明如何分析慢查询日志。


一、MySQL 慢查询日志分析

1. 确认慢查询日志是否开启

SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'slow_query_log_file';
SHOW VARIABLES LIKE 'long_query_time';

开启方式(临时):

SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;  -- 超过1秒记录

2. 慢日志示例

# Time: 2026-01-21T10:00:00
# User@Host: app[app] @ localhost []
# Query_time: 3.521 Lock_time: 0.001 Rows_sent: 1 Rows_examined: 100000
SELECT * FROM orders WHERE user_id=123;

关键字段:

  • Query_time:执行时间
  • Rows_examined:扫描行数(越大越危险)
  • Rows_sent:返回行数

3. 使用 mysqldumpslow 分析

mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
  • -s t:按时间排序
  • -t 10:前 10 条

常用排序:

  • c:次数
  • t:时间
  • l:锁时间

4. 使用 pt-query-digest(推荐)

pt-query-digest /var/log/mysql/slow.log

可输出:

  • 最慢 SQL
  • 执行次数
  • 索引使用情况

二、PostgreSQL 慢查询日志

1. 配置

log_min_duration_statement = 1000  # 毫秒
logging_collector = on

2. 日志示例

LOG:  duration: 2000.123 ms  statement: SELECT * FROM users;

3. 分析方式

  • 手动 grep
grep duration postgresql.log | sort -n
  • 使用 pgBadger
pgbadger postgresql.log -o report.html

三、Linux 系统级“慢”(非数据库)

如果你指的是系统变慢,可看:

  • /var/log/messages
  • dmesg
  • top, iostat, vmstat

示例:

iostat -x 1
vmstat 1

四、Web 服务慢请求(Nginx)

log_format main '$request_time $upstream_response_time $request';

分析:

awk '{print $1}' access.log | sort -n | tail

五、分析思路总结

  1. 先确认慢的定义(时间阈值)
  2. 找出高频 + 高耗时的查询
  3. 看是否:
    • 缺索引
    • 全表扫描
    • 锁等待
  4. 优化 SQL 或加缓存

如果你能说明是 MySQL / PostgreSQL / Nginx / 系统层面,我可以给你更具体的分析命令和优化建议。

0 踩