4

PG运维篇--服务配置参数_MySQL DBA攻坚之路的技术博客_51CTO博客

 2 years ago
source link: https://blog.51cto.com/u_13874232/5471130
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

PG运维篇--服务配置参数

推荐 原创

进击的CJR 2022-07-14 11:05:53 博主文章分类:PostgreSQL ©著作权

文章标签 数据库 重启 数据 文章分类 其它 数据库 yyds干货盘点 阅读数381

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地址。

指定服务器监听的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。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK