暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

金仓数据库服务器参数配置-青学会&金仓专栏(9)

想学会更多实用技巧,欢迎加入青学会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
,实现新增、修改、删除配置参数。

生效方式

  1. 重启服务生效;
  2. 通过调用函数sys_reload_conf()
    重新加载配置文件的方式。

示例

  1. 编辑配置文件kingbase.conf
    ,新增如下配置:

    work_mem = 6MB

  2. 在命令行工具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`

生效方式

  1. 重启服务生效;
  2. 通过调用函数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
选项指定参数的配置。

生效方式:重启服务生效。

示例

  1. 在Linux终端启动服务:

    sys_ctl start -o "-c work_mem='8MB'"

  2. 启动成功后,在命令行工具ksql
    下查询参数如下:

    kingbase=# show work_mem;
    work_mem 
    ----------
      8MB
    (1 row)

4. ALTER ALL ROLE命令

操作方式ALTER ROLE ALL SET … = value

生效方式

  1. 重启服务生效;
  2. 打开新的连接会话时配置参数生效。

示例

  1. 在命令行工具ksql
    下执行如下命令:

    kingbase=# alter role all set work_mem='9MB';
    ALTER ROLE
    kingbase=# show work_mem;
     work_mem 
    ----------
      8MB
    (1 row)

  2. 退出ksql
    当前连接,重新连接后执行查询语句,显示如下:

    kingbase=# show work_mem;
     work_mem 
    ----------
      9MB
    (1 row)

5. ALTER DATABASE … SET命令

操作方式ALTER DATABASE db SET … = value

生效方式

  1. 重启服务生效;
  2. 打开新的连接会话时配置参数生效。

示例

  1. 在命令行工具ksql
    下执行如下命令:

    kingbase=# alter database test set work_mem='10MB';
    ALTER DATABASE
    kingbase=# show work_mem;
     work_mem 
    ----------
      9MB
    (1 row)

  2. 退出ksql
    当前连接,重新连接后执行查询语句,显示如下:

    kingbase=# show work_mem;
     work_mem 
    ----------
      10MB
    (1 row)

6. ALTER ROLE … SET命令

操作方式ALTER ROLE role SET … = value

生效方式

  1. 重启服务生效;
  2. 打开新的连接会话时配置参数生效。

示例

  1. 在命令行工具ksql
    下执行如下命令:

    kingbase=# alter role kingdb set work_mem='11MB';
    ALTER ROLE
    kingbase=# show work_mem;
     work_mem 
    ----------
      10MB
    (1 row)

  2. 退出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数据库感兴趣,请继续关注我们的专栏。



END

往期文章回顾

MOP社区新闻

  青学会MOP技术社区成立了!

  青学会专家顾问团成员介绍

金仓专栏

  告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)

  KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)

  KingbaseES数据脱敏-青学会&金仓专栏(3)

  KingbaseES后台服务管理-青学会&金仓专栏(4)

  电科金仓KES日常运维命令集锦-青学会&金仓专栏(5)

DBA实战小技巧

  推荐一款超实用的openGauss数据库安装工具!

  实战:记一次RAC故障排查
  DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
  DBA实战运维小技巧存储篇(一)根目录满了如何处理
  DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储

MOP社区投稿-内核开发

  浅谈 PostgreSQL GUC 模块原理

  简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理

  简单讨论 PostgreSQL C语言拓展函数返回数据表的方式

  简单分析 pg_config 程序的作用与原理
  Redis 日志机制简介(一):SlowLog
  Redis 日志机制简介(二):AOF 日志
  Redis 日志机制简介(三):RDB 日志
  pg_cron插件使用介绍
  Redis 的指令表实现机制简介
  pg几款源码工具介绍
  Redis 事务功能简介

MOP顾问说

   MOP顾问说:MOP 三种主流数据库常用 SQL(一)

  MOP顾问说:服务器内存

  MOP 顾问说:Linux Nice 值与 CPU 优先级揭秘



文章转载自青年数据库学习互助会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论