了解一些postgresql.conf设置我改变了

时间:2017-09-06 15:24:56

标签: python postgresql

我按照Chris Pettus的Youtube视频调用PostgreSQL熟练的Python人来编辑我的一些postgres.conf设置。

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

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

我现在没有任何问题,但我想了解我所做的改变的利弊。我假设必须有一些实际的好处,使我的系统中使用的平均内存增加三倍(用Datadog测量)。

我的服务器用于执行ETL(Airflow)并托管数据库。 Airflow有很多连接,但通常文件很小(几mb)用pandas处理,与数据库相比,找到新行,然后加载。

1 个答案:

答案 0 :(得分:3)

共享缓冲区用于postgres内存缓存(与OS缓存相比,更接近postgres的更低级别)。将其设置为7gb意味着pg将缓存到7gb的数据。因此,如果您正在进行大量全表扫描或(递归)CTE,可能会提高性能。请注意,postgres主进程将在数据库启动时分配此全部数量,这就是为什么您现在看到您的操作系统使用10GB内存。

work_mem是用于排序的内存,每个并发排序分配此大小的存储桶。因此,这仅受max_connections *并发排序的限制,因此有效地受查询的排序复杂性限制,因此增加此值会对系统稳定性造成最大风险。 (也就是说,如果查询计划程序使用8个合并排序执行单个查询,则每次执行查询时都将使用8 * work_mem

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

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

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