我遵循了克里斯·佩特斯(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_mem
是VACUUM
和朋友使用的内存(包括ALTER TABLE ADD FOREIGN KEY
!增加此可能会提高真空速度。
wal_buffers
超过16MB的好处,这是服务器一次写入的最大WAL块。这可以帮助缓慢写I/O。
另请参阅:https://wiki.postgresql.org/wiki/tuning_your_postgresql_server