gpt4 book ai didi

database - 为什么 autovacuum 进程没有取回内存

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:59 26 4
gpt4 key购买 nike

我只是在经历一种情况,在这种情况下我根本没有得到我的问题的线索。

我有一个名为 names 的表(包含名称和时间列)。该表每分钟插入大量行。并且这些插入的记录将在特定时间间隔被删除。所以,最后我停止插入数据并删除了表中的所有行。

我的数据库版本详情

impss=# SELECT  version();
version
----------------------------------------------------------------------------------------------
PostgreSQL 8.3.7 on i486-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2
(1 row)

但是当我发出查找表大小时的查询时,我仍然得到一些大小。

impss=# SELECT  pg_size_pretty( pg_total_relation_size('names')) ;
pg_size_pretty
----------------
1504 kB
(1 row)

第一个问题,为什么我已经删除了表中的所有记录,但它仍然显示一些大小。

为了找到上次 autovacuum 完成的时间,我发出了以下查询:

当前时间是

impss=# select now(); 
now
----------------------------------
2012-11-08 20:21:10.550434+05:30
(1 row)

impss=# SELECT last_autovacuum from pg_stat_user_tables where relname='names';
last_autovacuum
----------------------------------
2012-11-08 17:51:31.995618+05:30

第二个问题:为什么在这个时间之后还没有执行 autovacuum 过程,尽管我的数据库不是很忙,而且我已经停止了对该表的所有事务。

所以,请告诉我是否必须进行任何特定配置才能进行频繁的清理,以便在删除记录后我可以取回所有空间。

最佳答案

第一个查询 - autovacuum 不调用 VACUUM FULL - 所以它对关系大小没有影响(通常,但是当没有其他请求访问关系时,它可以从头到尾修剪关系文件vacuum 执行),第二个查询 - 当 autovacuum_vacuum_threshold 行被修改并且修改的行/所有行高于 autovacuum_vacuum_scale_factor 时执行 autovacuum。这两个值都在 postgresql.conf 中,默认值为 50 行和 20%。

Autovacuum 的执行不依赖于当前的数据库负载——它只依赖于更新/删除的行数。

关于database - 为什么 autovacuum 进程没有取回内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com