在 pg_restore 期间检查点发生得太频繁

Séb*_*ent 17 postgresql configuration restore checkpoint

在 PostgreSQL 9.2.2(Windows 32 位)下,我有一个pg_restore命令可以系统地导致有关检查点频率的日志警告,例如:

LOG:  checkpoints are occurring too frequently (17 seconds apart)
HINT:  Consider increasing the configuration parameter "checkpoint_segments".
Run Code Online (Sandbox Code Playgroud)

该数据库大小约为 3.3 Gb,具有 112 个表/160 个视图,并在大约 14 分钟内恢复。

在 a 期间发生这种情况是否正常pg_restore

Erw*_*ter 19

在整个数据库还原期间并不少见,因为这是一项异常庞大的操作。如果您在正常操作期间看到这一点,请考虑checkpoint_segments永久提高您的设置,就像错误消息提示一样。

您可能会遇到checkpoint_segments在恢复之前设置更高然后再次降低它的麻烦。这甚至是手册所建议的(包括解释)

临时增加checkpoint_segments配置变量也可以使大数据加载速度更快。这是因为将大量数据加载到 PostgreSQL 中会导致检查点比正常的检查点频率(由checkpoint_timeout配置变量指定)更频繁地发生 。每当检查点发生时,所有脏页都必须刷新到磁盘。通过checkpoint_segments在批量数据加载期间临时增加 ,可以减少所需的检查点数量。

更详细的相关答案:

Postgres 9.5

即将发布的新版本采用了更智能的方法。引用测试版发行说明

checkpoint_segmentsmin_wal_sizemax_wal_size(Heikki Linnakangas)替换配置参数

这允许分配大量 WAL 文件而不保留它们(如果不需要它们)。因此,默认值max_wal_size 已增加到1GB.

旁白:视图的数量几乎不相关,那些不包含任何数据,只是“配方”,即:查询和视图的一些属性。对于手头的问题,基本上只有备份文件的总大小很重要。