内存管理
内存管理配置在 mot.conf 中:
#配置允许在MOT引擎中运行的最大线程数。
#当不使用线程池时,此值实际上限制了可以与MOT表并发交互的会话数。此值不限制非MOT会话。使用线程池时,此值限制可以与MOT表并发交互的工作线程数。
#max_threads = 1024
#配置允许在MOT引擎中运行的最大连接数。
#不管线程池配置如何,这个值限制了可以与MOT表并发交互的会话数。此值不限制非MOT
#会话。
#max_connections = 1024
#配置未使用线程池时线程的关联模式。
#使用线程池时,将忽略此值。
#有效值为:fill socket first、equal per socket、fill physical first、none。
#Fill-socket-first将线程连接到同一个socket中的核心,直到socket已满然后移动到下一个socket。
# Equal-per-socket在所有socket之间均匀地分布线程。
#Fill-physical-first将线程附加到同一套socket中的物理核心,直到所有物理内核被使用,然后移动
#到下一个socket。当所有物理核心被使用过时,这个过程又从超线程内核开始。
#None禁用任何关联配置,并让系统调度程序决定每个线程在哪个核心上调度。
#affinity_mode = fill-physical-first
#配置内存桶目录模式(用于内存桶查找)。
#Lazy模式配置桶目录以按需加载它的一部分,从而减少初始内存占用(大约从1GB到1MB),但
#在内存不足的极端情况下,可能会导致轻微的性能损失和错误。另一方面,使用非延迟桶目录确实#会导致额外的1GB的初始内存分配,但会稍微提高性能,并确保在内存不足期间避免桶目录误。
#lazy_load_chunk_directory = true
#配置内存保留模式(物理或虚拟)。
#每当从内核分配内存时,都会查询这个配置值,以确定分配的内存是驻留的(物理的)还是不是
#(虚拟的)。这主要与预分配有关,但也与运行时分配有关。在物理保留模式的情况下,通过在内
#存区域跨越的所有页面上强制页面错误,使整个分配的内存区域驻留。配置虚拟内存保留可能会提#内存分配速度(特别是在预分配阶段),但在首次访问时可能会导致页面错误(因此可能会导致性
#能轻微下降),并且在物理内存不可用的情况下,会出现更严重的错误。另一方面,物理内存分配
#比较慢,但是以后的访问既快又有保障。
#reserve_memory_mode = virtual
#配置内存存储策略(压缩或扩展)。
#定义压缩策略后,未使用的内存将释放回内核,直到达到内存下限(请参阅下面的#min_mot_memory)。在扩展策略中,未使用的内存存储在MOT引擎中以供以后重用。紧凑的存储
#策略会减少MOT引擎的内存占用,但有时可能会导致性能轻微下降。此外,还可能导致在内存销
#毁时内存不可用。另一方面,扩展模式使用更多内存,但同时允许更快的内存分配,并且在取消分#配后可以更大程度地保证内存可以重新分配。
#
#store_memory_policy = compact
#配置全局内存的块分配策略。
#可用值:auto、local、page-interleaved、chunk-interleaved、native。
#MOT内存是以每个2M的桶来组织的。源NUMA节点和每个桶的内存布局会影响表数据在#NUMA节点之间的传播,因此会显著影响数据访问时间。每当在特定NUMA节点上分配内存桶
#时,都会参考分配策略。
#自动策略基于当前硬件选择内存桶分配策略。
#本地策略在其各自的NUMA节点上分配每个内存桶。
#页面交错策略从所有NUMA节点分配由交错内存4KB页组成的内存桶。
#Chunk-interleaved策略以循环方式从所有NUMA节点分配内存桶。
#本机策略通过调用本机系统内存分配器来分配内存桶。
#
#chunk_alloc_policy = local
# 配置参与内存预分配的每个NUMA节点的工作线程数。
#
#chunk_prealloc_worker_count = 8
#配置MOT引擎全局内存的最大内存限制。
#MOT引擎内存分为全局(长期)内存,主要用于存储用户数据;本地(短期)内存主要用于用户会话以满足本地需求。
#任何超过此限制的内存分配尝试都将被拒绝,并将错误报告给用户。
#请注意max_mot_global_memory和max_mot_local_memory之和不能超过postgresql.conf中配置的
#最大进程内存
#max_mot_global_memory = 10 GB
#配置MOT引擎全局内存的最小内存限制。
#此值用于在启动期间预先分配内存,也用于确保MOT引擎在其正常运行期间有最小数量的内存可用。当使用压缩存储策略(请参阅上面的store_memory_policy)时,此值指定内存不释放回内核,而是保留在MOT引擎中以供以后重用的下限。
#
#min_mot_global_memory = 0 MB
#配置MOT引擎本地内存的最大内存限制。
#MOT引擎内存分为全局(长期)内存,主要用于存储用户数据;本地(短期)内存主要用于用户
#会话以满足本地需求。任何超过此限制的内存分配尝试都将被拒绝,并将错误报告给用户。
#请注意max_mot_global_memory和max_mot_local_memory之和不得超过postgresql.conf配置的#max_process_memory.
#max_mot_local_memory = 2 GB
#配置MOT引擎本地内存的最小内存限制。
#此值用于在启动期间预先分配内存,也用于确保MOT引擎在其正常运行期间有最小数量的内存可
#用。当使用压缩存储策略(请参阅上面的store_memory_policy)时,此值指定内存不释放回内核,#而是保留在MOT引擎中以供以后重用的下限。
#min_mot_local_memory = 0 MB
#配置内存分配的高红色标记。
#这是max_mot_memory配置的最大MOT引擎的百分比。当MOT的总内存使用量达到此红色标记时,只允许进行破坏性操作,而所有其他操作都将导致向用户报告错误。
#high_red_mark_percent = 90
#为会话配置大型分配缓冲存储区。
#当一个用户会话执行一个需要大量内存的查询时,使用大的缓冲存储器来确保这样的内存是可用的。任何超过1022kb的会话内存分配都被视为大内存分配。如果大的分配缓冲区没有启用或耗尽,那么这种分配将直接从内核分配。
#session_large_buffer_store_size = 0 MB
#为会话配置大型分配缓冲区存储区中的最大对象大小。
#在内部,大型缓冲存储器被划分为不同大小的对象。此值既用于设置来自大型缓冲存储器的对象的上限,也用于确定缓冲存储器的内部划分为不同大小的对象。
#session_large_buffer_store_max_object_size = 32 MB
#配置会话分配的单个巨大内存分配的最大大小。
#巨大的分配是直接从内核提供的,所以不能保证成功。
#此值也适用于全局(即与会话无关)内存分配。
#session_max_huge_object_size = 1 GB