PostgreSQL 内存配置与MemoryContext的生命周期
PG/GP 内存配置
数据库可用的内存 gp_vmem
整个 GP 数据库可用的内存 gp_vmem:
>>> RAM = 128 * GB
>>> gp_vmem = ((SWAP + RAM) - (7.5*GB + 0.05 * RAM)) / 1.7
>>> print(gp_vmem / GB)
67.11764705882352
>>> RAM = 256 * GB
>>> gp_vmem = ((SWAP + RAM) - (7.5*GB + 0.05 * RAM)) / 1.7
>>> print(gp_vmem / GB)
138.64705882352942
内存上限 gp_vmem_protect_limit
每个 Segment 可用的内存上限 gp_vmem_protect_limit:
max_acting_primary_segments = num_segments + 3
gp_vmem_protect_limit = gp_vmem / max_acting_primary_segments
内存配额 gp_statement_mem
每个 Segment 可用的内存配额 gp_statement_mem:
gp_statement_mem = (gp_vmem_protect_limit * 0.9) / max_expected_concurrent_queries
gp_statement_mem = (8192 MB * .9) / 40 = 184MB
注意:实际上的配置名称为statement_mem,并且其值不能突破max_statement_mem的限制。
并发量 max_parallel_workers_per_gather
并发量与内存息息相关,并发越大启动的进程越多,消耗的内存则越大。
show max_parallel_workers; -- default 60
show max_parallel_workers_per_gather; -- default 2
set max_parallel_workers_per_gather = 5;
官方参考文档:
- https://gp-doc

本文介绍了PostgreSQL的内存配置,包括gp_vmem、gp_vmem_protect_limit、gp_statement_mem等参数,强调了并发量与内存的关系。同时,深入探讨了MemoryContext的生命周期,分为query_context、tuple_context和expr_context,详细阐述了它们的创建、使用和释放过程,以及MemoryContext的相关操作如创建、切换和释放。

1064

被折叠的 条评论
为什么被折叠?



