GreenPlum参数调优

GreenPlum参数调优

段设置

确定每个段主机上段数据库的个数对整体性能有着巨大影响。这些段数据库之间共享主机的 CPU 核、内存、网卡等,且和主机上的所有进程共享这些资源。过高地估计每个服务器上运行的段数据库个数,通常是达不到最优性能的常见原因之一。下因素确定了一个主机上可以运行多少个段数据库:

  • CPU 核的个数
  • 物理内存容量
  • 网卡个数及速度
  • 存储空间
  • 主段数据库和镜像共存
  • 主机是否运行 ETL 进程
  • 主机上运行的非 Greenplum 进程

段服务器内存配置gp_vmem_protect_limit

服务器配置参数 gp_vmem_protect_limit 控制了每个段数据库为所有运行的查询分配的内存总量。如果查询需要的内存超过此值,则会失败。使用下面公式确定合适的值:

(swap + (RAM * vm.overcommit_ratio)) * 0.9 / number_of_Segments_per_server

例如,具有下面配置的段服务器:

  • 8GB 交换空间

  • 128GB 内存

  • vm.overcommit_ratio = 50

  • 8 个段数据库

    则设置gp_vmem_protect_limit为 8GB:

(8 + (128 * .5)) * .9 / 8 = 8 GB

# 获取值
gpconfig -s  gp_vmem_protect_limit

https://blog.csdn.net/u010616985/article/details/44943361

