use*_*531 4 postgresql vacuum postgresql-8.4 autovacuum
我使用的是较旧版本的 Postgres (8.4.20)。我知道 autovacuum 进程经常执行以释放删除或更新表中数据的查询的磁盘空间。我有一个不经常删除或更新的数据库。
在这样的数据库上处理 autovacuum 需要更少的时间和内存,还是仅取决于数据库中对象的大小和数量?
小智 12
首先,不再支持 8.4,因此请考虑升级。
自动清理设置记录。
让我们关注影响autovacuum何时启动的设置。您可能知道,此过程负责清理和分析表。
影响ANALYZE
频率的设置之一是autovacuum_analyze_threshold
。正如您可以从手册中读到的,此参数指定应更改ANALYZE
以触发的最小行数。这对小表很有用,但在大表和/或高活动表上,这将导致分析过于频繁。为了避免这种情况,存在另一个参数,即autovacuum_analyze_scale_factor
。它指定要添加到阈值的表的分数,以检查是否ANALYZE
应该启动。
假设我们有一个包含 10,000 行的表,其中 200 行发生了变化:
autovacuum_analyze_threshold
告诉我们,我们已经超过了默认值50
;autovacuum_analyze_scale_factor
(默认为0.1
)的分数,这给了我们 1000 行;1050
;ANALYZE
因此未启动(我们等待更多更改)。对于 ,VACCUM
还有一对具有完全相似行为的参数:autovacuum_vacuum_threshold
and autovacuum_vacuum_scale_factor
,除了吸尘的默认比例是0.2
或 20% 。
现在,您可以猜到,您的桌子越大,在其上触发 autovacuum 所需的时间就越多。因此,对于较大的表(通常超过 100 万行),强烈建议调整这些设置。您可以在每个表的基础上使用ALTER TABLE ... SET ( storage_parameter = ... )
语法。
设置*_scale_factor
为 0 并仅增加较大表的阈值可能很诱人。尽管如此,最好还是将 factor 保持为一个很小但非零的值,因为对于具有高活动性的表 100,000 行更改可能发生得太频繁,从而导致不必要的自动清理。在 pgsql-performance 列表中查看此线程。
归档时间: |
|
查看次数: |
4537 次 |
最近记录: |