了解我更改的一些Postgresql.conf设置



我遵循了克里斯·佩特斯(Chris Pettus)的YouTube视频,名为PostgreSQL熟练度,供Python People编辑我的一些Postgres.conf设置。

我的服务器有28次RAM,在进行更改之前,我的系统内存平均约为3GB。现在,它徘徊在10GB左右。

max_connections = 100
shared_buffers = 7GB
work_mem = 64mb
maintenance_work_mem = 1GB
wal_buffers = 16mb

我现在没有任何问题,但是我想了解我所做的更改的利弊。我认为必须有一些切实的好处,即使我的系统中使用的平均内存三倍(用DataDog测量)。

我的服务器用于执行ETL(气流)并托管数据库。气流有很多连接,但通常这些文件很小(几个MB),这些文件与熊猫一起处理,与数据库相比,可以找到新的行,然后加载。

共享缓冲区用于Postgres内存缓存(与OS缓存相比,在更低级别接近Postgres)。将其设置为7GB意味着PG将缓存到7GB数据。因此,如果您正在进行大量的全表扫描或(递归)CTE,以提高性能。请注意,postgres主处理将在数据库启动中分配整个金额,这就是为什么您正在看到OS现在使用10GB RAM的原因。

work_mem用于各种内存,并发排序分配了此大小的桶。因此,这仅受max_connections *并发类型的界限,因此有效地仅受查询的复杂性的排序复杂性,因此增加这是系统稳定性的最大风险。(也就是说,如果您有一个查询计划器以8个合并执行的单个查询,则每次执行查询时都会使用8* work_mem)。

maintenance_work_memVACUUM和朋友使用的内存(包括ALTER TABLE ADD FOREIGN KEY!增加此可能会提高真空速度。

wal_buffers超过16MB的好处,这是服务器一次写入的最大WAL块。这可以帮助缓慢写I/O。

另请参阅:https://wiki.postgresql.org/wiki/tuning_your_postgresql_server

最新更新