跳到主要内容
版本:1.0.13

如何使用HWR

设置扩展参数

我们可以在 postgresql.conf 中定义扩展参数。默认值:

hwr.topn = 20

要在每个排序的报告表中报告的顶级对象(语句、关系等)的数量。此外,此参数会影响样本的大小。我们希望在报表中显示的对象越多,则需要在样本中保留的对象就越多。

hwr.max_sample_age = 7

样本的保留时间(以天为单位)。样本、老化 hwr.max_sample_age 天数等将在下次take_sample()调用时自动删除。

hwr.track_sample_timings = off

当此参数打开时,HWR 将跟踪详细的采样计时。

hwr.max_query_length = 20000

报表的查询长度限制。报表中的所有查询都将截断到此长度。此设置不影响查询文本的收集。在示例期间收集完整的查询文本,因此可以获得。


样品

每个采样都包含自上一个采样以来有关数据库工作负荷的统计信息。

示例函数:

take_sample() 函数将收集所有已启用服务器的示例。服务器样本将逐个顺序采集。函数返回一个表:

server    name,
result text,
elapsed interval

server 是服务器名称。

result 是取样的结果。如果连续采集样本,则可为"OK",并且在异常情况下将包含错误文本。

elapsed是为服务器获取样本所经过的时间,此类返回使得使用 SQL 查询控制样本创建变得容易。

函数show_samples([server name,] [days integer]) 返回一个表,其中包含服务器(如果省略服务器,则假定为本地服务器)的最后几天的现有样本(如果省略则为所有现有样本):

sample           integer,
sample_time timestamp (0) with time zone,
sizes_collected boolean,
dbstats_reset timestamp (0) with time zone,
clustats_reset timestamp (0) with time zone,
archstats_reset timestamp (0) with time zone

sample 是示例标识符。

ample_time是采集此样本的时间。

如果在此示例中收集了所有关系大小,则设置sizes_collected。

dbstats_reset,clustats_reset和archstats_reset通常为空,但会包含pg_stat_database,pg_stat_bgwriter和pg_stat_archiver统计信息重置时间戳,因为以前的示例样本收集函数也支持服务器存储库,它将删除有关保留策略的过时样本和基线。


采集样品

我们必须至少创建2个样本,才能在第1个样本和第2个样本之间生成第一个报表。所有已启用服务器的示例都是通过调用 take_sample() 函数来获取的。不需要频繁创建样本。通常基本频率是每小时一个或两个样本。您可以使用类似 cron 的工具来计划示例创建。例如,30分钟周期:

*/30 * * * psql -c 'SELECT hwr.take_sample()' > /dev/null 2>&1

但是,此类调用不会对take_sample() 函数结果进行错误检查。考虑更智能地使用take_sample()函数,为您的监控系统提供结果。

对于成功采集样本的所有服务器,函数将返回"OK",并为出现故障的服务器显示错误文本:

halo0root=# select * from take_sample();
server | result | elapsed
--------+--------+-------------
node1 | OK | 00:00:00.36
(1 row)

实例数据保留

我们无法永久存储示例数据,因此我们有一个保留策略,可以在三个级别上定义保留期:

在 postgresql.conf 文件中设置参数 hwr.max_sample_age。这是一个常见的保留,如果没有定义其他保留,则它是有效的。

一般的,使用 show_samples() 函数获取存储库中现有样本的列表。此功能将显示检测到的统计信息重置时间。

select hwr.show_samples('node1',1);