金仓数据库KingbaseES数据库参考手册(服务器配置参数1. 设置参数)

本部分提供了影响数据库系统行为的配置参数的完整参考信息,包含参数的配置方法。

KingbaseES服务器的配置主要通过设置配置文件中参数完成。在KingbaseES V8.6 数据库中,数据库管理员可以通过以下三种方式来设置配置文件参数,从而配置服务器:

  • 通过配置文件设置参数 。

  • 通过SQL设置参数 。

  • 通过Shell设置参数 。

1. 设置参数 ¶

1.1. 参数名称和值 ¶

KingbaseES中参数名大小写是不敏感的。参数类型可以为:布尔、字符串、整数、浮点数或枚举。参数类型决定了设置该参数的语法:

  • 布尔: 值可以被写成 on off true false yes no (都是大小写不敏感的)。

  • 字符串:

通常值被包括在单引号内,值内部的任何单引号都需要被双写。不过,如果值是一个简单数字或者标识符,引号通常可以被省略。(匹配SQL关键字的值在某些上下文中需要引用。)

  • 数字(整数和浮点):

数值参数可以指定为常见的整数和浮点格式;如果参数是整数类型,则将小数四舍五入为最接近的整数。整数参数还接受十六进制输入(以 0x 开头)和八进制输入(以 开头),但是这些格式不能有分数。不要使用千位分隔符。除十六进制输入外,不需要引号。

  • 带单位的数字:

一些数字参数具有隐含单位,因为它们描述内存或时间量。单位可能是字节、千字节、块(通常是8KB)、毫秒、秒或分钟。这些设置之一的一个未修饰的数字值将使用该设置的默认单位,默认单位可以通过引用 sys_settings unit 来找到。为了方便,也可以显式地指定一个不同的单位,例如时间值可以是 '120 ms' ,并且它们将被转换到参数的实际单位。要使用这个特性,注意值必须被写成一个字符串(带有引号)。单位名称是大小写敏感的,并且在数字值和单位之间可以有空白。

  • 可用的内存单位是 (字节)、 kB (千字节)、 MB (兆字节)和 GB (吉字节)。内存单位的乘数是 1024 而不是 1000。

  • 可用的时间单位是 us (微秒)、 ms (毫秒)、 (秒)、 min (分钟)、 (小时)和 (天)。

如果一个分数值是用一个单位所指定,它将四舍五入为下一个较小单位的倍数(如果有下一个较小的单位)。例如,30.1 GB将被转换为30822 MB而非32319628902 B。如果参数是整数类型,则在进行任何单位转换之后,舍入到整数。

  • 枚举:

枚举类型的参数以与字符串参数相同的方式指定,但被限制到一组有限的值。这样一个参数可用的值可以在 sys_settings . `` enumvals``中找到。枚举参数值是大小写无关的。

1.2. 通过配置文件设置参数 ¶

kingbase.conf 文件通常被保存在数据目录中(当数据库集簇目录被初始化时,将默认拷贝 kingbase.conf 文件至数据目录,为数据集簇提供了默认值)。直接编辑 kingbase.conf 文件是设置配置参数的最基本的方式 。

以下为一个 kingbase.conf 文件的示例:

# This is a comment
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
shared_buffers = 128MB

每一行指定一个参数。名称和值之间的等号是可选的。空白无意义(除了在一个引号引用的参数值内)并且空行被忽略。井号( )指示该行的剩余部分是一个注释。非简单标识符或者数字的参数值必须用单引号包围。要在参数值里嵌入单引号,要么写两个单引号(首选)或者在引号前放反斜线。如果文件包含相同参数名的多个条目,则最后一个条目的设置覆盖之前所有同名条目的设置。

以这种方式设定的参数为集簇提供了默认值。除非这些设置被覆盖,活动会话看到的就是这些设置。下面的小节描述了管理员或用户覆盖这些默认值的方法。

主服务器进程每次收到SIGHUP信号(最简单的方法是从命令行运行 sys_ctl reload 或调用SQL函数 sys_reload_conf() 来发送这个信号)后都会重新读取这个配置文件。主服务器进程还会把这个信号传播给所有正在运行的服务器进程,这样现有的会话也能采用新值(要等待它们完成当前正在执行的客户端命令之后才会发生)。另外,可以直接向一个单一服务器进程发送该信号。有些参数只能在服务器启动时设置,在配置文件中对这些条目的修改将被忽略,直到下次服务器重启。配置文件中的非法参数设置也会在SIGHUP处理过程中被忽略(但是会记录日志)。

