确定PostgreSQL中有问题的查询

时间:2011-03-17 15:08:33

标签: postgresql

有时我支持的PostgreSQ数据库会超载。我需要查明导致数据库重载的确切查询。我在相关的时间范围内创建了一个pgFounie输出: http://bit.ly/f2aikx

在该报告中有一排 查询高峰:4个查询/秒于2011-03-15 10:41:06,2011-03-15 10:44:18,2011-03-15 10:48:25

目前尚不清楚上述时间戳是针对峰值的开始还是结束。

1 个答案:

答案 0 :(得分:1)

我不确定问题是什么,但我会抓住一些东西:

“查询峰值”指标指的是三个单独的秒,您可以看到每秒4个查询的峰值吞吐量。

以下是我如何确定您的问题查询:

  1. 为此实例定义“重载”。这将帮助您确定实际导致问题的原因。我们假设重载被定义为“慢查询”
  2. 检查pgFouine输出中的慢查询。它有助于在“花费最多时间(N)”部分的“查询”中对它们进行分组。在那里你也可以点击“显示示例”来查看一些让你感到悲伤的查询。
  3. 获取其中一些查询的示例并对其运行EXPLAIN ANALYZE以获取实际执行计划。
  4. 看看同时运行的其他计划。这些可能会导致I / O争用
  5. 自行分析计划,或使用http://explain.depesz.com/分析您的执行计划。注意桌子上的东西。
  6. 相应地调整查询或调整PostgreSQL设置。
  7. 冲洗并重复
  8. 从长远来看,我会将pgFouine中的设置更改为仅记录执行时间超过100毫秒的查询。您可以使用postgresql.conf文件中的log_min_duration_statement设置执行此操作。