我正在设置一个带有FreeBSD PostgreSQL后端的web应用程序。我正在寻找一些数据库性能优化工具/技术。
发布于 2008-08-31 20:34:03
pgfouine对我来说运行得相当好。而且它看起来像是有一个FreeBSD port。
发布于 2013-12-06 19:18:56
数据库优化通常是两件事的组合
查询时需要查看的数据量
减少查询量通常是通过缓存非易失性/不太重要的数据来完成的。“哪些用户在线”或“此用户的最新帖子是什么?”)在应用程序内部(如果可能)或在外部更高效的数据存储(memcached、redis等)中。如果你得到的信息写得很重(例如命中计数器),并且不需要Postgres -semantics,你也可以考虑把它从Postgres数据库中移到更高效的数据存储中。
优化查询运行时更为棘手-这可能相当于创建special indexes (或indexes in the first place)、更改(可能是反规范化)数据模型或更改应用程序在使用数据库时所采用的基本方法。例如,请参阅Markus Winand关于如何重新考虑分页概念以提高数据库效率的Pagination done the Postgres way演讲
以较慢的方式测量查询
但是,为了理解应该首先查看哪些查询,您需要知道它们的执行频率以及它们平均运行多长时间。
一种方法是记录所有(或“慢”)查询,包括它们的运行时,然后解析查询日志。一个很好的工具是pgfouine
,它已经在前面的讨论中提到过,它已经被pgbadger
取代,它用更友好的语言编写,速度更快,维护也更积极。
pgfouine
和pgbadger
都需要启用查询日志记录,这可能会对数据库造成明显的性能影响,或者给您带来磁盘空间问题,此外,使用该工具解析日志可能需要相当长的时间,并且不会让您了解数据库中发生了什么。
通过扩展加速它
为了弥补这些缺点,现在有两个直接在数据库中跟踪查询性能的扩展- pg_stat_statements
(只在9.2或更高版本中有帮助)和pg_stat_plans
。这两个扩展提供了相同的基本功能-跟踪给定的“规范化查询”(查询字符串减去所有表达式文字)的运行频率以及总共花费了多长时间。由于这是在查询实际运行时完成的,因此这是以非常有效的方式完成的,在合成基准中,可测量的开销不到5%。
理解数据的含义
从信息的角度来看,查询列表本身是非常“枯燥”的。已经有第三个扩展试图解决这个问题,并提供更好的数据表示pg_statsinfo
(以及pg_stats_reporter
),但要让它启动并运行起来有点困难。
为了给这个问题提供一个更方便的解决方案,我开始从事一个商业项目,该项目主要关注pg_stat_statements
和pg_stat_plans
,并通过从数据库中提取大量其他数据来增强收集的信息。它叫做pganalyze
,你可以在https://pganalyze.com/上找到它。
为了提供Postgres监控领域中有趣的工具和项目的简明概述,我还开始在Postgres Wiki上编辑一个列表,该列表会定期更新。
发布于 2008-09-15 17:59:24
我用过一点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管理器来做一般的管理工作。它不会为您做任何事情,但它确实使大多数任务变得更容易,并使审查和设置您的模式变得更简单。我发现在使用GUI时,发现不一致(如缺少索引、字段标准等)要容易得多。这只是我愿意在苹果电脑上使用VMWare的两个程序中的一个。
https://stackoverflow.com/questions/37056
复制相似问题