除 kingbase.conf 之外,KingbaseES 数据目录还包含一个文件 kingbase.auto.conf ,它和 kingbase.conf 具有相同的格式但不能被编辑。此文件保存了通过 ALTER SYSTEM 命令提供的设置。每当 kingbase.conf 被读取时,该文件也将被自动读取,并且其设置会以同样的方式生效。 kingbase.auto.conf 中的设置会覆盖 kingbase.conf 中的设置。

外部工具也可以修改 kingbase.auto.conf 。不建议在服务器运行时执行此操作,因为并发的 ALTER SYSTEM 命令可能会覆盖这些更改。这些工具可能只是简单地在末尾附加新的设置,或者它们可能选择删除重复的设置和/或注释(如 ALTER SYSTEM )。

系统视图 sys_file_settings 可以有助于对配置文件中的更改进行提前测试,或者在SIGHUP信号没有达到预期效果时用来诊断问题。

1.3. 通过SQL设置参数 ¶

KingbaseES提供了三个SQL命令来建立配置默认值。

  • ALTER SYSTEM 命令提供了一种改变全局默认值的从SQL可访问的方法,等效于直接编辑 kingbase.conf 

  • ALTER DATABASE 命令允许针对一个数据库覆盖其全局设置。

  • ALTER ROLE 命令允许用用户指定的值来覆盖全局设置和数据库设置。

只有当开始一个新的数据库会话时,用 ALTER DATABASE 和 ALTER ROLE 设置的值才会被应用。它们会覆盖从配置文件或服务器命令行获得的值,并且作为该会话后续的默认值。注意某些设置在服务器启动后不能被更改,并且因此不能被这些命令(或者下文列举的命令)设置。

当客户端连接到数据库,KingbaseES会提供两个额外的SQL命令(以及等效的函数)用以影响会话本地的配置设置:

  • SHOW 命令允许察看所有参数的当前值。对应的函数是 current_setting(setting_name text) 

  • SET 命令允许修改对于一个会话可以本地设置的参数的当前值,它对其他会话没有影响。对应的函数是``set_config(setting_name, new_value, is_local)``。

此外,系统视图 sys_settings 可以被用来查看和改变会话本地的值:

  • 查询这个视图与使用 SHOW ALL 相似,但是可以提供更多细节。它也更加灵活,因为可以为它指定过滤条件或者把它与其他关系进行连接。

  • 在这个视图上使用 UPDATE 并且指定更新 setting``列,其效果等同于发出\ ``SET 命令。例如,下面的命令

SET configuration_parameter TO DEFAULT;

等效于:

UPDATE sys_settings SET setting = reset_val WHERE name =  'configuration_parameter';

1.4. 通过Shell设置参数 ¶

除了在数据库或者角色层面上设置全局默认值或者进行覆盖,还可以通过 shell 工具把设置传递给KingbaseES。服务器和libkci客户端库都能通过 shell 接受参数值。

  • 在服务器启动期间,可通过 -c 命令行参数把参数设置传递给 kingbase 命令。例如:

kingbase -c log_connections=yes -c log_destination='syslog'

这种方式提供的设置会覆盖通过 kingbase.conf 或者 ALTER SYSTEM 提供的设置,因此除了重启服务器之外无法从全局上改变它们。

  • 当通过libkci启动一个客户端会话时,可以使用 KINGBASE_OPTIONS 环境变量指定参数设置。这种方式建立的设置构成了会话生存期间的默认值,但是不会影响 其他的会话。由于历史原因, KINGBASE_OPTIONS 的格式和启动 kingbase 命令时用到的相似,特别是 -c 标志必须被指定。例如:

env KINGBASE_OPTIONS="-c geqo=off -c statement_timeout=5min" ksql

通过 shell 或者其他方式,其他客户端和库可能提供它们自己的机制,以便允许用户在不直接 使用SQL命令的前提下修改会话设置。

1.5. 管理配置文件内容 ¶

