炫“库”行动-人大金仓有奖征文-服务器配置技巧之参数讲解 <一>

本文详细介绍了Kingbase数据库的参数配置,包括参数名称和值的类型、配置参数的不同方法如配置文件、SQL命令和Shell工具,以及参数的生效范围。重点讨论了配置文件的管理和参数类型,如布尔、字符串、数字和枚举。同时,解释了如何通过SIGHUP信号更新配置以及如何在SQL中使用ALTER命令动态调整参数。
摘要由CSDN通过智能技术生成

[本文正在参与炫“库”行动-人大金仓有奖征文]

活动地址:https://marketing.csdn.net/p/98bd30353e7cb998b6070a89e8b91edb



一、参数的名称和值

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

  • 布尔值:值可以被写成on,off,true,false,yes,no,1,0(都是大小写不敏感的)。
  • 字符串:通常值被包括在单引号内,值内部的任何单引号都需要被双引号引起来,或者在单引号前面加一个反斜杠(\)。不过,如果值是一个简单数字或者标识符,引号通常可以被省略。
  • 数字(整数和浮点):只对浮点参数允许一个小数点。不要使用千位分隔符。不要求引号。
  • 带单位的数字:一些数字参数具有隐含单位,因为它们描述的是内存或时间量。如果用户在设置参数的值时没有指定单位,则以参数默认的单位为准。例如,参数shared_buffers表示数据缓冲区的大小,它的默认单位是数据块的个数,如果把它的值设成8,因为每个数据块的大小是8KB,则数据缓冲区的大小是8*8=64KB。如果将它的值设成128MB,则数据缓冲区的大小是128MB。参数vacuum_cost_delay的默认单位是毫秒,如果把它的值设成10,则它的值是10毫秒,如果把它的值设成100s,则它的值是100秒。要使用这个特性,注意值必须被写成一个字符串(带有引号)。单位名称是大小写敏感的,在数字值和单位之间可以有空格。带数字的参数有如下两种:
    • 可用的内存单位:kB(千字节)、MB(兆字节)和GB(吉字节)。内存单位的乘数是1024而不是1000。
    • 可用的时间单位:ms(毫秒)、s(秒)、min(分钟)、h(小时)和d(天)。
  • 枚举:枚举类型的参数与字符串参数相同的方式指定,但被限制到一组有限的值。枚举参数值是与大小写无关的。

二、配置参数的方法

