GaussDB 集群参数管理(GUC)

 1. 参数分类与设置级别

GaussDB 的物理参数均保存在 gaussdb.conf 和 pg_hba.conf 配置文件中。根据内核控制范围,参数分为以下六种级别:

参数类型

作用域与控制级别

标准修改方式

生效时机

INTERNAL

静态固定参数,建库时确定。

无法修改,仅供 SHOW 查看。

永久固定

POSTMASTER

服务端核心参数(如内存、连接数)。

gs_guc set

必须重启集群
SIGHUP

数据库全局参数。

gs_guc reload

即时生效 (免重启)
BACKEND

内部会话连接参数,不推荐用户设置。

gs_guc reload

下次新建立会话时生效

SUSET

数据库管理员(SYSADMIN)参数。

gs_guc reload 或 管理员 SQL SET

依修改方式确定

USERSET

普通用户参数。

gs_guc reload 或 任意用户 SQL SET

立即生效

1.1 INTERNAL(固定参数)

  • 定义:这是数据库内嵌的、静态的固定参数。通常在编译源码或执行 gs_initdb 初始化数据库时就已经彻底定死。

  • 修改权限:创建数据库后无法修改。

  • 查看方式:只能通过 SHOW 语法或 pg_settings 视图进行人肉查看,常用于检查版本和核心块大小。

  • 典型示例:

    • blocksize:数据库标准的逻辑数据块大小(默认是 8192 字节)

    • server_version:当前高斯数据库的内核核心大版本号。

gaussdb=> SELECT current_setting('block_size')::int;
 current_setting 
-----------------
            8192
(1 row)

gaussdb=> SELECT current_setting('server_version');
 current_setting 
-----------------
 9.2.4
(1 row)

gaussdb=> show server_version;
 server_version 
----------------
 9.2.4
(1 row)

1.2 POSTMASTER(服务端核心参数)

  • 定义:这是数据库的基本参数。通常涉及到操作系统的进程初始化、共享内存大页的预分配或网络端口的绑定。

  • 修改权限:可以使用 gs_guc set 命令修改配置文件。

  • 生效时机:必须重启整个数据库集群(gs_om -t restart)才会生效。在线执行 reload 会直接被内核拒绝。

  • 典型示例:

    • max_process_memory:单节点物理能够使用的最大总内存。

    • shared_buffers:数据库用来缓存数据页面的共享内存缓冲区大小

    • max_connections:允许客户端最大并发连入的连接数。

    • port:数据库监听的 TCP 业务端口。

1.3 SIGHUP(全局即时参数)

  • 定义:这是最受 DBA 欢迎的数据库全局配置参数。

  • 修改权限:超级管理员有权更改。

  • 生效时机:即时生效,免重启。 修改时只需使用 gs_guc reload 命令,内核会向主进程发送 SIGHUP 信号量,秒级通知全网所有节点重新加载参数。

  • 典型示例:

    • synchronous_commit:主备流复制的事务提交安全级别(如 on、local)。

    • synchronous_standby_names:强同步备机的选择策略(如 ANY 1(dn_6002))。

    • log_destination:数据库日志的输出目的地(如 stderr、csvlog)。

1.4 BACKEND(会话连接参数)

  • 定义:初始化会话环境的参数。

  • 修改权限:属于内部机制或管理员参数。

  • 生效时机:对已经连进来的活动会话无效,只对“下一次”新建立的连接生效。 修改时使用 gs_guc reload,当旧连接断开、新连接进来时,新连接会读取到新值。

  • 典型示例:

    • log_connections:每次有新连接成功连入数据库时,是否在服务器日志里打印一条登录痕迹(通常在线开启用来抓取恶意扫描)。

    • log_disconnections:当客户端断开连接时,是否在日志中记录其在线时长。

1.5 SUSET(超级用户/管理员参数)

  • 定义:这是只有数据库超级管理员(Superuser)才有资格把控的调优参数。

  • 修改权限:普通业务账号无权触碰。

  • 生效时机:极度灵活。DBA 可以通过 gs_guc reload 让其全局在线生效;也可以登录 gsql 后执行 SET parameter = value; 仅让其在当前会话窗口内临时生效(退出窗口自动失效)。

  • 典型示例:

    • maintenance_work_mem:执行 CREATE INDEX、VACUUM(清理碎片)等大型维护操作时,单条 SQL 可以使用的最大内存。

    • work_mem:单条查询在进行高级 ORDER BY 或 Hash Join 时,允许在内存中消耗的容量。

    • enable_nestloop:优化器强制关闭或开启“嵌套循环连接”路径。

    • log_min_messages:控制写进服务器日志的最低日志级别。调得太低会疯狂刷屏导致磁盘 I/O 爆满。

    • enable_nestloop/enable_hashjoin:执行计划执行路径的选择开关。

1.6 USERSET(普通用户参数)

  • 定义:这是权限最松、限制最少的普通参数。

  • 修改权限:任何普通用户都能自由修改,只影响自己。

  • 生效时机:在当前 SQL 执行窗口输入 SET 参数 = 值; 立即生效,常用于临时改变显示格式。

  • 典型示例:

    • DateStyle:控制当前窗口查出来的日期时间显示格式。

    • search_path:控制默认的模式检索优先顺序。

    • explain_perf_mode:控制执行 EXPLAIN 查看执行计划时的输出样式。

在实际运维中,我们不需要去记录每个参数的类型,查询字典视图 pg_settings的 context 字段即可。

-- 示例:查询 max_process_memory 的参数分类
SELECT name, setting, context, short_desc 
FROM pg_settings 
WHERE name = 'max_process_memory';
        name        | setting  |  context   |                       short_desc                       
