官方文档:http://gpdb.docs.pivotal.io/4330/ref_guide/guc_config.html
连接和权限认证参数
这些参数控制客户端连接和权限认证。
连接参数
- gp_vmem_idle_resource_timeout
- listen_addresses
- max_connections
- max_prepared_transactions
- superuser_reserved_connectionstcp_keepalives_count
- tcp_keepalives_idle
- tcp_keepalives_interval
- unix_socket_directory
- unix_socket_group
- unix_socket_permissions
- gp_vmem_idle_resource_timeout:默认18s,当连接空闲时间超过该值时,服务端回释放掉其资源,但不断开连接
- listen_addresses:服务器监听端口号,默认为*,如果该值为空则只允许UNIX-domain sockets连接
- max_connections:最大连接数,master上250,segments上750。segment上最大连接数量应该是master上的5-10倍,当增加这个参数时,也要增加max_prepared_transactions参数。增加这个参数可能到时GP需要更多的共享内存。
- max_prepared_transactions:该值至少要和master的最大连接数相等。设置处于准备好状态的事务数,master和segement的该配置项要相等。默认250.
- superuser_reserved_connections:为超级用户设置的保留连接槽位,例如该值设置为3,总连接数为100,则总是会保留3个连接给超级管理员
- tcp_keepalives_count:tcp的心跳包,丢失若干次则认为断开,默认0.需要TCP_KEEPCNT支持才生效
- tcp_keepalives_idle:与其他空闲连接发送保持连接的秒数。默认0,需要TCP_KEEPIDLE支持才生效
- tcp_keepalives_interval:等待响应的秒数,超过这个时间间隔则重传。默认0,需要TCP_KEEPINTVL支持才生效
- unix_socket_directory:
- unix_socket_group:
unix_socket_permissions:
权限认证参数
- authentication_timeout
- db_user_namespace
- krb_caseins_users
- krb_server_keyfilekrb_srvname
- password_encryption
- ssl
- ssl_ciphers
- authentication_timeout:客户端连接超时时间,默认1分钟。修改后重启生效。防止因为客户端挂起而无限占用连接。
- db_user_namespace:默认关闭,打开的话,创建的用户会自动在后面加上@dbname,如果创建全局用户的话,就要username@
- krb_caseins_users:对kerberos用户是否大小写不敏感,默认是大小写敏感的(off)
- krb_server_keyfile:
- krb_srvname:
- password_encryption:密码加密,默认开启
- ssl:启用ssl连接,默认关闭。
- ssl_ciphers:指定可用的ssl算法,默认all.
系统资源消耗参数
内存消耗参数
这些参数控制系统的内存使用,可以通过调整gp_vmem_protect_limit来避免segment hosts在查询过程中内存耗尽。
- gp_vmem_idle_resource_timeout
- gp_vmem_protect_limit
- gp_vmem_protect_segworker_cache_limit
- gp_workfile_limit_files_per_query
- gp_workfile_limit_per_query
- gp_workfile_limit_per_segment
- max_appendonly_tables
- max_prepared_transactionsmax_stack_depth
- shared_buffers
temp_buffers
gp_vmem_idle_resource_timeout:默认18s,当连接空闲时间超过该值时,服务端回释放掉其资源,但不断开连接
- gp_vmem_protect_limit:默认8192,内存资源限制。计算公式为(x单台机器物理内存)/主segment数目。x为1到1.5之间。例如物理机126G内存,主segment16个。(1126)/16=7.875GB.7.875*1024=7971MB,则该值设置为7971。 当查询需要的内存达到这个上限,内存不能够再分配,将导致查询失败。
- gp_vmem_protect_segworker_cache_limit:??? cache限制,当查询执行器消耗的内存超过这个上限,这个过程不会缓存下来,不会为后续的查询提供缓存。默认500MB。如果系统有大量的连接或者是空闲的进程,可以减小这个上限来释放内存。
- gp_workfile_limit_files_per_query:每个查询最大可使用的tmp spill file数目,当超过上限时查询终止。默认100000,设置为0为不限制。(在执行查询时,当需要的内存大于给分配的内存时就会在硬盘上产生spill files)
- gp_workfile_limit_per_query:每个查询允许的最大的tmp spill file占用的磁盘空间,默认0,不限制。
- gp_workfile_limit_per_segment:每个segment上所有tmp spill files能够占用的最大磁盘空间,默认0不限制。
- max_appendonly_tables:默认10000 ,append-optimized表能够并发读写的最大数目,计算数目时分区表和子分区表视为单独的表
- max_prepared_transactions:该值至少要和master的最大连接数相等。设置处于准备好状态的事务数,master和segement的该配置项要相等。默认250.
- max_stack_depth:声明服务器的执行栈的最大安全深度。该值不要超过ulimit -s得出来的值,最好比ulimit -s小于1024。默认2MB。
- shared_buffers:默认128MB,共享缓冲区。至少是128KB并且至少是max_connections的16K倍。
- temp_buffers:临时缓冲区,用户缓存临时表,默认1024
FreeSpaceMap参数
- 这些参数控制free space map的大小,free space map里记录失效的行数据。通过使用VACUUM回收free space map的磁盘空间。
- max_fsm_pages
- max_fsm_relations
- max_fsm_pages:设置在共享的自由空间映射表里自由空间会跟踪的最大数目的磁盘页面数。每个页面槽位需要消耗六个字节的共享内存,默认200000,该值必须要大于16 *max_fsm_relations.
max_fsm_relations:设置自由空间将在共享地自由空间映射里跟踪的最大数目的关系(表和索引)。该值需要设置成大于所有的表数量+索引数+系统表数量,每一个大概会消耗60bytes内存。默认1000。
Cost-Based Vacuum 延迟参数
可以通过配置VACUUM和ANALYZE的执行消耗来减少在并发场景下的I/O影响。当I/O操作累加消耗达到阈值时,暂停VACUUM和ANALYZE的执行一会儿,然后累加清零,继续执行。
(Warning: GP不建议Cost-Based Vacuum 延迟,因为这个延迟在各个segment实例上是异步执行的。累加消耗和延迟在segment级别,而没有考虑到整个segment集群的运行情况。)如何理解?- vacuum_cost_delay
vacuum_cost_limit
vacuum_cost_page_dirtyvacuum_cost_page_hit
- vacuum _cost_page_miss
- vacuum_cost_delay:???当执行vacuum或analyze时累计的磁盘I/O消耗带到上限时,睡眠时间毫秒数。0禁止cost-based vacuum delay. 默认0.
- vacuum_cost_limit:???当执行vacuum累计的磁盘I/O消耗带到上限时,vacuum会睡眠。默认200.
- vacuum_cost_page_dirty:???修改一个数据块的代价,主要是将脏数据块写到磁盘上需要的I/O
- vacuum_cost_page_hit:修改共享缓存区buffer的代价
- vacuum_cost_page_miss:从磁盘上读入内存的代价
- vacuum_freeze_min_age:???在表扫描的时候,它之前更旧的XID将被替换为FrozenXID. FrozenXID不遵循与普通XID比较的规则,它被认为总是比任何普通的XID旧的。
Transaction ID管理参数参数
- xid_stop_limit
xid_warn_limit
xid_stop_limit:设置事务ID号,到达此ID号上限时停止创建新事务,会产生fatal error,以避免因为事务ID号循环造成的数据丢失。当达到上限值时GP无法响应,需要一些步骤恢复,详见GP Admin文档。取值范围在1千万到二十亿,默认为10亿。
- xid_warn_limit:设置事务ID号,到达此ID号时发出warning提醒执行vacuum,以避免因为事务ID号循环造成的数据丢失。取值范围在1千万到二十亿,默认为5亿。
查询调优参数
查询计划功能控制参数
这些参数控制查询规划器采用哪种运算。打开或关闭某种运算能够强制查询规划器选择另一个不同的查询计划。这在使用不同的查询计划测试、比较查询性能时很有用。
- enable_bitmapscan
- enable_groupagg
- enable_hashagg
- enable_hashjoin
- enable_indexscan
- enable_mergejoin
- enable_nestloop
- enable_seqscan
- enable_sort
- enable_tidscan
- gp_enable_adaptive_nestloop
- gp_enable_agg_distinctgp_enable_agg_distinct_pruning
- gp_enable_direct_dispatch
- gp_enable_fallback_plan
- gp_enable_fast_sri
- gp_enable_groupext_distinct_gather
- gp_enable_groupext_distinct_pruning
- gp_enable_multiphase_agg
- gp_enable_predicate_propagation
- gp_enable_preunique
- gp_enable_sequential_window_plans
- gp_enable_sort_distinct
- gp_enable_sort_limit
- enable_bitmapscan:默认打开, 允许查询计划使用bitmap-scan。与Bitmap Index Scan不同。
- enable_groupagg:默认打开,允许查询计划使用groupAggregate,GroupAggregate会对group by后面字段所有的数据做全扫描排序。
- enable_hashagg:默认打开,允许查询计划启动hashAggregate,group by后的字段会做次hash
- enable_hashjoin:默认打开,允许查询计划使用hash join
- enable_indexscan:默认打开
- enable_mergejoin:默认关闭,和hash join的差别在于,merge join在Join的时候做的是排序而不是hash.
- enable_nestloop:默认关闭,执行计划时使用嵌套join
- enable_seqscan:默认打开
- enable_sort:默认打开
- enable_tidscan:默认打开,TID(tuple identifer)
- gp_enable_adaptive_nestloop:查询计划能使用adaptive_nestloop做join,当外层数据行数大于阈值时,查询规划器偏向于选择hash join, 而不是nestloop join
- gp_enable_agg_distinct:默认打开
- gp_enable_agg_distinct_pruning:默认打开
- gp_enable_direct_dispatch:默认打开。是否允许将查询计划直接发送到单个segment上,当查询的数据都在同一个segment上时,直接给该segment发送查询计划相比于对所有segment都发送查询计划要快,主要是节省了响应时间,不过相应的master上会多一些cpu消耗。
- gp_enable_fallback_plan:默认打开
- gp_enable_fast_sri:默认打开, 对于单行插入,直接将查询计划发送到对应的segement实例上。
- gp_enable_groupext_distinct_gather:默认打开
- gp_enable_groupext_distinct_pruning:默认打开
- gp_enable_multiphase_agg:默认打开,是否2或3阶段并行聚合,如果这个功能关闭那么gp_enable_agg_distinct和gp_enable_agg_distinct_pruning功能也将关闭
- gp_enable_predicate_propagation:默认打开,当表在分布键上join时,允许查询规划器预测。join时,两表都先过滤,会更高效。
- gp_enable_preunique:默认打开,当打开时,对于select distinct查询,会在数据motion前添加额外的sort distinct操作,从而减少记录的行数。额外的sort distinct操作,相比于数据通过interconnect传输要高效得多。
- gp_enable_sequential_window_plans:默认打开,打开时对包含窗口函数调用的使用非并行(串行)的查询计划。关闭则并行使用相应的窗口函数,并对结果集rejoin。(window function是什么?串行,并行的查询计划?)
- gp_enable_sort_distinct:默认打开
- gp_enable_sort_limit:默认打开
查询计划开销预估参数
(Warning: GP建议不要调整这些开销预估参数。这些参数用来反映GP硬件配置和典型的工作负载。这些参数是相关的,只调整期中一个可能会对性能造成不利影响。)
- cpu_index_tuple_cost
- cpu_operator_cost
- cpu_tuple_cost
- cursor_tuple_fraction
- effective_cache_sizegp_motion_cost_per_row
- gp_segments_for_planner
- random_page_cost
- seq_page_cost
- cpu_index_tuple_cost:默认0.005,设置计划程序对索引扫描期间处理每个索引条目的开销的估算。
- cpu_operator_cost:默认0.0025,设置执行计划估算where条件每个运算符的开销
- cpu_tuple_cost:默认0.01,执行计划估算每行数据需要的开销
- cursor_tuple_fraction:执行计划估算一次查询可能fetch的行数占比,默认值为1,意味所有的行数都需要fetch。
- effective_cache_size:默认512MB,查询计划对磁盘缓存的预估值。较大的值使得查询规划器更偏向于选择index scan, 小一点的值使得查询规划器更偏向于选择sequential scan.
- gp_motion_cost_per_row:设置查询计划语句从一个segment上传输一行数据的开销,默认为0,0为cpu_tuple_cost两倍的开销。
- gp_segments_for_planner:假设segment instances所需要的开销,如果设置为0,则该值等于主segment数。这个参数影响查询规划器对motion操作收/发数据量的估计。
- random_page_cost:执行计划预估随机读每页的开销,默认100,该值越高,走索引的概率越小。
- seq_page_cost:执行顺序读,每页磁盘的预估开销。
数据统计采样参数(ANALYZE参数)
这些参数调整ANALYZE采样的数据量。可以对某一个表或者某一列使用ALTER TABLESET STATISTICS语句来配置统计数据集。
- default_statistics_target
- gp_analyze_relative_error
- default_statistics_target:设置默认统计数据目标,默认值25. 数值大analyze统计需要的时间越多,但可能提高查询规划器预估的质量。
- gp_analyze_relative_error:收集信息时候评估可接受的错误差,默认0.25(25%)
排序参数
- gp_enable_sort_distinct
- gp_enable_sort_limit
- gp_enable_sort_distinct:默认打开
gp_enable_sort_limit:默认打开
聚合函数参数
- gp_enable_agg_distinct
- gp_enable_agg_distinct_pruning
- gp_enable_multiphase_agg
- gp_enable_preuniquegp_enable_groupext_distinct_gather
- gp_enable_groupext_distinct_pruning
- gp_workfile_compress_algorithm
- gp_enable_agg_distinct:默认打开
- gp_enable_agg_distinct_pruning:默认打开
- gp_enable_multiphase_agg:默认打开,是否2或3阶段并行聚合,如果这个功能关闭那么gp_enable_agg_distinct和gp_enable_agg_distinct_pruning功能也将关闭
- gp_enable_preunique:默认打开,当打开时,对于select distinct查询,会在数据motion前添加额外的sort distinct操作,从而减少记录的行数。额外的sort distinct操作,相比于数据通过interconnect传输要高效得多。
- gp_enable_groupext_distinct_gather:默认打开
- gp_enable_groupext_distinct_pruning:默认打开
- gp_workfile_compress_algorithm:默认为None,如果是sata盘,设置为zlib,可以缓解磁盘io的瓶颈。
join参数
- join_collapse_limit
- gp_adjust_selectivity_for_outerjoins
- gp_hashjoin_tuples_per_bucketgp_statistics_use_fkeys
- gp_workfile_compress_algorithm
- join_collapse_limit:???允许inner join的表数,设置为1时则禁止inner join, 默认20
- gp_adjust_selectivity_for_outerjoins:默认打开,outer joins中允许null
- gp_hashjoin_tuples_per_bucket:默认5,设置hash join的密度,越小的值会产生越大的hash表,会影响join的性能。
- gp_statistics_use_fkeys:默认关闭,如果打开,,当主键和外键做join查询时,允许优化器使用外键信息。
gp_workfile_compress_algorithm:默认为None,如果是sata盘,设置为zlib,可以缓解磁盘io的瓶颈。
其他查询计划参数
- from_collapse_limit
- gp_enable_predicate_propagation
- gp_max_plan_size
- gp_statistics_pullup_from_child_partition
- from_collapse_limit:???默认20,当子查询小于该值的时候就不压缩子查询
- gp_enable_predicate_propagation:默认打开,当表在分布键上join时,允许查询规划器预测。join时,两表都先过滤,会更高效。
- gp_max_plan_size:查询计划的大小,默认是0,不管该值大小。当指定数值时,如果查询计划超过该值,则查询直接取消并报错。
- gp_statistics_pullup_from_child_partition:默认打开,当查询父表时,会使用子表的统计数据
错误报告和记录参数
日志参数
- Log Rotation
- log_rotation_age
- log_rotation_sizelog_truncate_on_rotation
- log_rotation_age:每间隔多久创建一个新的日志文件,默认1天。
- log_rotation_size:日志文件的最大不超过这个上限,否则创建一个新的日志。单位为KB,0则不限制日志文件大小,最大取值为INT_MAX/1024。默认为0.
log_truncate_on_rotation:打开,则会按时重写同名日志文件。关闭,则以追加的方式写。
When to log
- client_min_messages
- log_error_verbosity
- log_min_duration_statementlog_min_error_statement
- log_min_messages
- client_min_messages:返回给客户端的信息级别,默认为notice,有debug,error等多种级别。
- log_error_verbosity:控制服务器日志记录的详简程度。默认default,还有terse和verbose两种级别。
- log_min_duration_statement: 当SQL语句执行时间超过这个值将被日志记录。0将记录所有的SQL及其执行时间,-1不记录任何SQL。默认为-1.
- log_min_error_statement:日志级别,记录SQL语句导致的错误。有多种级别。
log_min_messages:服务器日志级别
What to log
- debug_pretty_print
- debug_print_parse
- debug_print_plan
- debug_print_prelim_plan
- debug_print_rewritten
- debug_print_slice_table
- log_autostats
- log_connections
- log_disconnections
- log_dispatch_stats
- log_durationlog_executor_stats
- log_hostname
- log_parser_stats
- log_planner_stats
- log_statement
- log_statement_stats
- log_timezone
- gp_debug_linger
- gp_log_format
- gp_max_csv_line_length
- gp_reraise_signal
- debug_pretty_print:让debug日志更可读,必须把输出级别设置为debug1或更低才生效,默认关闭。
- debug_print_parse:默认关闭,每个执行的语句,打印出语法树,必须把输出级别设置为debug1或更低才生效。
- debug_print_plan:默认关闭,打印出执行计划,必须把输出级别设置为debug1或更低才生效。
- debug_print_prelim_plan:默认关闭,打印出准备计划,必须把输出级别设置为debug1或更低才生效。
- debug_print_rewritten:默认关闭,打印出查询语句的查询重写(query rewrite output,oracle OBC优化器的内容,具体待查看)。
- debug_print_slice_table:默认关闭,打印查询计划分片
- log_autostats:自动analyze的日志,默认关闭
- log_connections:连接成功的日志,默认关闭
- log_disconnections:连接断开的日志,默认关闭
- log_dispatch_stats:默认关闭,打开后记录查询分派
- log_duration:默认关闭,记录查询执行时间log_executor_stats:默认关闭,打开将记录查询执行器的性能统计数据。不应该与log_statement_stats一起打开。
- log_hostname:默认关闭
- log_parser_stats:默认关闭
- log_planner_stats:默认关闭
- log_statement:控制记录那些SQL语句。参数取值DDL,记录DDL语句,MDO记录DDL和insert,update, delete, truncate 以及 copy from。prepare和expalin analyze也能被记录。默认为ALL。
- log_statement_stats:默认关闭。记录查询解析、计划、执行的所有性能统计数据。
- log_timezone:默认unknown,使用操作系统指定的时区
- gp_debug_linger:当遇到一个内部错误时逗留多少秒,默认0.
- gp_log_format:greenplum 的log格式,csv或text
- gp_max_csv_line_length:默认1MB (1048576 bytes)导入到gp中的csv文件,一行数据最大多少长度。
- gp_reraise_signal:???if enabled, will attempt to dump core if a fatal server error occurs.
系统监控参数
SNMP告警
这些参数当事件发生时发送SNMP通知。
- gp_snmp_community
- gp_snmp_monitor_addressgp_snmp_use_inform_or_trap
- gp_snmp_community:设置smnp community name
- gp_snmp_monitor_address:设置snmp地址,值为ip:port
gp_snmp_use_inform_or_trap:设置为trap,monitor不会答复收到的SNMP消息,使得网络负载小一些。设置为inform,monitor需要回复收到的SNMP消息。默认为trap
邮件告警
这些参数让系统在发生fatal error时发送邮件,例如segment挂了或服务器崩溃重启。
- gp_email_from
- gp_email_smtp_password
- gp_email_smtp_servergp_email_smtp_userid
- gp_email_to
- gp_email_from:用来发送报警邮件的邮箱地址
- gp_email_smtp_password:邮箱密码
- gp_email_smtp_server:smtp服务器地址端口
- gp_email_smtp_userid:userid
- gp_email_to:收报警邮件的邮箱地址
GCC告警(Greenplum Command Center Agent)
这些参数为GCC配置数据收集。- gp_enable_gpperfmon
- gp_gpperfmon_send_intervalgpperfmon_log_alert_level
- gpperfmon_port
- gp_enable_gpperfmon:是否使用gcc的data collection agents
- gp_gpperfmon_send_interval:???服务器给data collection agent发送查询执行更新的时间间隔。在这个间隔内执行的查询通过UDP发送到segment上的mornitor agent。如果在耗时长的复杂查询中发现有大量UDP丢包,可以考虑将这个间隔时间调大。默认1s
- gpperfmon_log_alert_level:控制什么级别的日志写到gpperfmon数据库中,默认None.
- gpperfmon_port:gpperfmon使用的端口,默认8888.
运行时统计数据收集(收集正在执行的语句,占用的行等)
这些参数控制服务器统计数据的收集,当打开统计数据收集,可以通过pg_stot和pg_statio访问统计数据。
- stats_queue_level
- track_activitiestrack_counts
- update_process_title
- stats_queue_level:???收集资源队列的统计数据
- track_activities:默认开启,开启后会记录session里执行的命令以及开始执行的时间,这些信息只对supperuser和session所有者可见。这些信息能使用pg_stat_activity看到
- track_counts: 默认关闭。开启后收集一些row和block有关的统计信息,这些信息可以使用pg_stat 和pg_statio看到
- update_process_title:默认开启,开启后服务器没收到一个SQL命令会更新进程名。可以通过PS命令看进程名。
自动analyze参数
当自动统计数据收集功能打开后,当同一个事务里insert, update, delete, copy 或者 create table… as select语句影响的行数达到阈值时(on_change),或者新生成的表还没有统计数据时(on_no_stats),analyze会自动运行。为了打开自动统计数据收集的功能,需要在master的postgresql.conf里配置,并重启。
- gp_autostats_mode
- log_autostats
- gp_autostats_mode:默认onno stats,有none, onno stats, on_change三个配置项。当设置为none的时候,则不会自动收集,当设置为on_change的时候,则一行dml语句(create table as select ,update ,delete,insert ,copy)影响数据量超过了gp_autostats_on_change_threshold配置的时候会收集,on_no_stats,当执行完一行dml语句后,发现该表没有统计过数据,就自动统计。对于分区表来说,如果数据是插入的是父表是不会触发自动收集的,只有插入叶子表才会触发自动收集,并且只收集叶子表里的数据。
log_autostats:自动analyze的日志,默认关闭
客户端连接默认参数
Statement Behavior参数
- check_function_bodies
- default_tablespace
- default_transaction_isolation
- default_transaction_read_onlysearch_path
- statement_timeout
- vacuum_freeze_min_age
- check_function_bodies:默认开启,在 CREATE FUNCTION 期间检查函数体。
- default_statistics_target:设置默认统计数据目标,默认值25
- default_tablespace:默认表空间,默认不设置
- default_transaction_isolation:默认事务级别,默认级别read commit,四种隔离级别分别是read uncommitted, read committed, repeated read, serializable
- default_transaction_read_only:默认关闭,设置每个新的事务状态为read_only.一个只读的事务不能够修改非临时表(何用暂不清楚)
- search_path:???对象名一般写为schema.object, 当对象名没有指定schema时,从search path里的schema找,当这些schema中有多个相同的对象名时,使用第一个找到的。创建对象时,如果没有指定schema,默认在search path里的第一个schema上创建。
- statement_timeout:一行指令的超时时间,默认0,不限制。
vacuum_freeze_min_age:???在表扫描的时候,它之前更旧的XID将被替换为FrozenXID. FrozenXID不遵循与普通XID比较的规则,它被认为总是比任何普通的XID旧的。
Locale and Formatting参数
- client_encoding
- DateStyle
- extra_float_digits
- IntervalStyle
- lc_collate
- lc_ctypelc_messages
- lc_monetary
- lc_numeric
- lc_time
- TimeZone
- client_encoding:默认utf8,每次会话可以设置自己的client_encoding。
- DateStyle:输入输出时间格式,默认的是ISO(format)和MDY。
- extra_float_digits:默认0,float类型显示的位数
- IntervalStyle:???时间显示的格式
- lc_collate:只读参数
- lc_ctype:只读参数
- lc_messages:language messages,设置显示message语言
- lc_monetary:本地货币格式,可设置哪些值,可以通过系统的locale -a来查看
- lc_numeric:数字格式
- lc_time:时间格式
TimeZone:设置时区
其他默认参数
- dynamic_library_path
- explain_pretty_printlocal_preload_libraries
- dynamic_library_path:默认$libdir,如果查询需要用到一些文件,例如udf需要访问某个目录,可将该目录的绝对路径填进去
- explain_pretty_print:默认打开,让执行计划更可读
- local_preload_libraries:??逗号隔开的shared library files,每次客户端session打开时都会preload
锁管理参数
- deadlock_timeout
- max_locks_per_transaction
- deadlock_timeout:检查是否死锁之前,等待的时间,默认1s。这个时间应该要比一般的事务长,以保证在检查死锁前,正常的锁都释放了。
- max_locks_per_transaction:每个事务最多能占用多少个锁,默认128. 如果在一个事务中需要很多不同的表,可以考虑提高该值。
WorkLoad管理参数
下列参数配置GP的workload管理(resource queues),查询优先级,内存使用和并发控制。
- gp_resqueue_priority
- gp_resqueue_priority_cpucores_per_segment
- gp_resqueue_priority_sweeper_interval
- gp_vmem_idle_resource_timeout
- gp_vmem_protect_limit
- gp_vmem_protect_segworker_cache_limitmax_resource_queues
- max_resource_portals_per_transaction
- resource_cleanup_gangs_on_wait
- resource_select_only
- stats_queue_level
- gp_resqueue_priority:默认打开
- gp_resqueue_priority_cpucores_per_segment:默认值4,每个segment占用的cpu数
- gp_resqueue_priority_sweeper_interval:???默认1000ms
- gp_vmem_idle_resource_timeout:默认18s,当连接空闲时间超过该值时,服务端回释放掉其资源,但不断开连接
- gp_vmem_protect_limit:默认8192,内存资源限制。计算公式为(x单台机器物理内存)/主segment数目。x为1到1.5之间。例如物理机126G内存,主segment16个。(1126)/16=7.875GB.7.875*1024=7971MB,则该值设置为7971。 当查询需要的内存达到这个上限,内存不能够再分配,将导致查询失败。
- gp_vmem_protect_segworker_cache_limit:??? cache限制,当查询执行器消耗的内存超过这个上限,这个过程不会缓存下来,不会为后续的查询提供缓存。默认500MB。如果系统有大量的连接或者是空闲的进程,可以减小这个上限来释放内存。
- max_resource_queues:资源队列数目,默认9.
- max_resource_portals_per_transaction:一个事务最大可同时打开的游标数,默认64. 打开的游标将会在资源队列中占用一个槽。
- resource_cleanup_gangs_on_wait:???默认打开。当有SQL提交到资源队列,在获得锁之前,所有空闲的查询执行将被清理掉。
- resource_select_only:只对查询语句进行资源管理队列,如果设置成off,则对insert ,update ,delete也生效,默认off。
- stats_queue_level:???收集资源队列统计数据
外部表参数
- gp_external_enable_exec
- gp_external_grant_privileges
- gp_external_max_segsgp_initial_bad_row_limit
- gp_reject_percent_threshold
- readable_external_table_timeout
- gp_external_enable_exec:允许使用外部表。如果要使用GCC或者MapReduce,必须打开。
- gp_external_grant_privileges:是否允许授权创建外部表。默认关闭,只有superuser才能狗创建外部表。
- gp_external_max_segs:默认64,只对gpfdist的外部表生效,最多允许多少个segment来扫描该表
- gp_initial_bad_row_limit:默认1000,当在执行copy命令的时候或者从外部表加载数据时,当前多少行数据失败时,停止。
- gp_reject_percent_threshold:???
- readable_external_table_timeout:读外部表的超时时间,默认0,不超时。
append-only 表参数
- max_appendonly_tables
- gp_appendonly_compaction
- max_appendonly_tables:默认10000 ,append-optimized表能够并发读写的最大数目,计算数目时分区表和子分区表视为单独的表
gp_appendonly_compaction:默认开,如果关闭,那vacuum命令只会执行清空segment下标记为EOF的文件。在I/O负载高或者磁盘空间少的情况下,可以考虑关闭。
库和表空间/文件空间参数
这些参数配置系统允许的库、表空间、文件空间的最大大小。
- gp_max_tablespaces
- gp_max_filespaces
- gp_max_databases
- gp_max_tablespaces:设置最大的表空间数量,默认16
- gp_max_filespaces:默认8,最多允许多少个filespaces
- gp_max_databases:默认16,最多允许多少个databases。
PostgreSQL历史版本兼容参数
这些参数提供了与PostgreSQL历史版本的兼容信息,在GP中不需要去修改。
- add_missing_from
- array_nulls
- backslash_quote
- escape_string_warningregex_flavor
- standard_conforming_strings
- transform_null_equals
GP Array 配置参数
这部分的参数控制GP array 及其组件:segment, master, distribution transaction manager, master mirror, interconnect.
interconnect配置参数
- gp_interconnect_fc_method
- gp_interconnect_hash_multiplier
- gp_interconnect_queue_depth
- gp_interconnect_snd_queue_depthgp_interconnect_setup_timeout
- gp_interconnect_type
- gp_max_packet_size
- gp_interconnect_fc_method:UDP的流量控制方式,当gp_interconnect_fc_method是UDPIFC时有效。有两种流量控制方式,capacity和loss。capacity方式,发送方根据接受方的窗口来发送,当接收方窗口为0时暂停发送。loss方式,则是根据丢包情况来控制发送速度。默认loss.
- gp_interconnect_hash_multiplier:设置UDP interconnect 用于track connection的hash表大小。取值范围在2-25,默认2,这个值将乘以segment数目来决定hash表有多少个槽。对于复杂、slice多的查询,提高这个值可以改善interconnect的性能。
- gp_interconnect_queue_depth:设置接受端UDP接收窗口大小。当数据到达接收方,但是接受窗口没位置的时候,就会丢弃这个数据,需要重新传输。因此,增加该值虽然需要更多的内存,但是能够改善性能。默认为4. 设置为1-10较为合理。
- gp_interconnect_setup_timeout:在此时间内interconnect setup, 否则超时。当gp_interconnect_type设置为UDP时生效。默认2小时。
- gp_interconnect_snd_queue_depth:设置发送方的发送窗口大小,增加该值会占用更多内存,设置为1-4较为合理。默认为2. 该值只有当gp_interconnect_type为UDPIFC时生效。
- gp_interconnect_type:设置interconnect的通信协议。有三种方式TCP/UDP/UDPIFC。对于复杂、slice多的查询,TCP最多能够支持1000个segment实例。UDP能够支持更多的segment实例,且GP采用经过校验、检查的UDP,和TCP一样可靠。UDPIFC是UDP的流量控制版本,通过gp_interconnect_fc_method来选择流控方式。
- gp_max_packet_size:一个包最大多大,默认8192。TCP包和UDP包都设置了编号。
dispatch配置参数
- gp_cached_segworkers_threshold
- gp_connections_per_thread
- gp_enable_direct_dispatchgp_segment_connect_timeout
- gp_set_proc_affinity
- gp_cached_segworkers_threshold:???默认5. gangs 是在不同segment上执行同一个slice的work processes, 当这些gangs完成任务后将会destroyed,除非有缓存。该参数值低则较节省系统资源,增加该值能够改善行上 的复杂查询。(因为有缓存?)
- gp_connections_per_thread:???分派查询计划分片时的线程数,默认64,通常情况下该值不需要修改,除非在吞吐量上有已知的性能问题。
- gp_enable_direct_dispatch:默认打开。是否允许将查询计划直接发送到单个segment上,当查询的数据都在同一个segment上时,直接给该segment发送查询计划相比于对所有segment都发送查询计划要快,主要是节省了响应时间,不过相应的master上会多一些cpu消耗。
- gp_segment_connect_timeout:设置超时时间,作用于master 和segment,primary和mirror。
- gp_set_proc_affinity:默认off,如果打开,则postmaster在启动的时候会绑定一个cpu
Fault Operation参数
- gp_set_read_only
- gp_fts_probe_intervalgp_fts_probe_threadcount
- gp_set_read_only:使database disable writes。默认关闭
- gp_fts_probe_interval:默认1分钟,该值大于等于10,错误进程检测,ftsprobe会定期检测segment是否失败。(ftsprobe用来检测集群是否存在故障)
gp_fts_probe_threadcount:默认16,该值需要大于等于每个Hosts上的segment数。ftsprobe使用多少个线程。
distribution transaction manager参数
- gp_max_local_distributed_cache
gp_max_local_distributed_cache:默认1024,设置分布式事务缓存数,较高的值可能影响性能。
只读参数
- gp_command_count
- gp_content
- gp_dbid
- gp_num_contents_in_cluster
- gp_role
gp_session_id
gp_command_count:默认值1,只读参数。表示master从client接收到的命令数目,一个sql命令实际上可能涉及到多个命令,因此对于一条sql命令计数值可能大于1.
- gp_content:只读参数。segment的id
- gp_dbid:只读参数。segment的dbid
- gp_num_contents_in_cluster:只读参数。GP集群系统中primary segment的数量。
- gp_role:只读参数,有dispatch,execute,utility三种。master是dispatch,segment是execute.
- gp_session_id:只读参数。客户端id号,master启动时从1开始计数
master mirroring参数
这些参数配置主备master之间的复制。主备同步的过程是:首先使用主master的事务快照部署到备master上,完成部署后,主备一致,后续更新使用walsender和walreciver进程完成主备间的同步,同步的是write-ahead log(WAL,所有的操作在提交前都要写入log文件中)。walsender时主master上的进程,walreciver是备master上的进程,两进程采用wal-based streamin同步。
- keep_wal_segments
- repl_catchup_within_range
- replication_timeout
- wal_receiver_status_interval
- keep_wal_segments:???WAL segment file数目,默认5。WAL将日志记录在segment file中(这里的segment和GP中的segment不是一个概念),这些WAL segment file将在checkpoint时写到磁盘上。
- repl_catchup_within_range:???默认1(???如果WAL segment file的编号超过了walsender正在发送的file编号,GP更新当前master,否则GP阻塞walsender发送,当所有WAL segment处理完,当前master可更新)
- replication_timeout:在master和standerby传输时,walsernder进程和walreceiver进程复制的超时时间,默认60000ms
- wal_receiver_status_interval:设置walreceive向master发送消息的时间间隔。在高负载的场景下,该值应该长一点。默认10s. replication_timeout 用来控制walsender进程等待walreciever消息的时间。