《Greenplum5.0 最佳实践》 内存与资源队列 (四)
Greenplum 内存参数的配置
如果认真配置系统参数可以很好的避免大部分内存溢出问题。
如果不能增加系统硬件资源,我们可以通过配置资源队列来管理任务,避免内存溢出。
当段数据库失效时,内存需求对于镜像段来说非常重要,因为它需要
推荐如下的系统设置和数据库内存参数设置
不要是用系统级别的大存储页
vm.overcommit_memory 系统级的参数设置。推荐设置为2, 它决定系统分配多少资源给进程使用。
vm.overcommit_ratio linux系统级别的参数设置。内存使用的百分比。默认设置为50.
如果这个值设置的太高,将会导致系统没有可用的资源,这也会导致段失败或者数据库失败
如果这个只设置的太低,将会导致查询的并发量和查询的复杂度,可以通过减少数据库集群的设置内存量实现。如果要增加该值,一定要记住保留部分资源留给操作系统使用。
gp_vmem_protect_limit . 段数据库上的全部工作所能申请的最大内存由该值控制。永远不要设置该值大于操作系统所含有的物理内存大小 (RAM)。如果设置太大,很容易引起问题,操作失败等。如果设置的值太小,也有问题。例如,真正系统需要内存时,会被制止。查询很可能会失败,因为hiting 受限。但是却可以很好的保护段数剧库失效和节点失效的问题。
runaway_detector_activation_percent 中止失控查询,引入到GPDB4.3.4,避免内存异常。这个参数 runaway_detector_activation_percent 系统参数控制 内存使用了 gp_vmem_protect_limit的到达某个百分比,然后去触发中止失控查询。这个值的默认值为90%。如果在段数据库上,使用的内存量超过这个百分比,GPDB将会根据内存使用情况中止查询。查询内存使用量低于要求的百分比,将不会被中止。
statement_mem 一个段数据库中,一条查询使用的内存量。如果多余该值的内存被申请,将会产生溢出文件到磁盘上。使用如下公式来确定 statement_mem 的值(vmprotect * 0.9) / max_expected_concurrent_queries
statement_mem 的默认值是125MB。例如, 一个查询运行在DEll EMC DCA V2 系统上,使用默认值将会改变为 1GB 内存对于每一个段数据库(8 segments * 125MB)。 在会话层面设置
statement_mem 去完成查询任务。这种设置任务将会降低查询的并发性。对于集群高并发使用资源队列来实现额外的控制,集群运行多少查询。
gp_workfle_limit_files_per_query 这个参数用来控制磁盘溢出文件的最大数量对于每一个查询任务。 溢出文件是在查询需要更多的内存资源时,创建的磁盘临时文件。当某一查询申请的磁盘溢出文件数量超过该值时,就会导致查询被中止。这个值默认是0,意味着对于查询语句的溢出文件数量没有限制,知道溢出文件数量填满整个文件系统为止。想想很疯狂。
gp_workfile_compress_algorithm 为溢出文件设置压缩算法,可以避免溢出文件太大的问题,减轻I/O操作的压力。
最后更新:2017-10-27 10:33:44