VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

关键配置文件

postgresql.conf

关键参数

  • maintenance_work_mem

    参数说明:设置在维护性操作(比如VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY等)中可使用的最大的内存。该参数的设置会影响VACUUM、VACUUM FULL、CLUSTER、CREATE INDEX的执行效率。

    设置建议:建议设置此参数的值大于work_mem可以改进清理和恢复数据库转储的速度。参数值建议在64MB~20GB区间内。

    默认值:16MB

  • shared_buffers

    参数说明: 设置Vastbase使用的共享内存大小。增加此参数的值会使Vastbase比系统默认设置需要更多的System V共享内存。

    取值范围: 整型,16 ~ 1073741823,单位为8KB。

    设置建议:shared_buffers需要设置为BLCKSZ的整数倍,BLCKSZ目前设置为8KB,即shared_buffers需要设置为8KB整数倍。改变BLCKSZ的值会改变最小值。建议取值为系统内存的25%~40%。

  • cstore_buffers

    参数说明: 设置列存所使用的共享缓冲区的大小。

    取值范围: 整型,16384~1073741823,单位为KB。

    设置建议:列存表使用cstore_buffers设置的共享缓冲区,几乎不用shared_buffers。因此在列存表为主的场景中,应减少shared_buffers,增加cstore_buffers。

  • effective_cache_size

    参数说明:设置优化器在一次单一的查询中可用的磁盘缓冲区的有效大小。设置这个参数,还要考虑Vastbase的共享缓冲区以及内核的磁盘缓冲区。另外,还要考虑预计的在不同表之间的并发查询数目,因为它们将共享可用的空间。

    设置建议: 建议取值为系统内存的75% 。

  • max_process_memory

    参数说明: 设置一个数据库节点可用的最大物理内存。

    设置建议:建议计算公式如下:(物理内存大小 - vm.min_free_kbytes) * 0.7 / (1 + 主节点个数)。该系数的目的是尽可能保证系统的可靠性,不会因数据库内存膨胀导致节点OOM。这个公式中提到vm.min_free_kbytes,其含义是预留操作系统内存供内核使用,通常用作操作系统内核中通信收发内存分配,至少为5%内存。即,max_process_memory = 物理内存 * 0.665 / (1 + 主节点个数)。

  • password_force_alter

    如数据库版本号≥V2.2 Build 5.75且低于V2.2 Build 11,本参数应设置为off。

  • license_path

    license文件路径为绝对路径,且需要指定到文件名级别。

    数据库安装后会自动生成临时许可文件,当没有license文件时,无需配置postgresql.conf,可直接启动数据库。临时许可文件有效期90天。

更多参数说明参见GUC参数说明

文件内容

以下为以系统内存为128GB时的参数配置,其中

  • Base Configuration基础配置应结合用户具体环境修改,重点关注参数信息参见postgresql.conf文件重要参数

  • For Replication部分注意添加,需对应实际集群ip。

  • synchronous_standby_names参数用于设定主备实时同步、异步同步状态,注意按需配置。#后为参考值。

    #Base Configuration for OS_MEM=128GB
    license_path='/home/vastbase/vasthome/${license_name}  //根据实际情况填写
    port=5432   
    maintenance_work_mem=2GB  # 64MB~20GB
    shared_buffers=48GB     # 40% OS_MEM
    cstore_buffers=16MB
    effective_cache_size=100GB  # 80% OS_MEM
    max_process_memory=100GB    # 80% OS_MEM
    archive_mode=on
    archive_dest='/data/archive_wals'   
    vacuum_cost_limit=10000
    autovacuum=on
    autovacuum_mode=mix
    autovacuum_max_workers=5
    autovacuum_naptime=20s
    autovacuum_vacuum_cost_delay=0
    autovacuum_vacuum_scale_factor = 0.2
    autovacuum_analyze_scale_factor = 0.1
    track_sql_count=on
    session_timeout=0
    enable_cbm_tracking=on
    enable_thread_pool = off
    password_encryption_type=0
    max_wal_senders=10
    log_statement='ddl'
    log_duration = on         
    log_line_prefix = '%m %r %d %u [%p]'
    shared_preload_libraries = 'pg_stat_statements'  
    pg_stat_statements.max = 10000
    pg_stat_statements.track = all
    track_activity_query_size=4096
    
    #For Replication
    replication_type = 1
    application_name = 'vdb1'
    recovery_max_workers = 1
    password_encryption_type=0
    replconninfo1 = 'localhost=192.xx.xx.1 localport=26001 localheartbeatport=26002 localservice=26003 remotehost=192.xx.xx.2 remoteport=26001 remoteheartbeatport=26002 remoteservice=26003'
    wal_level=hot_standby
    hot_standby=on
    vastbase_login_info=false 
    synchronous_commit=on 
    synchronous_standby_names = '*'   # * for sync, empty for async
    remote_read_mode='non_authentication'
    

