作者:瀚高PG实验室 (Highgo PG Lab)- 波罗
本文主要涉及HGDB的参数文件格式说明,参数的修改配置生效及查看的方法。
一、HGDB的主要参数配置文件是postgresql.conf,其格式内容表述如下:
1)所有参数名都是大小写不敏感的。
2)参数类型可以是:布尔、字符串、整数、浮点数或枚举。
3)布尔值可以是(都是大小写无关) ON, OFF, TRUE, FALSE, YES, NO, 1, 0 或这些东西的任意清晰无歧义的前缀。
4)一些设置指定内存或时间值,其隐含的单位可能是:kB(千字节)、块(通常是8KB)、毫秒、秒、分钟等等。隐含单位可以通过引用 pg_settings.unit 获取。为了避免混淆,可以在指定数值的同时指定单位。可用内存单位:kB(千字节), MB(兆字节), GB(吉字节);可用时间单位:ms(毫秒), s(秒), min(分钟), h(小时), d(天)。内存单位中的"千"等于1024,而不是1000
5)每一行只能指定一个参数,空格和空白行都会被忽略。
6)“ #”表示注释,注释信息不用单独占一行,可以出现在配置文件的任何地方。如果参数的值不是简单的标识符和数字,应该用单引号引起来。如果参数的值中有单引号,应该写两个单引号,或者在单引号前面加一个反斜杠。
7)一个配置文件也可以包含其它配置文件,使用include指令能够达到这个目的,例如,假设postgresql.conf文件中有下面一行:include‘my.confg’,文件my.config中的配置信息也会被数据库读入。如果include指令中指定的文件名不是绝对路径,数据库会在postgresql.conf文件所在的目录下查找这个文件。
二、修改参数的几种方式
1)编辑postgresql.conf文件;
2)通过SQL影响参数;
ALTER SYSTEM命令改变全局默认值的从SQL可访问的方法;
ALTER DATABASE命令允许针对一个数据库覆盖其全局设置;
ALTER ROLE命令允许用用户指定的值来覆盖全局设置和数据库设置。
3)客户端连接到数据库,set 命令允许修改一个会话可以本地设置参数的当前值(将覆盖任何来自其它方面的设置),对其它会话没影响(退出当前会话后失效);此外,系统视图pg_settings可以来查看和改变会话本地的值。
示例:
SET configuration_parameter TO DEFAULT;
等效于:
UPDATE pg_settings SET setting = reset_val WHERE name= ‘configuration_parameter’;
三、使参数设置生效
对于配置服务器,太多时候我们在Linux中做的操作是,配置*.conf文件,然后重启服务。
而很多服务都具有reload功能,而但是具体到某个配置,有时候直接说出需不需要重启服务而使得配置生效,这并不是一件容易的事情。
HGDB将这部分能用在数据表pg_settings中显式的告诉了我们:
highgo=# select name, context from pg_settings;
参数名称举例 | Context(上下文) | 生效方式注解 |
archive_command | sihup | 给服务器发送HUP信号会是服务器重新加载postgresql.conf配置,可以立即生效 |
archive_mode | postmaster | 只有服务重启才能生效 |
block_size | internal | 编译期间的设置,只有重新编译才能生效。 |
log_connections | backend | 与sighup类似,但是不影响正在运行的会话,只在新会话中生效 |
log_min_duration_statement | superuser | 使用superuser(如postgres)才能更改,不用重新加载所有配置即可生效 |
search_patch | user | 单个会话用户可以在任意时间做修改,只会影响该会话 |
重新加载数据库配置的方法有三种:
1. 用超级用户highgo运行
SELECT pg_reload_conf();
2. 用UNIX的kill手动发起HUP信号
$ps -ef | grep postmaster | grep -v grep | xargs kill -HUP
3.使用pg_ctl命令触发SIGHUP信号
$pg_ctl reload
主服务器进程每次收到 SIGHUP 信号后都会重新读取这个配置文件。同时主服务器进程也将这个信号广播给所有正在运行的子服务器进程,这样现有会话也能得到新值。
四、参数值查看方式
用户可以在psql中执行命令show来查看所有的数据库参数的当前值。例如:
(1)show all; --查看所有数据库参数的值
(2)show configuration_parameter; --查看某个参数的当前值
(3)也可以用虚表 pg_settings来显示和更新当前会话的运行时参数
select name,context,unit,setting,boot_val,reset_val from pg_settings where name in('listen_addresses','max_connectsions','shared_buffers','effective_cache_size','work_mem','maintenance_work_mem') order by context,name;
它等效于 SHOW 和 SET ,但是用起来更方便,因为它可以和其它表连接起来使用,或者用任意用户需要的选择条件来查询。
附:
kill -HUP pid 作用
其中 pid 是进程标识。
如果想要更改配置,并且不想停止服务之后再启动服务[即停服务、启动服务的重启方式],可以使用该命令。
对配置文件作了更改后,发出[kill -HUP pid]命令,会以动态方式更新服务配置。
当我们发送一个挂起信号(1 或 HUP)时,大多数服务器进程[所有常用的进程]都会进行复位操作并重新加载它们的配置文件。
by 波罗