代码之家  ›  专栏  ›  技术社区  ›  Brandon

PostgreSQL性能监控工具

  •  11
  • Brandon  · 技术社区  · 16 年前

    我正在设置一个带有FreeBSD PostgreSQL后端的Web应用程序。我正在寻找一些数据库性能优化工具/技术。

    7 回复  |  直到 8 年前
        1
  •  6
  •   Jason Baker    16 年前

    pgfouine 对我来说相当好。看起来有一个 FreeBSD port 为了它。

        2
  •  8
  •   Michael Renner    11 年前

    数据库优化通常是两个方面的结合

    1. 减少对数据库的查询数
    2. 减少回答查询时需要查看的数据量

    减少查询量通常是通过缓存非易失性/不太重要的数据来完成的(例如,“哪些用户在线”或“此用户的最新文章是什么?”)在应用程序内部(如果可能)或外部(更高效)数据存储(memcached、redis等)。如果你有写得很重的信息(如计数器),而且不需要 ACID -语义您还可以考虑将它从Postgres数据库移到更高效的数据存储中。

    优化查询运行时更复杂-这可能意味着创建 special indexes (或) indexes in the first place ,更改(可能取消规格化)数据模型或更改应用程序在处理数据库时所采用的基本方法。例如,请参见 Pagination done the Postgres way 说话 Markus Winand 如何重新思考分页的概念以提高数据库的效率

    缓慢地测量查询

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

    一种方法是记录所有(或“慢速”)查询,包括它们的运行时,然后分析查询日志。一个很好的工具是 pgfouine 这在前面的讨论中已经提到过,现在已经被替换为 pgbadger 它是用一种更友好的语言编写的,速度更快,维护更积极。

    两个 吡格芬 巴格杰 他们需要启用查询日志记录,这可能会对数据库造成显著的性能影响,或者会给您带来磁盘空间问题,此外,使用工具分析日志可能需要相当长的时间,并且不会给您提供有关数据库中发生的事情的最新见解。

    通过扩展来加快速度

    为了解决这些缺点,现在有两个扩展可以直接在数据库中跟踪查询性能。- pg_stat_statements (仅在版本9.2或更高版本中有用)和 pg_stat_plans . 两个扩展都提供了相同的基本功能——跟踪给定的“规范化查询”(查询字符串减去所有表达式文本)的运行频率以及总运行时间。由于这是在实际运行查询时完成的,所以这是以非常有效的方式完成的,在合成基准中可测量的开销小于5%。

    理解数据

    从信息的角度来看,查询列表本身非常“枯燥”。已经有第三个扩展的工作试图解决这个事实,并提供更好的数据表示称为 pg_statsinfo (连同) pg_stats_reporter 但这是一个小小的承诺,以使它启动和运行。

    为了给这个问题提供一个更方便的解决方案,我开始着手于一个专注于 pg_stat_语句 PGY- STATCORY方案 并增加了从数据库中提取的大量其他数据收集的信息。它叫 pganalyze 你可以在 https://pganalyze.com/ .

    为了简要概述Postgres监控领域中的有趣工具和项目,我还开始在 Postgres Wiki 定期更新。

        3
  •  3
  •   brianestes    16 年前

    我用过PGtop一点。它相当粗糙,但至少我可以看到为每个进程ID运行的查询。

    我试过pgfoine,但如果我记得的话,它是一个离线工具。

    我还跟踪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的两个程序中的一个。

        4
  •  2
  •   John P    15 年前

    Munin非常简单但有效,可以获得数据库随时间变化和性能的趋势。在munin的标准工具包中,您可以监控数据库的大小、锁的数量、连接的数量、顺序扫描、事务日志的大小和长时间运行的查询。

    易于设置和开始,如果需要,你可以很容易地编写自己的插件。

    查看munin随附的最新PostgreSQL插件:

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

        5
  •  1
  •   Paul Tomblin    16 年前

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

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

        6
  •  1
  •   Snorkel    16 年前

    看看Lightning Admin吧,它有一个用于捕获日志语句的GUI,虽然不是完美的,但对于大多数需求来说非常有用。 http://www.amsoftwaredesign.com

        7
  •  -1
  •   dhorton    13 年前

    德图纳 http://www.dbtuna.com/postgresql_monitor.php 最近开始支持PostgreSQL监控。我们广泛使用它来监控MySQL,所以如果它为Postgres提供了相同的功能,那么它也应该很适合您。