中国移动磐维数据库(ChinaMobileDB),简称“磐维数据库”(CMDB)。是中国移动信息技术中心首个基于中国本土开源数据库打造的面向ICT基础设施的自研数据库产品。
其产品内核能力基于华为 OpenGauss 开源软件,并进一步提升了系统稳定性。
本文将介绍磐维数据库的参数修改方式、各修改方式之间的区别,以及各参数的意义。
一、使用gs_guc工具修改参数
gs_guc是用于调整磐维数据库(基于 openGauss 数据库)postgresql.conf和pg_hba.conf配置文件中参数值的工具。
以下是使用gs_guc工具修改数据库参数的一般步骤和语法示例:
语法:
gs_guc {set|reload} {-z node-type} {-d datadir} {-c "parameter=value"} 或
gs_guc {set|reload} {-z node-type} {-d datadir} {-h "host_type database username ip_addr ip_mask auth_method authentication_options"}参数说明:
- set:指定操作功能,表示设置指定的配置参数。
- reload:用于加载配置文件。只有数据库维护者或者仲裁软件调用gs_guc修改配置文件。
- -z node-type:指定节点类型,可以是datanode等。
- -d, --pgdata=datadir:指定数据库数据文件的路径,必须使用正确的数据库数据文件路径。如果不指定,默认使用环境变量GAUSS_DATA的值。
- -c "parameter=value":要设定的数据库配置参数的名称和参数值。如果参数是一个字符串变量,则使用-c "parameter=\"value\""。如果value中含有特殊字符(如$),请转义后使用。
- -h "host_type database username ip_addr ip_mask auth_method authentication_options":用于设置客户端认证策略。host_type是必选参数,取值包括local(表示 unix 域套接字)、host(表示普通或 ssl 加密的 tcp/ip 套接字)、hostssl(表示 ssl 加密的 tcp/ip 套接字)、hostnossl(表示纯 tcp/ip 套接字)。auth_method支持trust(不验密,禁止远程主机使用 trust 方式访问数据库)、reject(拒绝访问)、md5(md5 认证,默认不支持,因安全性低,存在安全风险,不建议使用)、sha256(推荐使用)、sm3(国密 sm3)、cert(客户端证书认证)等选项。authentication_options为可选参数。
示例:
1.设置enable_transaction_read_only参数:
gs_guc reload -Z cmserver -N all -I all -c "enable_transaction_read_only=on"2.添加白名单
gs_guc reload -N all -I all -h "host all all x.x.x.x/x sha256"注意事项:
- 不要在数据库启动过程中使用gs_guc reload命令修改配置参数,应在数据库启动成功后执行修改。
- 使用gs_guc修改客户端认证策略后,若选择reload会同时发送信号量到pg_hba.conf,无需重启即可生效。但对于某些需要数据库重启才能生效的参数,修改后需要重启数据库。
- 在设置参数时,确保对要修改的参数有充分的了解,以免设置不当导致数据库出现异常。
- 对于一些敏感参数的修改,建议提前备份数据库或在测试环境中进行充分测试。
二、使用手动修改方式修改参数
要手动修改数据库参数,需要找到数据库的相关配置文件,使用文编编辑器对配置文件中的参数进行修改。
三、在磐维数据库中,使用 gs_guc 工具修改参数和手动修改参数的区别主要体现在以下几个方面:
(1)使用 gs_guc 工具修改参数相对较为便捷,无需直接编辑配置文件。它提供了命令行接口,可以通过指定参数和值来进行修改。而手动修改参数需要直接编辑相关的配置文件,对于不熟悉配置文件结构和语法的用户来说,可能较为复杂和容易出错。
(2)gs_guc 工具可以记录修改的参数和值,方便进行参数的版本控制和管理。可以通过查看工具的日志或记录来了解参数的修改历史。手动修改参数则需要手动记录修改的内容,并且在需要恢复或重复修改时,可能需要依赖记忆或其他记录方式。
(3)gs_guc 工具通常提供了一些预定义的参数选项和设置,可以满足常见的数据库配置需求。但对于一些特殊或自定义的参数,可能无法通过 gs_guc 工具直接修改,需要手动在配置文件中进行设置。
(4)手动修改配置文件时,存在误操作的风险,例如拼写错误、格式不正确或修改了不应该修改的参数,这可能导致数据库无法正常启动或运行。使用 gs_guc 工具可以减少此类风险,因为它通常会进行一些参数验证和检查。
(5)使用 gs_guc 修改参数后,通常需要重启数据库才能使修改生效。而手动修改参数后,也需要重启数据库或使用其他方法使其生效。
四、磐维数据库的CM参数和DN参数介绍
1.CM参数设置
datastorage_threshold_value_check:数据存储阈值的检查值,当数据存储量达到总容量的 85% 时触发告警
enable_transaction_read_only:启用只读事务,将数据库设置成只读模式
gs_guc reload -Z cmserver -N all -I all -c "datastorage_threshold_value_check=85"
gs_guc reload -Z cmserver -N all -I all -c "enable_transaction_read_only=on"当数据目录所在磁盘占用超过datastorage_threshold_value_check设置的阈值,自动将数据库设置为只读模式。
2.DN参数设置
(1)连接访问相关参数
listen_addresses : 数据库服务器监听本地的IP地址,* 监听所有IP,重启生效
remote_read_mode : 开启远程读功能,non_authentication指不进行证书认证,重启生效
password_encryption_type : 数据库密码加密类型,1指采用sha256和md5两种方式分别对密码加密
password_reuse_time : 检查密码重用的天数,0表示不检查
password_lock_time : 账号的锁定时间,0表示不锁定
password_effect_time : 密码有效时间,0表示长期有效
session_timeout : 不进行任何操作的会话断开时间,0表示参数不生效
gs_guc set -I all -N all -c "listen_addresses = '*'"
gs_guc set -I all -N all -c "password_encryption_type=1"
gs_guc set -I all -N all -c "password_reuse_time=60"
gs_guc set -I all -N all -c "password_lock_time=1"
gs_guc set -I all -N all -c "password_effect_time=36500"
gs_guc set -I all -N all -c "session_timeout=0"(2)wal相关参数
wal_level : 写入wal日志信息的详细程度,logical级别的wal信息支持逻辑解析,重启生效
full_page_writes : 全量检查点情况下,第一次checkpoint后会将每个页面内容全部记录到wal日志,建议设置为off以及使用增量检查点及双写功能
wal_log_hints : 同full_page_writes,包含提示位的非关键信息,重启生效
xloginsert_locks : 并发写预写式日志锁的个数,提高写预写式日志的效率,重启生效
advance_xlog_file_num : 提前初始化xlog文件的数目,在高并发情况下可减少创建xlog文件的性能影响,重启生效
gs_guc set -I all -N all -c "wal_level=hot_standby"
gs_guc set -I all -N all -c "full_page_writes=off"
gs_guc set -I all -N all -c "wal_log_hints=off"
gs_guc set -I all -N all -c "xloginsert_locks=48"
gs_guc set -I all -N all -c "advance_xlog_file_num=10"
gs_guc set -N all -I all -c "archive_mode=on"
gs_guc set -N all -I all -c "archive_dest='/archive'"(3)复制相关参数
wal_keep_segments : wal文件保留数量,每个文件16MB,增大此值,在重做备库过程中可有效避免wal被移除的错误
max_wal_senders : 上游节点sender线程的总数量,包括流复制和逻辑复制,重启生效
most_available_sync : 最大可用模式,当同步备库故障后自动降级为异步,不阻塞主库数据变更,重启生效
catchup2normal_wait_time : 异步备变同步备过程中,阻塞主库数据变更的时间,0表示不阻塞,重启生效
enable_slot_log : 将主节点的复制槽信息同步到集群内其他节点,避免集群内各节点的slot不一致
max_replication_slots : 最大复制槽的数量,包含物理复制槽和逻辑复制槽,重启生效
wal_receiver_timeout : wal receiver线程超时时间,增加此值可减少由于网络抖动导致的复制关系重建次数
sync_config_strategy : 该参数用以设置主备节点间数据库参数配置信息的同步方案,由于通常环境中备库服务器配置与主库并非1:1,因此如果同步参数配置,可能导致某些参数对于备库硬件资源而言过大,设置为none_node表示不同步,重启生效
gs_guc set -I all -N all -c "wal_keep_segments=1024"
gs_guc set -I all -N all -c "max_wal_senders=16"
gs_guc set -I all -N all -c "most_available_sync=on"
gs_guc set -I all -N all -c "catchup2normal_wait_time=0"
gs_guc set -I all -N all -c "enable_slot_log=on"
gs_guc set -I all -N all -c "max_replication_slots=32"
gs_guc set -I all -N all -c "wal_receiver_timeout=60s"
gs_guc set -I all -N all -c "sync_config_strategy=none_node"
gs_guc set -I all -N all -c "wal_sender_timeout=10s"(4)日志相关参数
log_duration : 已完成SQL语句的执行时间是否要记录到日志中,需要结合log_statement使用
log_line_prefix : 每条日志的前缀信息,时间戳、用户名、数据库名、客户端ip和端口、线程id、会话id
log_checkpoints : 记录checkpoint信息到日志里
gs_guc set -I all -N all -c "log_duration=off"
gs_guc set -I all -N all -c "log_line_prefix='%m %u %d %r %p %S'"
gs_guc set -I all -N all -c "log_checkpoints=on"
gs_guc set -I all -N all -c "temp_file_limit=100GB"(5)vacuum相关参数
vacuum_cost_limit : vacuum线程开销限制,达到此值后开始休眠
autovacuum_max_workers : autovacuum的最大并发数,每个worker都要消耗maintenance_work_mem大小的内存
autovacuum_naptime : autovacuum的休眠时间,减少此值增加autovacuum的频率,统计信息更准确,但磁盘会更加繁忙
autovacuum_vacuum_cost_delay : autovacuum的开销延迟,减少此值增加了autovacuum的频率
autovacuum_io_limits : autovacuum线程每秒触发的io上限
scale_factor 与 threshold 结合使用,触发条件一般是:表数据量 * scale_factor + threshold
autovacuum_vacuum_scale_factor : 触发vacuum的缩放系数
autovacuum_analyze_scale_factor : 触发analyze的缩放系数
autovacuum_vacuum_threshold : 触发vacuum的阈值
autovacuum_analyze_threshold : 触发analyze的阈值
gs_guc set -I all -N all -c "vacuum_cost_limit=1000"
gs_guc set -I all -N all -c "autovacuum_max_workers=10"
gs_guc set -I all -N all -c "autovacuum_naptime=20s"
gs_guc set -I all -N all -c "autovacuum_vacuum_cost_delay=10"
gs_guc set -I all -N all -c "autovacuum_vacuum_scale_factor=0.05"
gs_guc set -I all -N all -c "autovacuum_analyze_scale_factor=0.02"
gs_guc set -I all -N all -c "autovacuum_vacuum_threshold=200"
gs_guc set -I all -N all -c "autovacuum_analyze_threshold=200"
gs_guc set -I all -N all -c "autovacuum_io_limits=104857600"(6)性能统计相关参数
instr_unique_sql_count : dbe_perf.statement表中的记录数
enable_wdr_snapshot : 是否开启wdr快照功能,默认每小时执行一次,保留8天时间,类似oracle的AWR
log_min_duration_statement : 慢sql阈值,执行时间超过这个值的sql会记录到statement_history表中
track_activity_query_size : 当前执行query的文本字节数,重启生效
enable_instr_rt_percentile : 是否开启计算系统中80%和95%的SQL响应时间的功能,off表示关闭sql响应时间信息计算功能
gs_guc set -I all -N all -c "instr_unique_sql_count=200000"
gs_guc set -I all -N all -c "enable_wdr_snapshot=on"
gs_guc set -I all -N all -c "log_min_duration_statement=200"
gs_guc set -I all -N all -c "track_activity_query_size=2048"
gs_guc set -I all -N all -c "enable_instr_rt_percentile=off"
gs_guc set -I all -N all -c "enable_opfusion=off"(7)审计参数
audit_enabled : 审计进程的开启和关闭
audit_login_logout : 决定是否审计panweidb用户的登录(包括登录成功和登录失败)、注销
audit_grant_revoke : 是否审计openGauss用户权限授予和回收的操作
audit_database_process : 是否对openGauss的启动、停止、切换和恢复进行审计
audit_user_locked : 是否审计openGauss用户的锁定和解锁
audit_user_violation : 是否审计用户的越权访问操作
audit_system_object : 数据库对象的CREATE,ALTER,DROP操作审计
audit_dml_state_select : SELECT操作审计
audit_dml_state : 表的INSERT、UPDATE和DELETE操作审计
audit_function_exec : 存储过程和自定义函数的执行审计
audit_copy_exec : 是否审计COPY操作
audit_set_parameter : 是否审计SET操作
audit_xid_info : 是否记录审计日志记录事务ID功能
audit_directory : 审计文件的存储目录
audit_resource_policy : 审计日志的保存策略。
audit_space_limit : 审计文件占用的磁盘空间总量
audit_file_remain_time : 审计日志文件的最小保存时间,单位天
gs_guc set -N all -I all -c "audit_enabled=on"
gs_guc set -N all -I all -c "audit_login_logout=7"
gs_guc set -N all -I all -c "audit_grant_revoke=1"
gs_guc set -N all -I all -c "audit_database_process=0"
gs_guc set -N all -I all -c "audit_user_locked=0"
gs_guc set -N all -I all -c "audit_user_violation=0"
gs_guc set -N all -I all -c "audit_system_object=0"
gs_guc set -N all -I all -c "audit_dml_state_select=0"
gs_guc set -N all -I all -c "audit_dml_state=0"
gs_guc set -N all -I all -c "audit_function_exec=0"
gs_guc set -N all -I all -c "audit_copy_exec=0"
gs_guc set -N all -I all -c "audit_set_parameter=0"
gs_guc set -N all -I all -c "audit_xid_info=0"
gs_guc set -N all -I all -c "audit_directory='/database/panweidb/pg_audit'"
gs_guc set -N all -I all -c "audit_resource_policy=off"
gs_guc set -N all -I all -c "audit_file_remain_time=7"
gs_guc set -N all -I all -c "audit_space_limit=5GB"(8)其他参数
cstore_buffers : 列存共享缓存区大小,在不使用列存存储的场景可将此参数调到最低来节省内存开销,重启生效
local_syscache_threshold : 每个会话的最大缓存大小,设置过高会引发动态内存不足,即数据库级别的OOM
standby_shared_buffers_fraction : 备节点使用shared_buffer的比例
checkpoint_segments : 触发全量checkpoint的wal数量,即使开启增量检查点,此参数依然有效
checkpoint_completion_target : checkpoint间隔内完成全量checkpoint所需的时间
max_files_per_process : 进程允许打开的最大文件数量
behavior_compat_options : 数据库兼容性配置选项,参数值display_leading_zero会展示小数点前面的0
lc_messages : 信息语言显示格式
lc_monetary : 货币的显示格式
lc_numeric : 数值的显示格式
lc_time : 时间和时区的显示格式
gs_guc set -I all -N all -c "cstore_buffers=16MB"
gs_guc set -I all -N all -c "local_syscache_threshold=32MB"
gs_guc set -I all -N all -c "standby_shared_buffers_fraction=1"
gs_guc set -I all -N all -c "checkpoint_segments=1024"
gs_guc set -I all -N all -c "checkpoint_completion_target=0.8"
gs_guc set -I all -N all -c "max_files_per_process=100000"
gs_guc set -I all -N all -c "behavior_compat_options='display_leading_zero'"
gs_guc set -I all -N all -c "lc_messages='en_US.UTF-8'"
gs_guc set -I all -N all -c "lc_monetary='en_US.UTF-8'"
gs_guc set -I all -N all -c "lc_numeric='en_US.UTF-8'"
gs_guc set -I all -N all -c "lc_time='en_US.UTF-8'"
gs_guc set -N all -I all -c "enable_save_datachanged_timestamp=off"
gs_guc set -N all -I all -c "track_sql_count=off"
gs_guc set -N all -I all -c "enable_instr_rt_percentile=off"
gs_guc set -N all -I all -c "enable_instance_metric_persistent=off"
gs_guc set -N all -I all -c "enable_logical_io_statistics=off"
gs_guc set -N all -I all -c "enable_user_metric_persistent=off"
gs_guc set -N all -I all -c "enable_mergejoin=on"
gs_guc set -N all -I all -c "enable_nestloop=on"
gs_guc set -N all -I all -c "enable_pbe_optimization=off"
gs_guc set -N all -I all -c "enable_asp=on"
gs_guc set -N all -I all -c "recovery_max_workers=4"
gs_guc set -N all -I all -c "enable_alarm=off"
gs_guc set -N all -I all -c "enable_codegen=off"
gs_guc set -N all -I all -c "pagewriter_sleep=200"
gs_guc set -N all -I all -c "update_lockwait_timeout=1min"
gs_guc set -N all -I all -c "lockwait_timeout=1min"
gs_guc set -N all -I all -c "max_size_for_xlog_prune=104857600"
gs_guc set -N all -I all -c "gs_clean_timeout=0"
gs_guc set -N all -I all -c "enable_ustore=off"
gs_guc set -N all -I all -c "random_page_cost=1.5"



