想学会更多实用技巧,欢迎加入青学会MOP技术社区(实名社区)。
加入方法:公众号后台回复关键字“加入”获取小助手微信,添加后登记入会。

同时欢迎大家在评论区留言互动交流!社区会不定期举行相关的抽奖、公开分享活动。
如果你有想了解的知识点希望我们发文可以后台私信。
正文开始
欢迎来到青学会&金仓专栏的第9期!在这个技术快速发展的时代,数据库作为信息系统的核心组件之一,其性能优化与稳定运行对于企业来说至关重要。合理的服务器参数设置不仅能够提升数据库的性能,还能保证系统的高可用性和安全性。本期专栏我们将深入探讨服务器参数设置的相关知识,帮助大家更好地理解和掌握如何根据实际需求调整这些关键参数,从而实现数据库的最佳运行状态。
sys_settings视图说明:
| 字段 | 描述 |
|---|---|
| name | 运行时配置参数名。 |
| setting | 参数的当前值。 |
| unit | 参数的隐式单位(比如8kB/16MB/s/min/kB/ms)。 |
| category | 参数的逻辑分类。 |
| short_desc | 参数的简短描述。 |
| extra_desc | 附加的参数的详细描述。 |
| context | 要求设置此参数值的上下文。 |
| min_val | 参数的最小允许值(对非数字值为空)。 |
| max_val | 参数的最大允许值(对非数字值为空)。 |
| enumvals | 一个枚举参数的允许值(对非数字值为空)。 |
| reset_val | 在当前会话中,RESET将会设置的参数值。 |
| sourcefile | 当前值所在的配置文件;当在配置文件中使用include指令时有用。 |
| sourceline | 当前值在配置文件中的行号。 |
| pending_restart | 参数修改过但需要重启才能生效(返回t或f)。 |
参数名称和值:
所有参数名都是大小写不敏感的。每个参数都可以接受五种类型之一的值:布尔、字符串、整数、浮点数或枚举。
布尔:值可以被写成 on, off, true, false, yes, no, 1, 0(都是大小写不敏感的)或者这些值的任何无歧义缩写。 字符串:通常值被包括在单引号内,值内部的任何单引号都需要被双写。如果值是一个简单数字或者标识符,引号通常可以被省略。 数字:只对浮点参数允许一个小数点,不要使用千位分隔符,不要求使用引号。 带单位的数字:一些数字参数具有隐含单位,因为它们描述内存或时间量。单位可能是千字节、块(通常是8kB)、毫秒、秒或分钟。这些设置中的一个未修饰的数字值将使用该设置的默认单位,默认单位可以通过引用 sys_settings.unit 来找到。为了方便,也可以显式地指定一个不同的单位,例如时间值可以是 '120 ms',并且它们将被转换到参数的实际单位。要使用这个特性,注意值必须被写成一个字符串(带有引号)。单位名称是大小写敏感的,并且在数字值和单位之间可以有空白。可用的内存单位是 kB、MB 和 GB(内存单位的乘数是 1024 而不是 1000)。可用的时间单位是 ms(毫秒)、s(秒)、min(分钟)、h(小时)和 d(天)。 枚举:枚举类型的参数以与字符串参数相同的方式指定,但被限制到一组有限的值。这样一个参数可用的值可以在 sys_settings.enumvals 中找到。枚举参数值是大小写无关的。
参数级别:
KingbaseES配置参数共包括以下七个级别(由低到高),其中参数属于sighup及其后续级别的可由用户设置。
internal
参数修改方式:initdb 影响范围:新的值影响所有会话
kingbase
参数修改方式:vi kingbase.conf 或 ALTER SYSTEM SET 新值如何生效:sys_ctl restart 影响范围:所有会话
sighup
参数修改方式:vi kingbase.conf 或 ALTER SYSTEM SET 新值如何生效:sys_ctl reload 或 SELECT sys_reload_conf() 影响范围:所有会话
superuser-backend
参数修改方式:vi kingbase.conf 或 ALTER SYSTEM SET,超级用户在连接请求包中设置。 新值如何生效:sys_ctl reload 或 SELECT sys_reload_conf() 影响范围:只影响新开启的会话,原有会话不受影响。
backend
参数修改方式:vi kingbase.conf 或 ALTER SYSTEM SET,用户在连接请求包中设置。 新值如何生效:sys_ctl reload 或 SELECT sys_reload_conf() 影响范围:只影响新开启的会话,原有会话不受影响。
superuser
参数修改方式:vi kingbase.conf 或 ALTER SYSTEM SET,或超级用户在会话中用SET命令设置。 新值如何生效:如果修改参数文件,需要重新加载参数文件生效;如果超级用户使用set命令,则在当前会话立即生效。 影响范围:如果修改参数文件,所有会话生效;如果超级用户使用set命令修改,则只会影响当前会话。
user
参数修改方式:vi kingbase.conf 或 ALTER SYSTEM SET,或用户在会话中用SET命令设置。 新值如何生效:如果修改参数文件,需要重新加载参数文件生效;如果用户使用set命令,则在当前会话立即生效。 影响范围:如果修改参数文件,所有会话生效;如果用户使用set命令修改,则只会影响当前会话。
参数设置方式及案例:
金仓数据库KingbaseES 参数配置的方式包括但不限于配置文件、数据库服务启动命令、系统命令等,不同的配置方式具备不同的优先级。本文档将按照优先级(数值越大,优先级别越高)从低到高介绍参数的10种设置方式,并提供相应的案例。
1. 配置文件
操作方式:通过编辑器直接操作配置文件kingbase.conf
,实现新增、修改、删除配置参数。
生效方式:
重启服务生效; 通过调用函数 sys_reload_conf()
重新加载配置文件的方式。
示例:
编辑配置文件
kingbase.conf
,新增如下配置:work_mem = 6MB在命令行工具
ksql
下重新加载配置文件,然后查询如下:kingbase=# show work_mem;
work_mem
----------
4MB
(1 row)
kingbase=# select sys_reload_conf();
sys_reload_conf
----------------
t
(1 row)
kingbase=# show work_mem;
work_mem
----------
6MB
(1 row)
2. ALTER SYSTEM命令
操作方式:
`alter system reset all` —— 删除`kingbase.auto.conf`中全部的参数配置
`alter system reset …` —— 删除`kingbase.auto.conf`中给定的参数配置
`alter system set … = default` —— 删除`kingbase.auto.conf`中给定的参数配置
`alter system set … = value` —— 新增给定的参数配置到`kingbase.auto.conf`
生效方式:
重启服务生效; 通过调用函数 sys_reload_conf()
重新加载配置文件的方式。
示例:
kingbase=# alter system set work_mem = '7MB';
ALTER SYSTEM
kingbase=# select sys_reload_conf();
sys_reload_conf
----------------
t
(1 row)
kingbase=# show work_mem;
work_mem
----------
7MB
(1 row)
3. 启动数据库服务时指定参数
操作方式:sys_ctl start
启动数据库服务时应用-o
选项指定参数的配置。
生效方式:重启服务生效。
示例:
在Linux终端启动服务:
sys_ctl start -o "-c work_mem='8MB'"启动成功后,在命令行工具
ksql
下查询参数如下:kingbase=# show work_mem;
work_mem
----------
8MB
(1 row)
4. ALTER ALL ROLE命令
操作方式:ALTER ROLE ALL SET … = value
生效方式:
重启服务生效; 打开新的连接会话时配置参数生效。
示例:
在命令行工具
ksql
下执行如下命令:kingbase=# alter role all set work_mem='9MB';
ALTER ROLE
kingbase=# show work_mem;
work_mem
----------
8MB
(1 row)退出
ksql
当前连接,重新连接后执行查询语句,显示如下:kingbase=# show work_mem;
work_mem
----------
9MB
(1 row)
5. ALTER DATABASE … SET命令
操作方式:ALTER DATABASE db SET … = value
生效方式:
重启服务生效; 打开新的连接会话时配置参数生效。
示例:
在命令行工具
ksql
下执行如下命令:kingbase=# alter database test set work_mem='10MB';
ALTER DATABASE
kingbase=# show work_mem;
work_mem
----------
9MB
(1 row)退出
ksql
当前连接,重新连接后执行查询语句,显示如下:kingbase=# show work_mem;
work_mem
----------
10MB
(1 row)
6. ALTER ROLE … SET命令
操作方式:ALTER ROLE role SET … = value
生效方式:
重启服务生效; 打开新的连接会话时配置参数生效。
示例:
在命令行工具
ksql
下执行如下命令:kingbase=# alter role kingdb set work_mem='11MB';
ALTER ROLE
kingbase=# show work_mem;
work_mem
----------
10MB
(1 row)退出
ksql
当前连接,重新连接后执行查询语句,显示如下:kingbase=# show work_mem;
work_mem
----------
11MB
(1 row)
7. 会话级参数设置
操作方式:SET [SESSION|LOCAL] … = value
生效方式:立即生效。
示例:
kingbase=# set work_mem ='12MB';
SET
kingbase=# show work_mem;
work_mem
----------
12MB
(1 row)
8. 事务中会话级参数设置
操作方式:在事务语句中使用会话级参数设置命令。
生效方式:立即生效。
示例:
kingbase=# set work_mem='13MB';
SET
kingbase=# begin;
BEGIN
kingbase=# show work_mem;
work_mem
----------
13MB
(1 row)
kingbase=# set work_mem='14MB';
SET
kingbase=# show work_mem;
work_mem
----------
14MB
(1 row)
kingbase=# rollback;
ROLLBACK
kingbase=# show work_mem;
work_mem
----------
13MB
(1 row)
9. 函数中会话级参数设置
操作方式:在函数中使用会话级参数设置语句。
生效方式:参数在函数内有效,函数调用完成后失效。
示例:
kingbase=# create or replace function kdb_func() returns void as $$
kingbase$# declare
kingbase$# ret text;
kingbase$# begin
kingbase$# show work_mem into ret;
kingbase$# raise notice '%', ret;
kingbase$# end;
kingbase$# $$ language plpgsql strict set work_mem='15MB';
CREATE FUNCTION
kingbase=# select kdb_func();
NOTICE: 15MB
kdb_func
----------
(1 row)
kingbase=# show work_mem;
work_mem
----------
13MB
(1 row)
10. 语句中的hint
操作方式:在SQL语句中使用hint设置参数。
生效方式:参数在语句内有效,语句结束后失效。
示例:
kingbase=# /*+Set(enable_bitmapscan off)*/
explain select id from tb where id > 1;
查看改参数是否需要重启:
第一种方法:通过kingbase.conf配置文件判断
使用grep
命令查找kingbase.conf
文件中的特定参数及其注释。
$ grep '^port =' /data/kingbase.conf
port = 54321 # (change requires restart)
第二种方法:通过sys_settings视图的pending_restart字段判断
-- 步骤1: 使用SHOW命令查看shared_buffers参数的当前值
SHOW shared_buffers;
-- 步骤2: 使用ALTER SYSTEM命令更改shared_buffers参数的值
ALTER SYSTEM SET shared_buffers TO '256MB';
-- 步骤3: 使用SELECT语句从sys_settings视图中选择name, setting, 和 pending_restart列
SELECT name, setting, pending_restart
FROM sys_settings
WHERE name = 'shared_buffers';
-- 注意: 在这里您需要手动执行重启操作,例如使用以下命令
-- 步骤4: 执行sys_ctl restart命令重启数据库服务器
-- 请确保您在适当的环境中运行此命令,因为它会重启数据库服务
-- sys_ctl restart -D /path/to/data/directory
-- 步骤5: 再次使用SELECT语句检查pending_restart列是否已更改为false
SELECT name, setting, pending_restart
FROM sys_settings
WHERE name = 'shared_buffers';
第三种方法:通过sys_settings视图的context字段值判断
会话1:
-- 步骤1: 使用ksql连接到系统,并查看ignore_system_indexes参数的当前状态
SHOW ignore_system_indexes;
-- 或者使用sys_settings视图来查看
SELECT name, setting, context
FROM sys_settings
WHERE context = 'backend' AND name = 'ignore_system_indexes';
-- 步骤3: 重新加载配置文件
SELECT sys_reload_conf();
-- 步骤4: 再次检查ignore_system_indexes的状态
SHOW ignore_system_indexes;
-- 或者再次使用sys_settings视图来检查
SELECT name, setting, context
FROM sys_settings
WHERE context = 'backend' AND name = 'ignore_system_indexes';
会话2:
编辑kingbase.auto.conf配置文件
# 请使用文本编辑器打开kingbase.auto.conf文件
# 例如使用vi编辑器:
vi /path/to/kingbase.auto.conf
# 在文件中添加以下行:
ignore_system_indexes=on;
# 保存并退出编辑器
通过本期专栏的学习,我们希望各位读者对数据库服务器参数设置有了更加深刻的理解。正确地配置服务器参数不仅能显著提升数据库性能,还能有效避免潜在的安全风险。在实际工作中,建议大家根据具体的业务场景和系统环境,结合本文提供的指导原则,灵活调整相关参数,以达到最优的系统表现。
此外,如果您对kingbase数据库感兴趣,请继续关注我们的专栏。
往期文章回顾
MOP社区新闻
金仓专栏
告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)
KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)
DBA实战小技巧
实战:记一次RAC故障排查
DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
DBA实战运维小技巧存储篇(一)根目录满了如何处理
DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储
MOP社区投稿-内核开发
简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理
简单讨论 PostgreSQL C语言拓展函数返回数据表的方式
简单分析 pg_config 程序的作用与原理
Redis 日志机制简介(一):SlowLog
Redis 日志机制简介(二):AOF 日志
Redis 日志机制简介(三):RDB 日志
pg_cron插件使用介绍
Redis 的指令表实现机制简介
pg几款源码工具介绍
Redis 事务功能简介




