1. 参数分类与设置级别
GaussDB 的物理参数均保存在 gaussdb.conf 和 pg_hba.conf 配置文件中。根据内核控制范围,参数分为以下六种级别:
|
参数类型 |
作用域与控制级别 |
标准修改方式 |
生效时机 |
|---|---|---|---|
| INTERNAL |
静态固定参数,建库时确定。 |
无法修改,仅供 |
永久固定 |
| 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_gucset 命令修改配置文件。 -
生效时机:必须重启整个数据库集群(
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'"
参数说明:
-
-Z节点类型:最常用的是coordinator(CN) 和datanode(DN)。 -
多节点限制:单条命令暂不支持指定多个
-Z、多个-N或多个-I。如需同时修改 CN 和 DN,必须拆分为两条命令分别下发! -
集群级(全局):如果指定 -N all,则会对集群中所有节点或同类型的所有组件统一修改,相当于全局生效。
-
单节点级:如果指定具体的节点名称或 IP(例如 -N 192.168.182.138),则只修改该台主机上的配置。
-
动作区别:
-
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

1797

被折叠的 条评论
为什么被折叠?



