Greeplum 优化 — 数据库参数配置
前期Greeplum安装关于服务器参数配置优化已经设置,集群安装完毕,对Greenplum常见加个参数调整
参考文档链接:https://gp-docs-cn.github.io/docs/admin_guide/topics/g-setting-a-local-configuration-parameter.html
参考官方全参数链接:https://gpdb.docs.pivotal.io/5100/ref_guide/config_params/guc-list.html
参数级别分类
服务器配置文件:postgresql.conf (和PostgreSQL一致)
在GP中master和所有segment都有自己的postgresql。conf文件。
Master Parameters - 仅仅在master instance上设置,查询时候这些值被传递至segment或被忽略。
Local Parameters - 每个segment从自己的配置文件中读取参数。必须在每个instance设置local参数(master+segments)
------设置配置参数------
很多参数的修改是受限的,如某些参数需要GP的超级用户、某些仅仅设置在系统级或需要重启数据库才能生效。
许多配置参数是session参数。该参数能够被设置在system级、database级、role级、session级的四个不同级别。
大部分的session参数能够被在自己的session中修改。
------设置Local参数------全局性质
要修改local参数,需要修改master和所有segment的postgresql.conf文件。
使用工具-pgconfig。
如:
$ gpconfig -c gp_vmem_protect_limit -v 4096MB
$ gpstop -r --修改完后,重启生效
------设置Master参数------
Master参数只能在GP的master节点中设置。
多个级别中都有设置相同的参数,则以最小登记为准。如:session覆盖role,role覆盖database,database覆盖system
[system级参数]
步骤如下:
1.编辑 $MASTER_DATA_DIRECTORY/postgresql.conf 文件
2.找到你要修改的参数,去掉注释(删掉前面的#),并且设置你想要的值
3.保存并关闭文件
4.对于session参数不需要重启服务,执行如下:
$ gpstop -u
5.对于需要重启服务的参数修改,执行如下:
$ gpstop -r
[database级参数]
当session参数设置在database级别,每个session连接到数据库时都要使用这个参数。
设置的database参数会覆盖system级的参数。
设置database级参数,使用ALTER DATABASE命令
如:
=# ALTER DATABASE mydatabase SET search_path TO myschema;
[role级参数]
当session参数设置在role级别,每个session通过role初始化时将使用此参数。
设置的role参数会覆盖database级的参数。
如:
=# ALTER ROLE bob SET search_path TO bobschema;
[session级参数]
任何session参数都能在活跃的session中设置,使用 SET 命令。
设置的session参数会覆盖role级的参数。
如:
=# SET work_mem TO '200MB';
=# RESET work_mem;
查看服务器参数
查看服务器配置参数设置
SQL命令SHOW允许用户查看当前的服务器配置参数设置。例如,要查看所有参数的设置:
$ psql -c 'SHOW ALL;'
SHOW只列出Master实例的设置。要查看整个系统(Master和所有的Segment)中一个特定参数的值,使用 gpconfig工具。例如:
$ gpconfig --show max_connections
参数配置种类
参考文档链接:https://gp-docs-cn.github.io/docs/admin_guide/topics/g-configuration-parameter-categories.html
以下例举常见:
注意:参数修改,都需重新加载配置文件 postgresql.conf 和 pg_hba.conf,使用命令:$ gpstop -u
effective_cache_size
(master节点,可以设为物理内存的60-80%)
这个参数告诉PostgreSQL的优化器有多少内存可以被用来缓存数据,以及帮助决定是否应该使用索引。这个数值越大,优化器使用索引的可能性也越大。因此这个数值应该设置成shared_buffers加上可用操作系统缓存两者的总量。通常这个数值会超过系统内存总量的50%以上。
查看现有配置值:
gpconfig -s effective_cache_size
Values on all segments are consistent
GUC : effective_cache_size
Master value: 512MB
Segment value: 512MB
修改配置
gpconfig -c effective_cache_size -v 40960MB
shared_buffers
只能配置segment节点,用作磁盘读写的内存缓冲区,开始可以设置一个较小的值,比如总内存的20%,然后逐渐增加,过程中监控性能提升和swap的情况。
gpconfig -s shared_buffers
Values on all segments are consistent
GUC : shared_buffers
Master value: 64MB
Segment value: 125MB
修改配置
gpconfig -c shared_buffers -v 1024MB
gpconfig -r shared_buffers -v 1024MB
temp_buffers: 即临时缓冲区,拥有数据库访问临时数据,GP中默认值为1M,在访问比较到大的临时表时,对性能提升有很大帮助。
查看现有配置值:
gpconfig -s temp_buffers
Values on all segments are consistent
GUC : temp_buffers
Master value: 1024
Segment value: 1024
修改配置
gpconfig -c temp_buffers -v 4096
max_connections
max_connections: 最大连接数,Segment建议设置成Master的5-10倍,默认是3倍
[gpadmin@master dbgen]$ gpconfig --show max_connections
Values on all segments are consistent
GUC : max_connections
Master value: 250
Segment value: 750
[gpadmin@master dbgen]$ gpconfig -c max_connections -v 2250 -m 750
20181102:15:05:43:000521 gpconfig:master:gpadmin-[INFO]:-completed successfully
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
statement_mem
设置每个查询在segment主机中可用的内存,该参数设置的值不能超过max_statement_mem设置的值,如果配置了资源队列,则不能超过资源队列设置的值。
计算公式为( gp_vmem_protect_limitGB * .9 ) / max_expected_concurrent_queries
例如:
gp_vmem_protect_limit 设置为 8192MB (8GB) ,查询的最大并发量为40,其中10%为缓存空间,则statement_mem计算如下:
(8GB * .9) / 40 = .18GB = 184MB
--------------------------------------------------------------------------------------------------------
查看现有配置值
gpconfig -s statement_mem
Values on all segments are consistent
GUC : statement_mem
Master value: 125MB
Segment value: 125MB
修改配置
gpconfig -c statement_mem -v 256MB
gp_vmem_protect_limit
gp_vmem_protect_limit参数 参考文档链接:https://gpdb.docs.pivotal.io/510/admin_guide/wlmgmt_intro.html
用户可以调整 gp_vmem_protect_limit来避免查询处理期间在Segment上耗尽内存限制,计算公式如下:
gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7
gp_vmem_protect_limit = gp_vmem / max_acting_primary_segments
例如,具有下面配置的段服务器:
4GB 交换空间
32GB 内存
4 个段数据库
((4 + 32) – (7.5GB + 0.05 * 32)) / 1.7 /4, 则设置gp_vmem_protect_limit 约为 4GB
[gpadmin@master dbgen]$ gpconfig -c gp_vmem_protect_limi-v 4000MB
work_mem
work_mem(global,物理内存的2%-4%),segment用作sort,hash操作的内存大小
当PostgreSQL对大表进行排序时,数据库会按照此参数指定大小进行分片排序,将中间结果存放在临时文件中,这些中间结果的临时文件最终会再次合并排序,所以增加此参数可以减少临时文件个数进而提升排序效率。当然如果设置过大,会导致swap的发生,所以设置此参数时仍需谨慎。
查看现有配置值
gpconfig -s work_mem
Values on all segments are consistent
GUC : work_mem
Master value: 32MB
Segment value: 32MB
修改配置
gpconfig -c work_mem -v 128MB
另一种写法:SET work_mem TO '64MB'
配置成功返回:
gpadmin-[INFO]:-completed successfully with parameters
mainteance_work_mem
global,CREATE INDEX, VACUUM等时用到,segment用于VACUUM,CREATE INDEX等操作的内存大小,缺省是16兆字节(16MB)。因为在一个数据库会话里, 任意时刻只有一个这样的操作可以执行,并且一个数据库安装通常不会有太多这样的工作并发执行, 把这个数值设置得比work_mem更大是安全的。 更大的设置可以改进清理和恢复数据库转储的速度。
查看现有配置值
gpconfig -s maintenance_work_mem
GUC : maintenance_work_mem
Master value: 64MB
Segment value: 64MB
修改配置
gpconfig -c maintenance_work_mem -v 256MB
gp_workfile_limit_files_per_query
SQL查询分配的内存不足,Greenplum数据库会创建溢出文件(也叫工作文件)。在默认情况下,一个SQL查询最多可以创建 100000 个溢出文件,这足以满足大多数查询。
该参数决定了一个查询最多可以创建多少个溢出文件。0 意味着没有限制。限制溢出文件数据可以防止失控查询破坏整个系统。
查看现有配置值
gpconfig -s gp_workfile_limit_files_per_query
Values on all segments are consistent
GUC : gp_workfile_limit_files_per_query
Master value: 100000
Segment value: 100000
gp_statement_mem
服务器配置参数 gp_statement_mem 控制段数据库上单个查询可以使用的内存总量。如果语句需要更多内存,则会溢出数据到磁盘。
用下面公式确定合适的值:
(gp_vmem_protect_limit * .9) / max_expected_concurrent_queries
例如,如果并发度为40, gp_vmeme_protect_limit为8GB,则 gp_statement_mem 为:
(8192MB * .9) / 40 = 184MB,每个查询最多可以使用 184MB 内存,之后将溢出到磁盘。
gp_resqueue_priority_cpucores_per_segment
master和每个segment的可以使用的cpu个数,每个segment的分配线程数;
查看现有配置值
gpconfig -s gp_resqueue_priority_cpucores_per_segment
Values on all segments are consistent
GUC : gp_resqueue_priority_cpucores_per_segment
Master value: 4
Segment value: 4
gpconfig -s checkpoint_segments
修改配置
gpconfig -c gp_resqueue_priority_cpucores_per_segment -v 8
max_prepared_transactions
这个参数只有在启动数据库时,才能被设置。它决定能够同时处于prepared状态的事务的最大数目(参考PREPARE TRANSACTION命令)。如果它的值被设为0。则将数据库将关闭prepared事务的特性。它的值通常应该和max_connections的值一样大。每个事务消耗600字节(b)共享内存。
查看现有配置值:
gpconfig -s max_prepared_transactions
Values on all segments are consistent
GUC : max_prepared_transactions
Master value: 250
Segment value: 250
修改配置
gpconfig -c max_prepared_transactions -v 300
max_files_per_process
设置每个服务器进程允许同时打开的最大文件数目。缺省是1000。 如果内核强制一个合理的每进程限制,那么你不用操心这个设置。 但是在一些平台上(特别是大多数BSD系统), 内核允许独立进程打开比个系统真正可以支持的数目大得多得文件数。 如果你发现有”Too many open files”这样的失败现像,那么就尝试缩小这个设置。 这个值只能在服务器启动的时候设置。
查看现有配置值:
gpconfig -s max_files_per_process
Values on all segments are consistent
GUC : max_files_per_process
Master value: 1000
Segment value: 1000
修改配置
gpconfig -c max_files_per_process -v 1000
gp_fts_probe_threadcount:
设置ftsprobe线程数,此参数建议大于等于每台服务器segments的数目。
查看现有配置值:
gpconfig -s gp_fts_probe_threadcount
Values on all segments are consistent
GUC : gp_fts_probe_threadcount
Master value: 16
Segment value: 16
重启数据库,使参数生效
gpstop -u 重新加载配置文件 postgresql.conf 和 pg_hba.conf
参考文档:http://blog.51cto.com/michaelkang/2170608
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 上一篇:Greenplum TPC-H 造数据
- 下一篇:Greenplum 数据备份恢复



