实例参数调优建议
- 把vm.overcommit_memory设置为2。
- 不要配置OS使用大页。
- 使用gp_vmem_protect_limit设置实例可以为每个Segment数据库中执行的所有工作分配的最大内存。
- 通过下面的计算为gp_vmem_protect_limit设置值:
-
gp_vmem –数据库可用的总内存。
gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7
其中 SWAP是该主机的交换空间(以GB为单位),RAM是该主机的RAM(以GB为单位)。
-
max_acting_primary_segments – 当镜像Segment由于主机或者Segment失效而被激活时,能在一台主机上运行的最主Segment的最大数量。
-
gp_vmem_protect_limit,转换成MB来设置配置参数的值。
gp_vmem_protect_limit = gp_vmem / acting_primary_segments
-
- 在有大量工作文件被生成的场景下用下面的公式计算将工作文件考虑在内的gp_vmem因子。
gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM - (300KB * total_#_workfiles))) / 1.7
- 绝不将gp_vmem_protect_limit设置得过高或者比系统上的物理RAM大。
- 使用计算出的gp_vmem值来计算操作系统参数vm.overcommit_ratio的设置。
vm.overcommit_ratio = (RAM - 0.026 * gp_vmem) / RAM
- 使用statement_mem来分配每个Segment数据库中用于一个查询的内存。
- 使用资源队列设置活动查询的数目(ACTIVE_STATEMENTS)以及队列中查询所能利用的内存量(MEMORY_LIMIT)。
- 把所有的用户都与一个资源队列关联。不要使用默认的队列。
- 设置PRIORITY以匹配用于负载以及实际情况的队列的实际需要。
- 确保资源队列的内存分配不会超过gp_vmem_protect_limit的设置。
- 动态更新资源队列设置以匹配日常操作流。