PostgreSQL性能监控工具

11

我正在使用FreeBSD PostgreSQL搭建Web应用程序,我正在寻找一些数据库性能优化工具/技术。

7个回答

9
数据库优化通常是两个方面的结合:
  1. 减少对数据库的查询次数
  2. 减少需要查看的数据量以回答查询
减少查询次数通常通过在应用程序内部(如果可能)或在外部 - 更有效的数据存储(如memcached、redis等)中缓存非易失性/不太重要的数据(例如“哪些用户在线”或“这个用户的最新帖子是什么?”)来完成。如果您有非常写入密集型的信息(例如点击计数器)并且不需要ACID语义,您还可以考虑将其移出Postgres数据库以获取更高效的数据存储。
优化查询运行时间更加棘手 - 这可能涉及创建特殊索引(或首次索引),更改(可能是去规范化)数据模型或更改应用程序处理数据库时的基本方法。例如,可以查看Postgres方式实现分页演讲,了解如何重新思考分页概念以使其更具数据库效率,该演讲由Markus Winand主讲。

通过缓慢的方式测量查询

但要了解应首先查看哪些查询,您需要知道它们执行的频率以及平均运行时间有多长。

一种方法是记录所有(或“慢”)查询及其运行时间,然后解析查询日志。 pgfouine 是一个很好的工具,早在本讨论中就已经提到过它,但现在已被 pgbadger 取代,它使用一种更友好的语言编写,速度更快,维护得更加积极。 pgfouinepgbadger 都存在一个问题,即需要启用查询日志记录,这可能会对数据库造成显着的性能影响,或者导致磁盘空间不足,此外,使用工具解析日志可能需要相当长的时间,并且无法为您提供关于数据库中正在进行的实时信息。

使用扩展来加速

为了解决这些缺点,现在有两个扩展程序可以直接跟踪数据库中的查询性能-pg_stat_statements(仅适用于9.2版本或更新版本)和pg_stat_plans。这两个扩展程序提供相同的基本功能-跟踪特定的“规范化查询”(查询字符串减去所有表达式文字)已运行多少次以及总共花费了多长时间。由于这是在实际运行查询时完成的,因此效率非常高,合成基准测试中可测量的开销不到5%。

理解数据

从信息角度来看,查询列表本身非常“干燥”。有第三个扩展程序尝试解决这个事实并提供更好的数据表示,称为pg_statsinfo(以及pg_stats_reporter),但是将其启动需要一些工作。
为了解决这个问题,我开始着手一个商业项目,重点关注pg_stat_statementspg_stat_plans,并增强了从数据库中收集的大量其他数据的信息。它被称为pganalyze,您可以在https://pganalyze.com/找到它。
为了提供有关Postgres监视领域中有趣的工具和项目的简洁概述,我还开始在Postgres Wiki上编制定期更新的列表。

除了pganalyze之外,还有一些其他商业解决方案可以向您展示从pg_stat_视图收集的查询执行和性能的图表和详细信息。免责声明:我在其中一个公司工作 - okmeter.io。 - Pavel T

5

我尝试了pgfouine,它非常有帮助,但是为了使其工作,需要打开大量的日志记录,这确实会减慢PostgreSQL的速度! - Paul Tomblin
pgfouine的链接已经失效。 - technogeek1995

3
我用过一点pgtop,它相当粗糙,但至少我可以看到每个进程ID正在运行哪个查询。我尝试了pgfouine,但如果我没记错的话,它是一个离线工具。我还会tail psql.log文件,并将日志记录标准降至一个水平,以便我可以看到问题查询。
#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements
                                        # and their durations, > 0 logs only
                                        # statements running at least this time.

我还使用EMS Postgres Manager进行常规管理工作。它不会为您做任何事情,但它确实使大多数任务更加容易,并且使审查和设置模式更加简单。我发现,当使用GUI时,我更容易发现不一致之处(例如缺少索引、字段条件等)。这是我愿意在Mac上使用VMWare使用的两个程序之一。


2
Munin非常简单而又有效,可以获得数据库随时间演变和执行情况的趋势。在Munin的标准套件中,您可以监视数据库的大小、锁定数量、连接数量、顺序扫描、事务日志大小和长时间运行的查询等内容。
易于安装和入门,如果需要,您可以很容易地编写自己的插件。
在此处查看与Munin一起提供的最新postgresql插件:

http://munin-monitoring.org/browser/branches/1.4-stable/plugins/node.d/


1

1

首先要做的是使用“explain”从psql尝试所有查询,看看是否有可以通过添加索引或重写查询来转换为索引扫描的顺序扫描。

除此之外,我对这个问题的答案和你一样感兴趣。


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接