3.1.?设置参数

3.1.1. 参数名称和值
3.1.2. 通过配置文件设置参数
3.1.3. 通过SQL设置参数
3.1.4. 通过Shell设置参数
3.1.5. 管理配置文件内容

3.1.1.?参数名称和值

所有参数名都是大小写不敏感的。每个参数都可以接受五种类型之一的值: 布尔、字符串、整数、浮点数或枚举。该类型决定了设置该参数的语法:

  • 布尔: 值可以被写成 on, off, true, false, yes, no, 1, 0 (都是大小写不敏感的)或者这些值的任何无歧义前缀。

  • 字符串: 通常值被包括在单引号内,值内部的任何单引号都需要被双写。不过,如果值是一个简单数字或者标识符,引号通常可以被省略。

  • 数字(整数和浮点):只对浮点参数允许一个小数点。不允许使用千位分隔符。不要求引号。

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

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

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

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

3.1.2.?通过配置文件设置参数

设置这些参数最基本的方法是编辑uxsinodb.conf文件, 它通常被保存在数据目录中,例如:

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

每一行指定一个参数。名称和值之间的等号是可选的。空格是无意义的(除了在一个引号引用的参数值内)并且空行被忽略。井号(#)指示该行的剩余部分是一个注释。非简单标识符或者数字的参数值必须用单引号包围。要在参数值里嵌入单引号,要么写两个单引号(首选)或者在引号前放反斜线。

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

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

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

如果SIGHUP信号没有产生预期效果,那么系统表ux_file_settings有助于对配置文件的预测试更改,或者诊断问题。

3.1.3.?通过SQL设置参数

UXDB提供了三个SQL命令来建立配置默认值。 已经提到过的ALTER SYSTEM命令提供了一种改变全局默认值的从SQL可访问的方法;它在功效上等效于编辑uxsinodb.conf。此外,还有两个命令可以针对每个数据库或者每个角色设置默认值:

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

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

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

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

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

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

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

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

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

    SET configuration_parameter TO DEFAULT;

    等效于:

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

3.1.4.?通过Shell设置参数

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

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

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

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

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

    env UXOPTIONS="-c geqo=off -c statement_timeout=5min" uxsql

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

3.1.5.?管理配置文件内容

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

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

include 'filename'

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

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

uxsinodb.conf文件也可以包含include_dir指令,它指定要被包含的配置文件的目录。它的用法如下:

include_dir 'directory'

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

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

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

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

另一种方法是创建配置文件目录,并且将这些信息放入文件中。例如,conf.d目录可以在uxsinodb.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

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

XML 地图 | Sitemap 地图