vb.yml

关键参数

在主、备库的配置vb.yml文件,用户注意对应实际情况修改,重要配置参数说明按模板出现顺序如下:

  • restapi

    设置连接与监听信息,具体含义参考注释即可。

    restapi:  
    listen: 192.xx.xx.1:8008                 # has服务监听的套接字,192.xx.xx.1为本节点的IP地址,下面的配置信息涉及192.xx.xx.2均表示本节点IP地址  
    connect_address: 192.xx.xx.1:8008            # 高可用集群内,其他节点通过本参数的地址访问本节点的has服务
    
  • dcs

    设置has集群使用的dcs地址。

    etcd:  
    hosts: 192.xx.xx.1:2379,192.xx.xx.2:2379,192.xx.xx.3:2379   # dcs地址集
    
  • bootstrap.postgresql.parameters

    此处配置的是公共部分的参数,设置集群以及数据库实例初始化配置,所有节点生成的配置文件都是一致的。

    如有个性化需求,请在下面的postgresql.parameters部分进行个性化配置

    license_path: '/home/vastbase/vasthome/${license_name}'   # license证书路径,根据实际情况填写
    max_connections: 2048                 # 根据使用情况设置,如果开启并行查询,需要设置较大值
    max_process_memory: 100GB               #以系统内存128G为例,建议物理内存80%左右   
    wal_keep_segments: 128                  # 建议设置128及以上,如果太小,在主库重新加入集群时有可能造成增量build失败并触发全量build     
    max_prepared_transactions: 2048             # 不能小于max_connections 
    
  • pg_hba:

    设置has执行vb_initdb初始化实例后,追加至pg_hba.conf的配置信息,如果不是通过has初始化的实例,该部分参数不会被追加。

    - host all all 0.0.0.0/0 md5                 # 此行配置必须在最后;如果是IPV6地址,需要替换IP为IPV6,例如:- host all all ::0/0 md5  
    
  • postgresql.callbacks:

    配置has运行时状态切换的回调脚本,一般用于绑定vip。

    callbacks:   
    listen: 0.0.0.0:5432   #设置数据库的监听地址,此处的配置会覆盖postgresql.conf的listen_addresses和port参数,如果此处没有配置端口号,默认监听5432端口。此处无论是否配置端口号,postgresql.conf配置的port参数都会被覆盖
    connect_address: 192.xx.xx.1:5432  
    data_dir: /home/vastbase/data/vastbase            # 数据库实例路径
    config_dir: /home/vastbase/data/vastbase           # 数据库实例配置文件路径  
    bin_dir: /home/vastbase/local/vastbase/bin          # 数据库可执行文件路径  
    vastbase_lib_dir: /home/vastbase/local/vastbase/lib:/home/vastbase/local/vastbase/jre/lib/amd64:/home/vastbase/local/vastbase/jre/lib/amd64/server   # 数据库共享库路径  amd64 for x86, aarch64 for arm  
    vastbase_home: /home/vastbase/local/vastbase         # 数据库安装路径 
    #vastbase_log: /usr/local/has/vb_log 	#Has版本若为2022年9月及以后版本,必须添加vastbase_log参数,即此处需取消#注释
    
  • authentication.replication:

    配置has连接vastbase的用户信息,如果是由has初始化数据库实例,会自动创建不存在的用户。

    authentication:   
    replication:    
    username: vbadmin    	#不能与初始化实例的用户同名
    password: Vbase@admin   #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。
    superuser:    
    username: vbadmin    	#不能与初始化实例的用户同名
    password: Vbase@admin  #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。
    

如数据库版本号≥V2.2 Build 5(Patch No.75)且 < V2.2 Build 11,则建议在数据库执行如下命令,使普通用户首次登录或连接不强制要求修改密码。否则在has连接vastbase时会被强制修改密码,导致集群搭建失败。

  echo "password_force_alter= off" >> $PGDATA/postgresql.conf
  • parameters:

    个性化参数配置部分。

    parameters:                         # 个性化配置部分,以下配置项建议写到该部分   
    application_name: vdb1            # 数据库节点名称,建议与第3行的name参数保持一致,否则synchronous_mode开后后不生效,此外,此参数不要写在bootstrap部分   
    replconninfo1: 'localhost=192.xx.xx.1 localport=55434 localheartbeatport=55435 localservice=55436 remotehost=192.xx.xx.2 remoteport=55434 remoteheartbeatport=554     #当localhost和remotehost配置为主机名时,需要确保主机名映射IP地址唯一
    

