记录困难查询
来自 PostgreSQL wiki
跳转到导航跳转到搜索如果您想找到系统中运行时间最长的查询,可以通过设置 log_min_duration_statement 为正值来实现,该值表示查询必须运行多少毫秒才能被记录。 在 PostgreSQL 8.4 及更高版本中,您可以使用 pg_stat_statements 来实现此目的,无需使用外部工具。
一些可以帮助您整理这些数据的工具包括:
- pgFouine。 其文档中提供了一些关于 log_min_duration_statement 和相关日志参数的更多提示。
- pgBadger。 其文档中也包含了关于 log_min_duration_statement 和相关日志参数的建议。
- PQA
- EPQA
- pgsi - 请参阅 介绍
如果您使用这些工具,您甚至可以考虑将最小持续时间设置为 0,从而记录所有语句。 这将对日志方面造成很大压力,但通过这些工具之一运行这些数据将使您深入了解服务器正在执行的操作。
导致查询暂停几秒钟的一个原因可能是检查点。 如果您定期看到许多查询都在同一时间结束时都花费了数秒钟,请考虑 记录检查点,看看这些时间是否一致,如果是,请相应地调整。
自动解释
在 PostgreSQL 中,Auto-Explain 贡献模块允许仅保存超过某个时间阈值的查询的解释计划。 看到糟糕的计划可以帮助确定查询为什么很慢,而不是只是很慢。 请参阅 等待 8.4 - 自动解释 了解一个示例。