1. 通过配置文件形式配置参数

  通常在数据目录下有一个名为kingbase.conf的配置文件(当数据目录被初始化时,会自动生成的默认配置文件),这个文件看起来是这个样子的:
    #This is a comment
    log_connections = off
    log_destination = ‘stderr’
    search_path = ‘"$user", public’
    shared_buffers = 128MB
  每一行指定一个参数。名称和值之间的等号是可选的。空白是无意义的(除了在一个引号引用的参数值内)并且空行被忽略。井号(#)指示该行的剩余部分是一个注释。非简单标识符或者数字的参数值必须用单引号包围。要在参数值里嵌入单引号,要么写两个单引号(首选)或者在引号前放反斜线。
  主服务器进程每次收到SIGHUP信号(最简单的方法是从命令行运行sys_ctl reload或调用SQL函数sys_reload_conf()来发送这个信号)后都会重新读取这个配置文件。主服务器进程还会把这个信号传播给所有正在运行的服务器进程,这样现有的会话也能采用新值(但是注意要等待它们完成当前正在执行的客户端命令之后才会发生)。另外,你可以直接向一个单一服务器进程发送该信号。

  注意:有些参数只能在服务器启动时设置,在配置文件中对这些条目的修改将被忽略,直到下次服务器重启才能生效。配置文件中的非法参数设置也会在SIGHUP处理过程中被忽略(但是会记录日志)。另外如果SIGHUP信号没有产生预期效果,那么系统表sys_file_settings有助于对配置文件的预测试更改,或者诊断问题。

1.2. 管理配置文件内容

  Kingbase提供了一些特性用于把复杂的kingbase.conf文件分解成子文件。换句话说一个配置文件可以包含其他配置文件。好像该文件被插入到配置文件的这个点。这个特性允许一个配置文件被划分成物理上独立的部分。

  • include指令
      使用方法:include ‘文件名’
      如果文件名不是一个绝对路径,数据库会在kingbase.conf文件所在的目录下查找这个文件。
  • include_if_exists指令
      使用方法:include_if_exists ‘文件名’
      作用和include一样,不过当被引用的文件不存在或者无法被读取时,其行为不同。通常include将认为这是一个错误,然后终止初始化。而include_if_exists仅仅记录一个消息然后继续处理其他引用或者其他配置参数。
  • include_dir
      使用方法:include_dir ‘目录名’
      作用和include一样,但是只会将该目录下所有以后缀名.conf结尾的非目录文件均作为配置文件引用(但如果以.字符开头的文件名会被忽略,因为在某些平台认为它是个隐藏文件)。
      注意:如果该目录下包括多个配置文件被引用,则会按照排序规则进行引用。因此如果多个配置文件同时对一个参数进行配置,那么生效的只有最后被引用的配置文件中的配置参数才生效,前面的都会被覆盖。

2. 通过SQL命令形式配置参数

  Kingbase提供了几个SQL命令来配置参数值:

  • ALTER SYSTEM命令,是一种改变全局参数值的方法,它在功效上等效于编辑kingbase.conf;
  • ALTER DATABASE命令,允许针对一个数据库覆盖其全局设置;
  • ALTER ROLE命令,允许用户指定的值来覆盖全局设置和数据库设置。
      注:只有当重新启动一个新的数据库会时,用ALTER DATABASE和ALTER ROLE设置的值才会被应用,它会覆盖从配置文件或服务器命令行获得的值,并且作为该会话后续的默认值。但是需要特别注意的是,某些参数值在服务器启动后不能被修改。
  • RESET命令,把一个运行时参数的值恢复到默认值。
    当一个客户端连接到数据后,kingbase会提供两个额外的SQL命令(以及等效的函数)用以影响会话本地的配置设置。
  • SHOW命令,允许查看所有参数的当前值,与之对应的函数是current_setting(setting_name text)。
  • SET命令,允许修改对于一个本地会话的参数的当前值,它对其他会话没有影响。对应的函数是set_config(setting_name, new_value, is_local)。

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

  • 查询这个视图与使用SHOW ALL相似,但是可以提供更多的细节,并且还可以指定过滤条件或者把它与其他关系进行连接。
  • 对这个视图使用UPDATE命令并指定更新setting列(setting列表式参数的当前值)和name列(name列表式运行时配置参数名),其效果等效于发出SET命令。

3. 通过Shell工具形式配置参数

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

  • 在服务器启动期间,可以通过-c命令行参数把参数设置传递给 kingbase命令。例如:kingbase -c log_connections=yes -c log_destination=‘syslog’
    这种方式提供的设置会覆盖通过kingbase.conf或者 ALTER SYSTEM提供的设置,因此除了重启服务器之外无法从全局上改变它们。
  • 当启动一个客户端会话时,可以使用PGOPTIONS 环境变量指定参数设置。这种方式建立的设置构成了会话生存期间的默认值,但是不会影响 其他的会话。例如:env PGOPTIONS="-c geqo=off -c statement_timeout=5min" psql

三、配置参数类型说明

  对于Kingbase中的所有参数,都可在视图sys_settings中查看到详细说明,其中context列根据参数的生效范围和生效方式不同,可以将参数分为如下几类:

  • internal
      这些设置不能被直接修改,它们反映了内部决定的值。某些可能在使用不同配置选项重建系统时或者改变initdb的选项时可以调整。
      这类值大概有:block_size、data_checksums、wal_block_size等
  • kingbase
      这些设置只能在服务器启动时应用,因此任何修改都需要重启服务器。这些设置的值通常都存储在kingbase.conf文件中,或者在启动服务器时通过命令行传递。当然,具有更低context类型的设置也可以在服务器启动时间被设置。
      这类值大概有:port、config_file、data_directory、max_connections等
  • sighup
      对于这些设置的修改可以在kingbase.conf中完成并且不需要重启服务器。发送一个SIGHUP信号给kingbase会导致它重新读取kingbase.conf并应用修改。kingbase将会把SIGHUP信号传递给它的孩子进程,这样它们也会获得新的值。
      这类值大概有:log_directory、log_filename等
  • superuser-backend
      对于这些设置的更改可以在kingbase.conf中进行而无需重启服务器。也可以在连接请求包中为一个特定的会话设定它们,但是只有在连接用户是超级用户时才能这样做。如果,在会话启动后这些设置就不会改变。如果你在kingbase.conf改变了它们,向kingbase发送一个SIGHUP信号让kingbase重新读取kingbase.conf。新的值将只会影响后续启动的会话。
      这类值大概有:log_connections、log_disconnections等
  • backend
      对于这些设置的修改可以在kingbase.conf中完成并且不需要重启服务器。它们也可以在一个连接请求包中为一个特定会话设置 ,任何用户都可以为这个会话做这种修改。然而,这些设置在会话启动后永不变化。如果你在kingbase.conf中修改它们,可以向kingbase发送一个SIGHUP信号让它重读kingbase.conf。新值只会影响后续启动的会话。
      这类值大概有:ignore_system_indexes、post_auth_delay等
  • superuser
      这些设置可以从kingbase.conf设置,或者在会话中用SET命令设置。仅当没有通过SET设置会话本地值时,kingbase.conf中的改变才会影响现有的会话。
      这类值大概有:max_stack_depth、wal_compression等
  • user
      这些设置可以从kingbase.conf设置,或者在会话中用SET命令设置。任何用户都被允许修改它们的会话本地值。仅当没有通过SET设置会话本地值时,kingbase.conf中的改变才会影响现有的会话。
      这类值大概有:client_encoding、debug_print_parse、debug_print_plan、search_path、temp_buffers等




    [本文正在参与炫“库”行动-人大金仓有奖征文]
    活动地址:https://marketing.csdn.net/p/98bd30353e7cb998b6070a89e8b91edb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值