文件内容

scope: vastbase_ha_inst                                      # 集群实例名称
namespace: /vastbase/                                        # 集群实例所在的命名空间,默认是/service
name: 'vdb1'                                       # 节点在集群内的名称,每个节点都必须不一样,通过hasctl list命令查看高可用集群状态时,在Member显示该名称

restapi:
  listen: 192.xx.xx.1:8008                                # has服务监听的套接字,192.xx.xx.1为本节点的IP地址,下面的配置信息涉及192.xx.xx.1均表示本节点IP地址
  connect_address: 192.xx.xx.2:8008                       # 高可用集群内,其他节点通过本参数的地址访问本节点的has服务

etcd:
  hosts: 192.xx.xx.1:2379,192.xx.xx.2:2379,192.xx.xx.3:2379    # dcs地址集

bootstrap:
  dcs:
    ttl: 30                                                     # 持有单个DCS key的最长时间,单位秒,例如主节点持有leader key,如果不能再该时间内更新leader key,那么可以认为发生failover
    loop_wait: 10                                               # has两次执行工作之间的时间间隔,单位秒
    retry_timeout: 10                                           # 重试次数
    maximum_lag_on_failover: 1048576                            # 从库允许被参与选举主库,最大的延迟字节数
    synchronous_mode: 'true'                                    # 是否开启同步模式,开启后,has会决定哪个节点是同步备库并覆盖数据库配置文件内的synchronous_standby_names参数
    postgresql:
      use_pg_rewind: true                                       # 是否使用rewind,必须开启
      use_slots: true                                           # 是否使用复制槽,必须开启
      parameters:                                               # 此处配置的是公共部分的参数,所有节点生成的配置文件都是一致的,如有个性化需求,请在下面的postgresql.parameters部分配置
        license_path: '/home/vastbase/vasthome/${license_name}'        # license证书路径,根据实际情况填写
        vastbase_login_info: 'off'                              # 高可用环境必须关闭


        listen_addresses: '*'                                   # 一般情况下,设置为*即可。特殊情况根据使用设置
        port: 5432                                              # 非必须参数,根据实际情况调整
        max_connections: 2048                                   # 根据使用情况设置,如果开启并行查询,需要设置较大值
        session_timeout: 10min

        client_min_messages: warning                            # 输出到客户端的信息级别,如无特殊需求,设置为warning即可
        log_min_messages: warning                               # 日志级别
        log_destination: 'stderr'                               # 日志文件以何种方式输出
        logging_collector: on                                   # 是否开启日志收集,如果特殊情况,一般开启
        log_directory: 'log'                                    # 日志文件存放目录,如果配置相对路径,则该目录在数据库实例目录下
        log_filename: 'postgresql-%Y-%m-%d_%H%M%S.log'          # 日志文件名称
        log_rotation_size: 50MB                                 # 日志文件大小达到该值时,触发日志文件切换
        log_duration: off                                       # 记录sql语句的执行时长,如果特殊需求,一般关闭
        log_statement: 'all'                                    # 根据需要设置,POC测试等功能测试或者试生产阶段等不追求性能的场景可以设置为all,否则根据实际情况考虑

        track_activities: on                                    # 必须开启,控制收集每个会话中当前正在执行命令的统计数据,否则pg_stat_replication视图查询不到数据
        enable_instr_track_wait: on                             # 是否开启等待事件信息实时收集功能
        enable_instr_rt_percentile: off                         # 是否开启计算机中85%,90%的SQL的响应时间功能。可根据需要开启
        track_counts: on                                        # 是否收集表和索引上的统计信息,默认为on
        track_sql_count: off
        enable_instr_cpu_timer: off
        enable_instance_metric_persistent: off
        enable_logical_io_statistics: off
        enable_user_metric_persistent: off
        enable_resource_track: off
        instr_unique_sql_count: 0
        plog_merge_age: 0

        shared_buffers: 50GB                                # 以系统内存128G为例,实际设置建议物理内存40%左右
        max_process_memory: 100GB                        # DBMS_RANDOM建议物理内存80%左右
        work_mem: 48MB                                          # tpcc中1mb是可以的,业务测试中建议适当加大,根据业务特点设置大小,参考开发者指南。设置内部排序操作和Hash表在开始写入临时磁盘文件之前使用的内存大小。ORDER BY,DISTINCT和merge joins都要用到排序操作。Hash表在散列连接、散列为基础的聚集、散列为基础的IN子查询处理中都要用到。
        cstore_buffers: 16MB                                    # 如果没有列存或者用不到列存,保持最小的16MB就好
        maintenance_work_mem: 20GB                              # 建议适当加大
        max_files_per_process: 100000                           # 允许同时打开的files的最大数量
        max_prepared_transactions: 2048                         # 不能小于max_connections
        bulk_write_ring_size: 2GB

        wal_level: hot_standby                                  # xlog日志级别,如果开启极致RTO,设置为archive,否则设置为hot_standby
        wal_log_hints: on                                       # 设置为on即可
        advance_xlog_file_num: 10                               # 提前初始化xlog文件的数量,默认值为10,高负载环境下建议适当调大一些
        wal_buffers: 1GB
        xloginsert_locks: 16
        enable_xlog_prune: off
        max_wal_senders: 8                                      # walsender最大数量,根据备机数量设置,建议设置为备机数量的2倍  
        wal_keep_segments: 128                                  # 建议设置128及以上,如果太小,在主库重新加入集群时有可能造成增量build失败并触发全量build
        max_replication_slots: 8
        synchronous_commit: on                                  # 可选值 off、on、remote_receive、remote_write、remote_apply,建议至少为on


        enable_mergejoin: on
        enable_nestloop: on
        enable_hashjoin: on
        enable_bitmapscan: on
        enable_material: on
        enable_codegen: false
        enable_opfusion: off                                     #生产环境中,两个fusion参数均关闭
        enable_beta_opfusion: off
        query_dop: 1                                             # 2.2.4版本加入的参数,此参数为1,表示不开启并行查询功能。如果query_dop>1,则为开启并行查询的并行度,对于复杂的嵌套查询,可以提升查询性能,但是也会消耗大量的max_connections资源,所以如果query_dop>1,加大max_connections(建议设置为2万以上)

        autovacuum: on
        autovacuum_mode: vacuum
        autovacuum_max_workers: 10
        autovacuum_naptime: 20s
        autovacuum_vacuum_cost_delay: 10
        autovacuum_vacuum_scale_factor: 0.02
        autovacuum_analyze_scale_factor: 0.1
        enable_save_datachanged_timestamp: false
        vacuum_cost_limit: 10000
        autoanalyze_timeout: 900

        enable_incremental_checkpoint: on                      # 开启增量检查点
        incremental_checkpoint_timeout: 60s
        checkpoint_segments: 1024
        checkpoint_timeout: 3min                              # 默认设置15分钟,如果设置过长,在持续高负载环境下,会产生大量脏页造成停库时间比较久,因此根据需要调整,可以适当设置得比默认值小,例如3分钟
        checkpoint_completion_target: 0.9
        checkpoint_warning: 5min 
        checkpoint_wait_timeout: 60s

        pgxc_node_name: 'vastbase_ha_inst'                     # 建议与第一行参数scope保持一致
        synchronous_standby_names: '*'                         # 设置为*即可,开启synchronous_mode后,该参数会被has重写
        password_encryption_type: 0
        most_available_sync: on                                # 根据需要设置,如果此参数为on,为最大可用模式,备库停机不影响主库业务连续性。但此时不能保证主备数据安全性。
        remote_read_mode: non_authentication
        hot_standby_feedback: off                              # 根据需要设置,如果需要保证备库复杂查询不出错,就是设置为on
        enable_data_replicate: off

        hot_standby: on                                       # 备库是否接受只读连接,如果开启极致RTO,请设置为off,如果在高负载下进行高可用切换测试,建议开启极致RTO,开启方式请参考wiki上的《部署指南》
        replication_type: 1                                    # 标记HA模式,设置为1即可。0 表示主备从模式 1 表示使用一主多备模式
        recovery_max_workers: 8                                # 开启并行回放时设置最大并行回放线程个数
        recovery_parallelism: 1                                # 只读参数,实际的回放线程个数,设置为默认值1即可,数据库启动时自动重新计算
        recovery_parse_workers: 1                              # 极致RTO特征,并行恢复时解析XLOG线程的个数,若与recovery_max_workers同时大于1,则以recovery_parse_workers为准,并行回放特性失效
        recovery_redo_workers: 1                               # 极致RTO特性,每个解析XLOG线程拥有的REDO线程的个数
        recovery_time_target: 0                                # 流控参数,设置为0即可,即不开启日志流控
        enable_page_lsn_check: on                              # 默认打开即可

        audit_enabled: off                                     # 审计日志配置,若无特别需要,直接关闭审计功能
        audit_login_logout: 7                             
        audit_user: '*'                       
        audit_user_locked: 1                             
        audit_grant_revoke: 1                       
        audit_system_object: 12295                        
        audit_dml_state: 0                    
        audit_dml_state_select: 0                    
        audit_function_exec: 0                       
        audit_copy_exec: 0                      
        audit_set_parameter: 1                                 # whether audit set parameter operation           
        audit_operation_result: 0                              # selective audit based on audit results (0 disables the feature, 1 success, 2 failure)

        fsync: on                                              # 必须开启
        full_page_writes: off                                  # 开启增量检查点,full_page_writes会被关闭
        enable_double_write: on                                # 必须开启,增量检查点开关打开时,不再使用full_page_writes防止半页写问题,而是依赖双写特性保护
        allow_concurrent_tuple_update: true
        enable_alarm: off
        use_workload_manager: off
        transaction_isolation: 'read committed'
        default_transaction_isolation: 'read committed'
        update_lockwait_timeout: 20min
        pagewriter_sleep: 5ms


        # ------线程池部分,根据实际平台进行配置------
        enable_thread_pool: on                                 # 根据实际情况开启
        numa_distribute_mode: 'all'                            # all/none:只有在aarch64平台release版本才支持all,其他平台都是none

  initdb:
  - encoding: UTF8

  pg_hba:
  - host all ${initdb_user} 192.xx.xx.1/32 trust           # 配置集群内所有节点的${initdb_user}用户远程访问为trust,否则增量build失败,${initdb_user}为初始化实例的用户,一般与操作系统用户同名;如果是IPV6地址,需要替换IP为IPV6,例如:- host all ${initdb_user} 2001:0:3238:e1:63::133/24 trust   
  - host all ${initdb_user} 192.xx.xx.2/32 trust
  - host all ${initdb_user} 192.xx.xx.3/32 trust
  - host all all 0.0.0.0/0 md5                                # 此行配置必须在最后;如果是IPV6地址,需要替换IP为IPV6,例如:- host all all ::0/0 md5 

