九、GP安装笔记-GP集群调优

一、配置文件

GP集群数据库服务的配置文件存储在segment目录上,分为master节点和其他的segment节点,master节点配置存储在:

$MASTER_DATA_DIRECTORY/postgresql.conf

segment节点的配置文件存储在对应segment节点目录下的postgresql.conf,一些配置master节点和segment节点会存在差异。

二、配置项说明

配置官方文档:http://gpdb.docs.pivotal.io/580/ref_guide/config_params/guc_category-list.html,部分配置说明如下:

参数 说明 默认值 设置值
log_statement log_statement参数控制记录哪些SQL语句。有效值是none(off),ddl,mod和all。
1、ddl记录所有数据定义语句,例如CREATE,ALTER和DROP语句。
2、mod记录所有ddl语句,以及数据修改语句,如INSERT,UPDATE,DELETE,TRUNCATE和COPY FROM。 PREPARE,EXECUTE和EXPLAIN如果包含的命令是适当的类型,则也会记录ANALYZE语句。对于使用扩展查询协议的客户端,在收到执行消息时会发生日志记录,并且包含绑定参数的值(使任何嵌入的单引号标记翻倍)。
3、默认值是none。只有超级用户可以更改此设置。
注意:即使使用log_statement = all设置,也不会记录包含简单语法错误的语句,因为只有在完成基本分析以确定语句类型后才会发出日志消息。在扩展查询协议的情况下,该设置同样不记录在执行阶段之前(即,在分析或计划期间)失败的语句。将log_min_error_statement设置为ERROR(或更低)以记录此类语句。
node m:all v:none
checkpoint_segments 该参数可以为预写日志分配空间,primary和mirror节点之间数据同步是通过预写日志进行同步的,所有的修改会在应用生效之前写入日志,在master和standby节点之间,master会启动 wal sender进程发送数据,standby节点会会启动wal receiver进程接收数据。WAL会生成64MB的segment文件,segment最多的个数由参数checkpoint_segments而定,公式如下:2 * checkpoint_segments + 1。默认值为8,所以每个segment或master实例分配1088MB的WAL空间 8 8
max_connections 设置最大的连接数,取值范围为10-65536,segment的value值应该是master的值的5到10倍大小,增加max_connections的值,也应该增加max_prepared_transactions的值同时也要分配更多的shared_buffers m:250 v:750 m:500 v:1500
max_prepared_transactions 设置可以同时处在就绪状态的事务的个数的最大值。greenplum在内部使用准备好的事务来确保segment之间的数据完整性。这个值必须大于等于master的max_connections。segment应该设置和master一样的值。参考网址:http://gpdb.docs.pivotal.io/5160/security-guide/topics/Authenticate.html 250 500
shared_buffers 设置segment共享内存缓冲区的内存量,此值必须至少为128KB,每个连接至少分配16KB,最终值为>16K*max_connections,设置shared_buffers的时候同时要注意操作系统的SHMMAX和SHMALL两个参数值的设置,SHMAX单个共享内存分配的大小设置的值必须大于shared_buffers+other_seg_shmem的值,other_seg_shmem是GP集群共享内存计算部分,segment节点大约111MB,master节点大约79MB,SHMALL则是服务器最大的共享内存大小,设置的值: (num_instances_per_host * ( shared_buffers + other_seg_shmem )) + other_app_shared_mem 其中other_app_shared_mem 是其他应用使用的共享内存大小。 125MB 125MB
gp_resqueue_priority_cpucores_per_segment 设置每个segment分配的核心数,例如GP集群服务器有10core,总共有4个segment,那么每个segment就分配2.5,master就分配10,前提master节点没有部署其他segment 4 m:48 v:6
max_resource_queues 设置资源队列最大的个数 9 m:20 v:9
gp_vmem_protect_limit 设置每个segment的所有postgre进程消费的最大内存,单位MB,如果一个查询超出了该内存的设置,则会执行失败。计算公式如下:gp_vmem_protect_limit = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7 / acting_primary_segments,结果为GB需要转换成MB,通过参数可以计算出系统内核vm.overcommit_ration的值vm.overcommit_ratio =(RAM - (0.026 * ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7 ))/ RAM 8192 m:65536 v:24576
max_statement_mem 每个查询最大分配内存,参数值设置可以参考如下:(seghost_physical_memory) / (average_number_concurrent_queries) 2000MB 2000MB
statement_mem 每个查询分配内存,该内存不能超出max_statement_mem设置或者是资源队列限制的内存上限,如果设置gp_resqueue_memory_policy=auto,该参数和资源队列限制的内存将控制查询使用的内存量,计算公式可以如下设置:( gp_vmem_protect_limitGB * .9 ) / max_expected_concurrent_queries 128MB 500MB
work_mem segment用作sort、hash操作的内存大小 32MB 512MB

三、集群调优设置

1、4 core 8G内存 2个segment

gpconfig -c max_connections -v 30 -m 10
gpconfig -c max_prepared_transactions -v 10
gpconfig -c shared_buffers -v 8MB
gpconfig -c gp_resqueue_priority_cpucores_per_segment -v 0.5 -m 1
gpconfig -c gp_vmem_protect_limit -v 216 -m 512
gpconfig -c max_statement_mem -v 128MB
gpconfig -c statement_mem -v 64MB
gpconfig -c work_mem -v 32MB

2、24Core 128G 4个segment

gpconfig -c max_connections -v 1500 -m 500
gpconfig -c max_prepared_transactions -v 500
gpconfig -c gp_resqueue_priority_cpucores_per_segment -v 4 -m 6
gpconfig -c gp_vmem_protect_limit -v 10240 -m 16384
gpconfig -c statement_mem -v 500MB
gpconfig -c work_mem -v 512MB

你可能感兴趣的:(greenplum)