KingbaseES提供了一些特性用于把复杂的``kingbase.conf``文件分解成子文件。这些特性在管理多个具有相关但不完全相同配置的服务器时,特别有用。

除了单个参数设置, kingbase.conf 文件可以包含包括指令,它指定要读入和处理的另一个文件,就好像该文件被插入到配置文件的这个点。此特性允许一个配置文件被划分成物理上独立的部分。包括指令看起来像:

include 'filename'

如果文件名不是一个绝对路径,它将作为包含引用配置文件的目录的相对位置。包括可以被嵌套。

也有一个 include_if_exists 指令,它的作用和 include 指令一样,不过当被引用的文件不存在或者无法被读取时其行为不同。一个通常的 include 将认为这是一个错误情况,而 include_if_exists 仅仅记录一个消息并且继续处理引用配置文件。

kingbase.conf 文件也可以包含 include_dir 指令,它指定要被包含的配置文件的一整个目录。它的用法类似:

include_dir 'directory'

非绝对目录名被当做包含引用配置文件的目录的相对路径。在该指定目录中,只有以后缀名 .conf 结尾的非目录文件才会被包括。以 字符开头的文件名也会被忽略,因为在某些平台上它们是隐藏文件。一个包括目录中的多个文件被以文件名顺序处理(根据 C 区域规则排序,即数字在字母之前并且大写字母在小写字母 之前)。

包括文件或目录可以被用来在逻辑上分隔数据库配置的各个部分,而不是用一个很大的 kingbase.conf 文件。考虑一个有两台数据库服务器的公司,每一个都有不同的内存量。很可能配置的元素都会被共享,例如用于日志的参数。但是两者关于内存的参数将会不同。并且还可能会有服务器相关的自定义。一种管理这类情况的方法是将站点的自定义配置修改分成三个文件。把下面的内容加入到 kingbase.conf 文件末尾来包括它们:

include 'shared.conf'
include 'memory.conf'
include 'server.conf'

所有的系统将会有相同的 shared.conf 。每个有特定内存量的服务器可以共享相同的 memory.conf 。可能 8GB 内存的服务器有一个,而 16GB 内存的服务器有另一个。并且 server.conf 可以装有真正服务器相关的配置信息。

另一种可能性是创建一个配置文件目录并把这个信息放到其中的文件里。例如,一个 conf.d 目录可以在 kingbase.conf 的末尾被引用:

include_dir 'conf.d'

然后命名 conf.d 目录中的文件如下所示:

00shared.conf
01memory.conf
02server.conf

这种命名习惯建立了这些文件被载入的清晰顺序。这是很重要的,因为在服务器读取配置文件时,对于一个特定的参数只有最后碰到的一个设置才会被使用。在这个例子中, conf.d/02server.conf 设置的东西将会覆盖在 conf.d/01memory.conf 中相同参数的值。

还可以使用这种配置目录方法,在命名文件时更有描述性:

00shared.conf
01memory-8GB.conf
02server-foo.conf

这种形式的安排为每个配置文件变体给定了一个唯一的名称。当多个服务器把它们的配置全部存储在一个位置(例如在一个版本控制仓库中)时,这可以帮助消除歧义(在版本控制下存储数据库配置文件是另一个值得考虑的好方法)。

1.6. 不同模式下参数差异 ¶

KingbaseES 数据库有两种模式,分别是oracle模式和pg模式。在pg模式下,以下参数默认为off状态,且禁止将其打开。

表 1.6.1 两种模式差异  ¶

ora_forbid_func_polymorphism

是否是否禁用多态

on表示开启禁用多态,同模式下不能创建

同名的函数或存储过程。

off(默认),则表示启用多态

ora_input_emptystr_isnull

输入空字符串时的处理措施。

on表示将输入的空字符串作为null值处理。

off表示不处理

ora_numop_style

是否将integers操作符当做numeric操作符

ora_statement_level_rollback

是否启用语句级回滚

ora_style_nls_date_format

这个变量设置为 on 时,日期时间的

隐式输入与输出字符串格式

才会使用参数 nls_date_format 

nls_timestamp_format

和 nls_timestamp_tz_format 的配置

你可能感兴趣的:(KingbaseES产品手册,服务器,运维,金仓数据库,kingbase)