PG运维篇--服务配置参数
Posted 进击的CJR
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PG运维篇--服务配置参数相关的知识,希望对你有一定的参考价值。
配置参数
postgreSQL的配置参数是在postgresql.conf文件中集中管理的,该文件位于$PGDATA下,此文件中的每个参数配置项的格式都是参数名=参数值。
配置文件中使用#进行注释。
所有配置项的参数名都是大小写不敏感的。
布尔:布尔值都是大小写无关的,可以是on,off,true,false,yes,no ,0,1
整数:数值可以指定单位,如一些内存配置参数可以指定KB,MB,GB等单位
浮点数:可以指定小数的数值,如1.0
字符串:单引号包起来的字符串。
枚举:不需要单引号引起来的字符串。
postgresql.conf文件中还可以使用include指令包含其他文件中的配置内容。
include filename.
如果指定被包含的文件名不是绝对路径,那么就是相对于当前配置文件所在目录的相对路径,包含还可以嵌套。
所有的配置参数都在系统视图pg_setting中。
参数的访问和设置也有多种情况,有些参数发生改变后必须重启服务器才能生效,有些参数可以直接修改,还有一些参数只有超级用户才有权限修改。
参数分类
internal:只读参数,其中,有些参数是postgres程序写死的。
postmaster:改变这类参数的值需要重启实例,在postgresql.conf文件中可以改变这些参数后,需要重启pg实例修改才能生效。
sighup:在配置文件中改变这类参数的值不需要重启数据库,只需要向postmaster进程发送sighup信号,让其重启装置配置新的参数值就可以了。
backend:在postgresql.conf文件中更改这类设置无须重新启动服务器,只需要向postmaster发送一个sighup信号,让它重新读取配置文件中新的配置值,但新的配置值只会出现在修改之后的新连接中,已有的连接中该参数的值不会改变。
superuser:这类参数可以由超级用户使用set命令来改变,如检测死锁的超时时间的参数deadlock_timeout。而超级用户改变此参数值时只会影响自身的session配置,不会影响其他用户关于此参数的配置,向postmaster进程发送sighup信号也只会影响后续创建的连接,不会影响已有的连接。
user:这类参数可以由普通用户使用set 命令来改变本连接中的配置值。除了普通用户也可以改变外,不会影响已有的连接。
可以通过查询pg_setting表中的context字段值来了解改变参数在postgresql.conf文件中的配置值,来确定需不需要重启库生效。
postgres=# select name,context from pg_settings where name like wal_buffers;
name | context
-------------+------------
wal_buffers | postmaster
(1 row)
说明此参数需要重启才能生效。
select name,context from pg_settings where name like local_preload_libraries;
name | context
-------------------------+---------
local_preload_libraries | user
此参数只需要运行pg_ctl reload命名就可以了。
连接配置项
listen_addresses
string类型,申明服务器监听客户端连接的TCP/IP地址,改变此参数需要重启数据库服务。
通常设置为*,或0.0.0.0,表示在本机所有的IP地址上监听。为空则不会监听任何IP地址。
port
指定服务器监听的TCP端口,默认为5432,改变该参数值需要重启数据库服务。
max_connections
最大连接数,改变该参数需要重启。
superuser_reserved_connections
为超级用户连接而保留的连接数,改变该参数需要重启。
tcp_keepalives_idle
表示一个TCP连接中空闲多长时间后会发送一个keepalive报文。
tcp_keepalives_interval
在一个空闲TCP连接中,定义在发送第一个TCP keepalive包后,如果在该参数给定的时间间隔内没有收到对端的回包,则开始发送第二个TCP keepalive包,直到达到tcp_keepalives_count次后都没有收到回包,则认为连接已中断。
tcp_keepalives_count
发送TCP keepalive包的次数限制。
设置建议如下
tcp_keepalives_count =3
tcp_keepalives_idle =180
tcp_keepalives_interval =10
内存配置项
shared_buffers
它表示数据缓冲区中的数据块的个数,每个数据块的大小是8KB。这个数值必须大于16,并且至少是max_connections数值的两倍。
数据缓冲区位于数据库的共享内存中,它越大越好,不能小于128KB。
这个参数只有在启动数据库时,才能被设置。
默认值是128MB。
推荐值:1/4 主机物理内存
temp_buffers
设置每个数据库会话使用的临时缓冲区的最大数目,此本地缓冲区只用于访问临时表。每个会话可以使用set命令改变此设置值,但是必须在会话第一次使用临时表前设置才有效。
work_mem
声明内部排序操作和Hash表在开始使用临时磁盘文件之前使用的内存数目,这个内存也是本地内存,默认是1024KB,
ORDER BY, DISTINCT 和合并连接( merge joins) 都会用到排序操作。
默认值为 4 兆字节( 4MB)。
推荐值:work_mem = (输入内存数量- shared_buffers)/(连接数 * 3)* 1024 (单位是 KB);
maintenance_work_mem
它决定数据库的维护操作使用的内存空间的大小。默认是16MB。
数据库的维护操作包括VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY等操作。
值如果比较大,通常可以缩短VACUUM数据库和从dump文件中恢复数据库需要的时间。
maintenance_work_mem存放在每个数据库进程的私有内存中,而不是存放在数据库的共享内存中。这个参数可以在任何时候被设置。
预写日志配置项
wal_level
可选择值为minimal replica logical此配置项绝了多少信息写入wal日志中,改变该参数需要重启数据库服务。
默认值是minimal,只写入在数据库崩溃或突然关机后进行恢复时所需的信息。
设置为replica,则会添加一些备库只读查询时需要的信息。
如果要搭建物理备库,需要把此参数设置为replica。
如果需要使用逻辑同步,设置为logical。
fsync
boolean类型,是否使用fsync()系统调用把文件系统中的脏页书刷新到物理磁盘,确保数据库能在操作系统或者硬件崩溃的情况下恢复到一致的状态。默认是on
synchronous_commit
boolean类型,声明提交一个事务是否需要等待其把WAL日志写入磁盘后才能返回。默认值是on,将此参数设置为off不会产生数据库不一致性的风险,只会导致用户已提交成功的最近的几个事务丢失。
wal_sync_method
指定向磁盘强制更新wal日志数据的方法。如果fsync设置为off,此参数无效。
open_datasync:使用O_DSYNC选项的open()函数打开wal日志。
fdatasync:每次提交时调用fdatasync函数,默认此选项,每次提交时调用fsync,同时把所有cache都刷新到物理硬盘。windows支持
fysnc:每次提交调用fsync
open_sync:使用O_SYNC选项的open函数打开wal日志。
full_page_writes
boolean类型,打开该选项时,PG会在检查点checkpoint之后对页面进行一次修改时将整个页面写入到wal日志中,因为操作系统崩溃过程中可能只有部分页面写入磁盘,从而导致在同一个页面中会有新旧数据混合的情况。在崩溃恢复期,如果wal日志中没有记录完整的页,且页中的数据是新旧混合的,则无法完全恢复该页。
wal_buffers
指定放在共享内存中用于存储wal日志的缓冲区的数目,默认值是8,64KB,改变此参数需要重启数据库,此参数设置值大小只需要能够保存一次事务生成的wal数据即可,这些数据在每次事务提交时都会写入磁盘,通常此参数设置为8~128(64K~1MB)
wal_writer_delay
把wal日志写入磁盘的周期。在每个周期中会把缓存中的wal日志刷新到磁盘上,休眠wal_writer_delay时间。
commit_delay
指定向wal缓冲区写入记录和将缓冲区刷新到磁盘上之间的时间延迟,以微妙为单位。
commit_siblin_gs
在执行commit_delay延迟时要求同时打开的最小并发事务数,默认是5。
以上是关于PG运维篇--服务配置参数的主要内容,如果未能解决你的问题,请参考以下文章