本文主要介绍了pgsql数据库的参数配置及生效方式.
概述
pgSQL数据库的服务具有以下特点:
多数操作系统上,pgSQL是被作为一种服务(或叫守护进程)来安装的
多个pgSQL服务可以运行在同一台服务器上
不同的pgSQL服务之间侦听的端口不能重复,也不能共享同一个数据存储目录
多数情况下,在一台服务器上只会安装一个pgSQL服务
一个pgSQL服务可以包含多个独立的database
pg_ctl
start:启动
stop:关闭
-m 参数,可以用来指定断开的方式。
smart: 等到所有客户端断开后再关闭,且期间不允许新的用户连接,同时也会等待正在进行的备份完成。
fase: 默认方式,立即关闭所有连接,并对未断开的连接进行回滚操作,如果服务器处于备份状态,则终止此次备份。
immediate:强制模式,立即中止服务的所有进程,因此重启时会导致服务会使用wal进行恢复。
reload:重新加载
restart: 重启
statu: 查看服务的状态
服务配置
pgSQL常见的配置文件及作用(位于cluster的目录下):
文件名 | 主要作用 |
---|
pg_hba.conf | 客户端访问认证文件 |
postgresql.auto.conf | 保存ALTER SYSTEM修改后的参数不要手动修改它优先级较高 |
postgresql.conf | 主要配置文件 |
recovery.conf | 基于wal日志恢复的配置文件 |
pg_ident.conf | 配置哪些操作系统用户可以映射为数据库用户 |
pg_hba.conf
# TYPE | DATABASE | USER | ADDRESS | METHOD |
---|
local | database | user | | auth-method [auth-options] |
host | database | user | address | auth-method [auth-options] |
hostssl | database | user | address | auth-method [auth-options] |
hostnossl | database | user | address | auth-method [auth-options] |
host | database | user | IP-address IP-mask | auth-method [auth-options] |
hostssl | database | user | IP-address IP-mask | auth-method [auth-options] |
hostnossl | database | user | IP-address IP-mask | auth-method [auth-options] |
type
local:本地用户,将使用unix套接字连接
host:远程用户,tcp/ip连接,ssl无论是否开启都可以
hostssl:远程用户,tcp/ip连接,且开启ssl
hostnosll:远程用户,tcp/ip连接,且不开启ssl
database:可以是数据库名称或者replication(流复制)
ADDRESS:
例如: 192.168.1.10/32 代表只允许 192.168.1.10这台机器访问
192.168.1.0/24 代表只允许 192.168.1.x 的机器访问
method:代表认证的方式,常见的认证方式包括:
trust:无条件连接,不需要口令
reject:无条件拒绝连接
MD5:密码通过md5加密
password:明文口令
其他.....ident,peer,cert等
postgresql.conf
配置 | 介绍 |
---|
listen_addresses = '*' | 默认为localhost,只允许本地连接<br/>0.0.0.0 代表所有ipv4地址<br/>:: 代表所有ipv6地址 |
port=5432 | 端口,默认为5432 |
max_connections=100 | 最大连接数(建议一个cpu核心50个链接) |
shared_buffers | 数据缓冲区的内存大小,默认为128M,,建议为内存的1/4,如果超过内存的40%可能会因为文件系统的缓存导致双缓存过多,从而影响性能 |
wal_buffers | 还未写入磁盘的 WAL 数据的共享内存量,默认为-1,代表为shared_buffers的1/32 |
work_mem | 写到临时磁盘文件之前用于内部排序操作和哈希表的内存量(单会话所占用),如果超过该量,则系统会使用临时文件.work_mem = (输入内存数量- shared_buffers)/(连接数 3) 1024 (单位是 KB); |
maintenance_work_mem | 维护数据库时(VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY等操作),占用的内存大小. 设置的较大会提高VACUUM数据库和从dump文件中恢复数据库的速度,且此类操作很少执行,一般建议设置大店,但如果设置了 auto vacuum ,每次触发都会分配内存,因此也不建议设置太大. 最好是在每次进行操作时,使用set 命令临时调整该参数的大小. |
参数的级别
参数设置级别 | 参数存储位置 |
---|
cluster | postgresql.conf or postgresql.auto.conf |
db | pg_db_role_setting |
role | pg_db_role_setting |
db 和 role的组合 | pg_db_role_setting |
参数修改的方式(全局)
编辑配置文件
启动时设置(不推荐)
psql -c [参数]=[值]
ALTER SYSTEM 语句(修改的是postgresql.auto.conf)
ALTER SYSTEM SET 配置参数 { TO | = } { 值 | '值' | DEFAULT }
ALTER SYSTEM RESET 配置参数
ALTER SYSTEM RESET ALL
配置修改的方式(非全局)
配置生效级别 | 修改方式 | | | |
---|
Database | ALTER DATABASE name SET configparameter { TO \ | = } { value \ | DEFAULT }ALTER DATABASE name RESET configuration | |
Session | 通过SET命令设置当前Session的配置SET configparameter { TO \ | = } { value \ | 'value' \ | DEFAULT } SET configparameter TO DEFAULT; 更新pg_settings视图UPDATE pg_settings SET setting = new_value WHERE name = 'configparameter'; 使用set_config函数更新会话配置 SELECT set_config('configparameter',new_value,false); |
user/Role | ALTER ROLE name [ IN DATABASE database_name ] SET configparameter { TO \ | = } { value \ | DEFAULT } 重置/取消这些参数的设置ALTER ROLE name [ IN DATABASE database_name ] RESET configparameter ALTER ROLE name [ IN DATABASE database_name ] RESET ALL; | |
参数的类型
参数主要包括以下6种
Context(上下文) | 生效方式 |
---|
sihup | 给服务器发送HUP信号会使服务器重新加载postgresql.conf配置,可以立即生效 |
postmaster | 只有服务重启才能生效 |
internal | 编译期间的设置,只有重新编译才能生效。 |
backend | 与sighup类似,但是不影响正在运行的会话,只在新会话中生效 |
superuser | 使用superuser(如postgres)才能更改,不用重新加载所有配置即可生效 |
user | 单个会话用户可以在任意时间做修改,只会影响该会话 |
配置生效的方式
重启生效
pg_ctl restart
重载
pg_ctl reload
由超级用户运行SQL
SELECT pg_reload_conf()
配置的查看方式
show命令
show all; #查看所有数据库参数的值
show shared_buffers; #查看某个参数的当前值(可查看当前会话值)
select current_setting('shared_buffers');
通过查询 pg_settings
SELECT name,setting FROM pg_settings where name ~ ‘xxx’;
SELECT current_setting(name);