我想了解一些postgresql.conf参数的分配。我想知道何时分配maintenance_work_mem、work_mem和temp_buffers。
根据我的理解,
我已经看过医生了,但没有得到任何正确的答复。
这种理解是正确的吗?
发布于 2021-06-14 08:32:52
维护工作方法是为每个会话分配真空、创建索引和添加外键,它也依赖于类似于autovacuum_max_workers =3和maintenance_work_mem =1GB的并行工作人员,那么在创建索引时,自动真空将同样地消耗1*3= 3GB内存。
现在,work_mem也会根据您的排序/散列操作来分配每个会话,但是我确信Postgres不会保留将来用于调优这个会话的任何东西,而且在分配这个内存之前,您应该始终考虑您的并行连接的数量,因为这个参数会消耗每个连接在集群中运行的内存work_mem*sort操作。
是的,确实可以在单个会话中更改temp_buffers,但只能在会话中第一次使用临时表之前进行更改。
http://rhaas.blogspot.com/2019/01/how-much-maintenanceworkmem-do-i-need.html由Robert Hass https://www.depesz.com/2011/07/03/understanding-postgresql-conf-work_mem/由Deprez https://www.interdb.jp/pg/pgsql02.html和https://severalnines.com/database-blog/architecture-and-tuning-memory-postgresql-databases提供,非常有助于理解内存体系结构。
发布于 2021-06-14 10:53:55
work_mem是执行计划中的单个步骤可以使用的最大内存。它由执行查询时释放的执行器分配。maintenance_work_mem是相同的,但是对于CREATE INDEX和VACUUM.这样的维护操作来说是一样的
temp_buffers用于缓存临时表,并在数据库会话期间继续使用。https://stackoverflow.com/questions/67966556
复制相似问题