gpt4 book ai didi

postgresql - 为什么 autovacuum 进程占用这么多内存和交换内存?

转载 作者:行者123 更新时间:2023-11-29 11:57:43 34 4
gpt4 key购买 nike

我们有一个产品日志数据库,它只产生insert sql。但是我们发现autovacuum 进程占用了如此多的内存。它在峰值时需要大约 16 GB,而且它是大约每2个月发生一次。以下是详细信息,有人知道吗?

而表skytf.urs_user_log_201105只有insert操作,没有更新,删除操作,所以我认为该表没有死元组!但为什么 autovacuum进程在表上占用这么多内存?

--top detail 
top - 16:39:46 up 225 days, 1:12, 1 user, load average: 1.29, 1.51, 1.52
Tasks: 341 total, 2 running, 339 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.8%us, 5.3%sy, 0.0%ni, 85.5%id, 4.1%wa, 0.0%hi, 0.4%si, 0.0%st

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29267 postgres 14 -1 27.0g 16g 2928 S 1.0 72.2 199:59.74 postgres: autovacuum launcher process

从上面我们可以看出autovacuum进程占用了大约16gb;

--current sql
postgres=# select datname, current_query from pg_stat_activity where current_query !='<IDLE>';
datname | current_query
----------+-------------------------------------------------------------------------------------
skytf | autovacuum: VACUUM skytf.urs_user_log_201105 (to prevent wraparound)




--table size
skytf=> \dt+ urs_user_log_201105
List of relations
Schema | Name | Type | Owner | Size | Description
--------+---------------------+-------+--------+-------+-------------
skytf | urs_user_log_201105 | table | skytf | 62 GB |
(1 row)

--memory state
postgres@logdb-> free -m
total used free shared buffers cached
Mem: 24104 24028 75 0 4 5545
-/+ buffers/cache: 18479 5625
Swap: 16386 8824 7561

最佳答案

如果你看这个:

autovacuum: VACUUM skytf.urs_user_log_201105 (to prevent wraparound)

这不是一个常规的 autovacuum。它正在运行以防止事务回绕。这种 autovacuum 必须在事务 ID 超过 20 亿之前运行。在这里阅读更多: http://www.postgresql.org/docs/8.3/static/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND

您可以使用 vacuum_freeze_min_agevacuum_freeze_max_age 控制它的行为。无论您是否禁用了 autovacuum,都无法禁用这种类型的 autovacuum

关于postgresql - 为什么 autovacuum 进程占用这么多内存和交换内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6355416/

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