PostgreSQL性能监控工具

时间:2008-08-31 19:47:35

标签: sql database optimization postgresql freebsd

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

7 个答案:

答案 0 :(得分:8)

数据库优化通常是两件事的组合

  1. 减少对数据库的查询次数
  2. 减少需要查看以回答查询的数据量
  3. 减少查询量通常是通过缓存非易失性/不太重要的数据(例如“哪些用户在线”或“此用户的最新帖子是什么?”)在应用程序内部(如果可能)或在外部 - 更高效 - 数据存储(memcached,redis等)。如果你有非常重量级的信息(例如命中计数器)并且不需要ACID - 语义,你也可以考虑将它从Postgres数据库移到更高效的数据存储。

    优化查询运行时更加棘手 - 这相当于创建special indexes(或indexes in the first place),更改(可能是非规范化)数据模型或更改应用程序在执行时所采用的基本方法使用数据库。例如,参见Pagination done the Postgres way Markus Winand关于如何重新思考分页概念以提高数据库效率的讨论

    测量查询的方式很慢

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

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

    pgfouinepgbadger都需要启用查询日志记录这一事实,这可能会导致数据库出现明显的性能问题,或者会导致磁盘空间问题。使用该工具解析日志可能需要相当长的时间,并且不会向您提供有关数据库内容的最新见解。

    加速扩展

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

    理解数据

    从信息角度来看,查询列表本身非常“干”。第三个扩展试图解决这个问题,并提供更好的数据表示pg_statsinfo(以及pg_stats_reporter),但这是一个启动和运行的承诺。< / p>

    为了更方便地解决这个问题,我开始研究一个专注于pg_stat_statementspg_stat_plans的商业项目,并增加从数据库中提取的大量其他数据所收集的信息。它被称为pganalyze,您可以在https://pganalyze.com/找到它。

    为了简要概述Postgres监控区域中有趣的工具和项目,我还开始在Postgres Wiki编制一份定期更新的列表。

答案 1 :(得分:6)

pgfouine对我来说效果很好。看起来它有一个FreeBSD port

答案 2 :(得分:3)

我稍微使用了pgtop。它非常粗糙,但至少我可以看到每个进程ID正在运行哪个查询。

我试过pgfouine,但如果我记得,那就是离线工具。

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

答案 3 :(得分:2)

Munin非常简单而有效地了解数据库如何随着时间的推移而发展和表现的趋势。在Munin的标准工具包中,您可以监视数据库的大小,锁的数量,连接数,顺序扫描,事务日志的大小和长时间运行的查询。

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

在这里查看Munin附带的最新postgresql插件:

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

查看Lightning Admin,它有一个用于捕获日志语句的GUI,并不完美,但可以满足大多数需求。 http://www.amsoftwaredesign.com

答案 6 :(得分:-1)

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

相关问题