[root@server14 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:         128769       13897       80259        3787       34611      110242
Swap:             0           0           0

[root@server14 ~]# sysctl -a | grep vm.overcommit_ratio
vm.overcommit_ratio = 50

汇总如下:
swap 0
mem 128G
vm.overcommit_ratio = 50
每个段主机有3 个段数据库n
 (swap + RAM) * 0.9/n  * HDP印象(0.6 )

(0+128*0.5)*0.9*0.6 = 24G
gp_vmem_protect_limit 

登录到master节点上执行以下命令即可

gpconfig -c gp_vmem_protect_limit -m 32768 -v 24576

-c : 改变参数的名称

-m : 修改主备master的内存的大小一般的和-v一块使用

-v : 此值用于所有的segments,mirrors和master的修改

改配置参考:https://cloud.tencent.com/developer/article/1447227

vm.overcommit_memory=2时,vm.overcommit_ratio生效。

vm.overcommit_memory=1时,该公式变为 (swap + RAM) * 0.9/n

shared_buffers的内存

gpconfig -s shared_buffers
gpconfig -c shared_buffers -v 8GB # 总内存的10%
只能配置segment节点,用作磁盘读写的内存缓冲区,开始可以设置一个较小的值,比如总内存的10%,然后逐渐增加,过程中监控性能提升和swap的情况。以上的缓冲区的参数为125MB,此值不易设置过大,过大或导致以下错误

查看最大连接数参数

最大连接数,Segment建议设置成Master的5-10倍。
max_connections = 200 #(master、standby)
max_connections = 1200 #(segment)

gpconfig -s max_connections
gpconfig -c max_connections -m 500 -m 2500

work_mem

work_mem 在segment用作sort,hash操作的内存大小当PostgreSQL对大表进行排序时,数据库会按照此参数指定大小进行分片排序,将中间结果存放在临时文件中,这些中间结果的临时文件最终会再次合并排序,所以增加此参数可以减少临时文件个数进而提升排序效率。当然如果设置过大,会导致swap的发生,所以设置此参数时仍需谨慎。刚开始可设置总内存的5%
128G * 5% 设置为 2G
gpconfig -s work_mem 
gpconfig -c work_mem -v 2048MB

statement_mem

设置每个查询在segment主机中可用的内存,该参数设置的值不能超过max_statement_mem设置的值,如果配置了资源队列,则不能超过资源队列设置的值。

服务器配置参数 gp_statement_mem 控制段数据库上单个查询可以使用的内存总量。如果语句需要更多内存,则会溢出数据到磁盘。用下面公式确定合适的值:

(gp_vmem_protect_limit * 0.9) / max_expected_concurrent_queries
例如,如果并发度为40, gp_vmem_protect_limit为8GB,则 statement_mem 为:

(8192MB * .9) / 40 = 184MB
每个查询最多可以使用 184MB 内存,之后将溢出到磁盘。

若想安全的增大 gp_statement_mem,要么增大 gp_vmem_protect_limit,要么降低并发。要增大gp_vmem_protect_limit,必须增加物理内存和/或交换空间,或者降低单个主机上运行的段数据库个数。

请注意,为集群添加更多的段数据库实例并不能解决内存不足的问题,除非引入更多新主机来降低了单个主机上运行的段数据库的个数。
gpconfig -s statement_mem
gpconfig -c statement_mem -v 256MB

gp_statement_mem

服务器配置参数 gp_statement_mem 控制段数据库上单个查询可以使用的内存总量。如果语句需要更多内存,则会溢出数据到磁盘

gp_workfile_limit_files_per_query

SQL查询分配的内存不足,Greenplum数据库会创建溢出文件(也叫工作文件)。在默认情况下,一个SQL查询最多可以创建 100000 个溢出文件,这足以满足大多数查询。

该参数决定了一个查询最多可以创建多少个溢出文件。0 意味着没有限制。限制溢出文件数据可以防止失控查询破坏整个系统。

如果数据节点的内存是512G的内存,表的压缩快的大小(block_size)是2M的话,计算为: 512G + 2 * 1000000 / 1024 ≈ 707 G 的空间,一般的表都是可以的,一般的此值不需要修改

gp_resqueue_priority_cpucores_per_segment

每个segment分配的分配的cpu的个数,例如:在一个20核的机器上有4个segment,则每个segment有5个核,而对于master节点则是20个核,master节点上不运行segment的信息,因此master反映了cpu的使用情况

gpconfig -c gp_resqueue_priority_cpucores_per_segment -m 16 -v  8 

maintenance_work_mem

global,CREATE INDEX, VACUUM等时用到,segment用于VACUUM,CREATE INDEX等操作的内存大小,缺省是16兆字节(16MB)。因为在一个数据库会话里, 任意时刻只有一个这样的操作可以执行,并且一个数据库安装通常不会有太多这样的工作并发执行, 把这个数值设置得比work_mem更大是安全的。 更大的设置可以改进清理和恢复数据库转储的速度。

max_statement_mem

设置每个查询最大使用的内存量,该参数是防止statement_mem参数设置的内存过大导致的内存溢出.

查看现有配置值
gpconfig -s max_statement_mem
 
Values on all segments are consistent
GUC          : max_statement_mem
Master  value: 2000MB
Segment value: 2000MB
 
修改配置
gpconfig -c max_statement_mem  -v 2000MB

参考

https://blog.csdn.net/u012948976/article/details/52695372

2019-11-17 调优汇总

master(16CPU 64G) segement(32CPU 128G 3个段数据库)




gpconfig -c shared_buffers -v 8GB
gpconfig -c max_connections -m 500 -m 2500
gpconfig -c work_mem -v 2048MB
gpconfig -c statement_mem -v 196MB
gpconfig -c gp_resqueue_priority_cpucores_per_segment -m 16 -v  8 

gpconfig -c gp_vmem_protect_limit -m 16384 -v 12288
gpconfig -c shared_buffers -v 1GB
gpconfig -c max_connections -m 600 -v 2500
gpconfig -c work_mem -v 1024MB
gpconfig -c statement_mem -v 196MB
gpconfig -c gp_resqueue_priority_cpucores_per_segment -m 16 -v  8 

gpconfig -c gp_vmem_protect_limit -m 16384 -v 12288
gpconfig -c shared_buffers -v 1GB
gpconfig -c max_connections -m 600 -v 2500
gpconfig -c work_mem -v 1024MB
gpconfig -c statement_mem -v 196MB
gpconfig -c gp_resqueue_priority_cpucores_per_segment -m 16 -v  8 

-----内存级优化

gpconfig -s temp_buffers
gpconfig -c temp_buffers -v 8092

gpconfig -c  log_min_duration_statement -v 5

[gpadmin@server04 ~]$ gpconfig -s max_statement_mem
Values on all segments are consistent
GUC          : max_statement_mem
Master  value: 2000MB
Segment value: 2000MB
[gpadmin@server04 ~]$ gpconfig -s temp_buffers 
Values on all segments are consistent
GUC          : temp_buffers
Master  value: 1024
Segment value: 1024
[gpadmin@server04 ~]$ gpconfig -c temp_buffers -v 8092
20191111:20:01:11:030462 gpconfig:server04:gpadmin-[INFO]:-completed successfully with parameters '-c temp_buffers -v 8092'
[gpadmin@server04 ~]$ gpconfig -c max_statement_mem
20191111:20:02:03:030965 gpconfig:server04:gpadmin-[ERROR]:-change requested but value not specified
change requested but value not specified
[gpadmin@server04 ~]$ gpconfig -s max_statement_mem
Values on all segments are consistent
GUC          : max_statement_mem
Master  value: 2000MB
Segment value: 2000MB
[gpadmin@server04 ~]$ gpconfig -s max_appendonly_tables
Values on all segments are consistent
GUC          : max_appendonly_tables
Master  value: 10000
Segment value: 10000
[gpadmin@server04 ~]$ gpconfig -s log_min_duration_statement
Values on all segments are consistent
GUC          : log_min_duration_statement
Master  value: -1
Segment value: -1
[gpadmin@server04 ~]$ gpconfig -c  log_min_duration_statement -v 5
20191111:20:03:13:031664 gpconfig:server04:gpadmin-[INFO]:-completed successfully with parameters '-c log_min_duration_statement -v 5'
[gpadmin@server04 ~]$ gpconfig -s  gp_vmem_protect_limit
Values on all segments are consistent
GUC          : gp_vmem_protect_limit
Master  value: 16384
Segment value: 12288
[gpadmin@server04 ~]$ gpconfig -s  gp_vmem_idle_resource_timeout
Values on all segments are consistent
GUC          : gp_vmem_idle_resource_timeout
Master  value: 18s
Segment value: 18s
[gpadmin@server04 ~]$ gpconfig -s  gp_resqueue_memory_policy
Values on all segments are consistent
GUC          : gp_resqueue_memory_policy
Master  value: eager_free
Segment value: eager_free
[gpadmin@server04 ~]$ gpconfig -s gp_enable_gpperfmon

Values on all segments are consistent
GUC          : gp_enable_gpperfmon
Master  value: off
Segment value: off
[gpadmin@server04 ~]$ 
[gpadmin@server04 ~]$ gpconfig -c gp_enable_gpperfmon -m on -v on
20191111:20:05:48:000640 gpconfig:server04:gpadmin-[INFO]:-completed successfully with parameters '-c gp_enable_gpperfmon -m on -v on'
[gpadmin@server04 ~]$ gpconfig -c shared_buffers
20191111:20:06:47:001246 gpconfig:server04:gpadmin-[ERROR]:-change requested but value not specified
change requested but value not specified
[gpadmin@server04 ~]$ gpconfig -c shared_buffers
20191111:20:06:51:001276 gpconfig:server04:gpadmin-[ERROR]:-change requested but value not specified
change requested but value not specified
[gpadmin@server04 ~]$ gpconfig -s shared_buffers
Values on all segments are consistent
GUC          : shared_buffers
Master  value: 1GB
Segment value: 1GB
[gpadmin@server04 ~]$ gpconfig -s gpperfmon_port
Values on all segments are consistent
GUC          : gpperfmon_port
Master  value: 8888
Segment value: 8888
[gpadmin@server04 ~]$ gpstop -u

你可能感兴趣的:(GreenPlum参数调优)