加载中...

| MySQL 核心参数 | slow_query_log、long_query_time |
| 分析工具 | pt-query-digest(Percona Toolkit) |
| PostgreSQL 等价方案 | pg_stat_statements 扩展 |
MySQL 中开启慢查询日志只需两个参数:slow_query_log = ON 和 long_query_time = 1(单位秒,可以是小数如 0.1)。超过阈值的查询会被写入日志文件,包含执行时间、扫描行数、返回行数、锁等待时间和完整 SQL。
还有一个容易忽略的参数 log_queries_not_using_indexes,开启后即使执行时间很短,没用到索引的查询也会被记录——对于发现潜在的全表扫描很有价值,尤其是在数据量小时查询快但生产数据量大后会崩溃的场景。[1]
原始日志往往体积庞大,需要汇总分析。pt-query-digest(Percona Toolkit 的一部分)是最常用的工具,能按查询摘要分组统计总执行时间、平均时间、最慢时间、执行次数,输出排名靠前的慢查询报告,精准定位哪条 SQL 在消耗最多资源。
PostgreSQL 通过 pg_stat_statements 扩展实现类似功能,以视图形式提供实时的查询统计,不需要解析日志文件:直接 SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10 就能拿到最耗时的语句。

| MySQL 核心参数 | slow_query_log、long_query_time |
| 分析工具 | pt-query-digest(Percona Toolkit) |
| PostgreSQL 等价方案 | pg_stat_statements 扩展 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