--------------------+----------+------------+--------------------------------------------------------
 max_process_memory | 10485760 | postmaster | Sets the maximum number of memory used by the process.
(1 row)

2. gs_guc 命令

gs_guc {set | reload | check} -Z NODE-TYPE [-N NODE-NAME] [-I INSTANCE-NAME | -D DATADIR] -c "parameter='value'"

参数说明:

  1. -Z 节点类型:最常用的是 coordinator (CN) 和 datanode (DN)。

  2. 多节点限制:单条命令暂不支持指定多个 -Z、多个 -N 或多个 -I。如需同时修改 CN 和 DN,必须拆分为两条命令分别下发!

  3. 集群级(全局):如果指定 -N all,则会对集群中所有节点或同类型的所有组件统一修改,相当于全局生效。

  4. 单节点级:如果指定具体的节点名称或 IP(例如 -N 192.168.182.138),则只修改该台主机上的配置。

  5. 动作区别

    • set:仅修改配置文件,通常用于需要重启的 POSTMASTER 参数。

    • reload:修改配置文件并向内核发送信号量,用于 SIGHUP 参数的在线即时重载。

3. gs_guc 全局修改

3.1 gs_guc check 检查参数

  在变更参数前,查看当前参数值:

# 检查所有 DN 节点的共享内存与 ustore 引擎状态
[omm@gauss1 ~]$ gs_guc check -Z datanode -N all -I all -c "shared_buffers"
The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -c shared_buffers check ].

Total GUC values: 3. Failed GUC values: 0.
The value of parameter shared_buffers is same on all instances.
    shared_buffers='5GB'

[omm@gauss1 ~]$ gs_guc check -Z datanode -N all -I all -c "enable_default_ustore_table"
The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -c enable_default_ustore_table check ].

Total GUC values: 3. Failed GUC values: 0.
The details for enable_default_ustore_table:
[192.168.182.138]  enable_default_ustore_table=NULL  [/data/cluster/data/dn/dn_6001/gaussdb.conf]
[192.168.182.139]  enable_default_ustore_table=NULL  [/data/cluster/data/dn/dn_6002/gaussdb.conf]
[192.168.182.140]  enable_default_ustore_table=NULL  [/data/cluster/data/dn/dn_6003/gaussdb.conf]

3.2 重启生效类

  针对最大内存、共享缓冲区等 POSTMASTER 参数,必须执行 set 并物理重启集群:

-- 1. 修改 max_connections 为 200
[omm@gauss1 ~]$ gs_guc set -Z datanode -N all -I all -c "max_connections=200"
The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -c max_connections=200 set ].
Begin to perform the total nodes: 3.
Popen count is 3, Popen success count is 3, Popen failure count is 0.
Begin to perform gs_guc for datanodes.
Command count is 3, Command success count is 3, Command failure count is 0.

Total instances: 3. Failed instances: 0.
ALL: Success to perform gs_guc!

-- 2. 禁用 UStore
[omm@gauss1 ~]$ gs_guc set -Z datanode -N all -I all -c "enable_default_ustore_table=off"
The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -c enable_default_ustore_table=off set ].
NOTICE: Enable to create ustore table by default
Begin to perform the total nodes: 3.
Popen count is 3, Popen success count is 3, Popen failure count is 0.
Begin to perform gs_guc for datanodes.
Command count is 3, Command success count is 3, Command failure count is 0.

Total instances: 3. Failed instances: 0.
ALL: Success to perform gs_guc!

# 3. 重启整个集群使上述配置生效
gs_om -t stop && gs_om -t start

-- 4. 发现 max_connections 修改已生效
[omm@gauss1 ~]$ gs_guc check -Z datanode -N all -I all -c "max_connections"
The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -c max_connections check ].

Total GUC values: 3. Failed GUC values: 0.
The value of parameter max_connections is same on all instances.
    max_connections=200

-- 5. UStore 已关闭
[omm@gauss1 ~]$ gs_guc check -Z datanode -N all -I all -c "enable_default_ustore_table"
The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -c enable_default_ustore_table check ].

Total GUC values: 3. Failed GUC values: 0.
The value of parameter enable_default_ustore_table is same on all instances.
    enable_default_ustore_table=off

3.3 即时生效类

  针对 SIGHUP 和 HBA 类参数, 使用 reload 即时生效:

# 在线重载 HBA 规则: 所有IP 信任登录
[omm@gauss1 ~]$ gs_guc reload -Z datanode -N all -I all -h "host all all 0.0.0.0/0 trust"
The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -h host all all 0.0.0.0/0 trust reload ].
Begin to perform the total nodes: 3.
Popen count is 3, Popen success count is 3, Popen failure count is 0.
Begin to perform gs_guc for datanodes.
Command count is 3, Command success count is 3, Command failure count is 0.

Total instances: 3. Failed instances: 0.
ALL: Success to perform gs_guc!

4. SQL 命令变更机制

gs_guc 修改的整个节点或全局的参数,还可以使用 SQL 脚本修改参数,根据sql脚本的不同,生效的范围也不相同。

4.1 数据库/用户级

使参数在某个数据库生效可以使用 alter database

-- 针对特定数据库变更兼容性行为
ALTER DATABASE postgres SET b_format_behavior_compat_options = 'enable_set_variables';

-- 针对特定运维用户修正时区
ALTER USER Ruby SET timezone TO 'UTC';

4.2 会话级(临时生效,退出登录即失效)

-- 临时调整当前窗口的时区
SET timezone TO 'UTC';

-- 临时指定当前事务的分布式计划节点路由数
SET max_datanode_for_plan = 1;

转载:实战派K8S&DB

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gauss松鼠会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值