postgresql:
  callbacks:
    on_start: /usr/local/has/has_vip.sh     # 回调脚本路径,一般用于管理VIP
    on_stop: /usr/local/has/has_vip.sh
    on_role_change: /usr/local/has/has_vip.sh
  listen: 0.0.0.0:5432
  connect_address: 192.xx.xx.1:5432
  use_unix_socket: true
  use_extreme_rto: false                                      # 如果开启极致RTO,该参数必须设置为true,开启极致RTO后,备机不可读
  pg_ctl_timeout: 600                                         # 数据库启动超时时间,根据实际情况设置
  data_dir: /home/vastbase/data/vastbase                      # 数据库实例路径
  config_dir: /home/vastbase/data/vastbase                    # 数据库实例配置文件路径
  bin_dir: /home/vastbase/local/vastbase/bin                  # 数据库可执行文件路径
  vastbase_lib_dir: /home/vastbase/local/vastbase/lib:/home/vastbase/local/vastbase/jre/lib/amd64:/home/vastbase/local/vastbase/jre/lib/amd64/server         # 数据库共享库路径 amd64 for x86, aarch64 for arm
  vastbase_home: /home/vastbase/local/vastbase                # 数据库安装路径
  authentication:
    replication:
      username: vbadmin                     #不能与初始化实例的用户同名
      password: Vbase@admin                                     #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。
    superuser:
      username: vbadmin                     #不能与初始化实例的用户同名
      password: Vbase@admin                                      #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。
  parameters:                                                # 个性化配置部分,以下配置项建议写到该部分
    application_name: vdb1                         # 数据库节点名称,建议与第3行的name参数保持一致,否则synchronous_mode开后后不生效,此外,此参数不要写在bootstrap部分
    archive_mode: on                                         # 是否开启归档,根据实际情况
    archive_command: 'cp %p /data/archive/%f'                # 根据实际情况配置
    archive_dest: '/data/archive'                            # 直接指定归档目录,效率比archive_command高,设置本参数后archive_command参数失效
    unix_socket_directory: '/tmp'
    replconninfo1: 'localhost=192.xx.xx.1 localport=55434 localheartbeatport=55435 localservice=55436 remotehost=192.xx.xx.2 remoteport=55434 remoteheartbeatport=55435 remoteservice=55436'