Python 理解我更改的一些postgresql.conf设置

Python 理解我更改的一些postgresql.conf设置,python,postgresql,Python,Postgresql,我在Youtube上观看了Chris Pettus拍摄的一段名为PostgreSQL熟练程度的视频,让Python人员编辑了我的一些postgres.conf设置 我的服务器有28 GB的RAM,在进行更改之前,我的系统内存平均约为3GB。现在它徘徊在10GB左右 max_connections = 100 shared_buffers = 7GB work_mem = 64mb maintenance_work_mem = 1GB wal_buffers = 16mb 我现在没有任何问题,但

我在Youtube上观看了Chris Pettus拍摄的一段名为PostgreSQL熟练程度的视频,让Python人员编辑了我的一些postgres.conf设置

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

max_connections = 100
shared_buffers = 7GB
work_mem = 64mb
maintenance_work_mem = 1GB
wal_buffers = 16mb
我现在没有任何问题,但我想了解我所做的改变的利弊。我假设,在使用Datadog测量的系统中,将使用的平均内存增加三倍一定会带来一些切实的好处


我的服务器用于执行ETL并托管数据库。Airflow有很多连接,但通常文件非常小,只有几mb,使用pandas进行处理,与数据库进行比较以查找新行,然后加载

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

work_mem是用于排序的内存,每个并发排序分配一个这样大小的存储桶。因此,这只受max_connections*并发排序的限制,因此实际上它只受查询的排序复杂性的限制,因此增加这一限制会对系统稳定性造成最大的风险。也就是说,如果查询计划器使用8个合并排序执行单个查询,那么每次执行查询时都将使用8*work\u mem

维护\工作\内存是真空和朋友使用的内存,包括ALTER TABLE ADD外键!增加此值可能会增加真空速度

wal_缓冲区没有超过16MB的好处,16MB是服务器一次写入的最大wal块。这有助于降低写入i/o速度


另请参见:

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

work_mem是用于排序的内存,每个并发排序分配一个这样大小的存储桶。因此,这只受max_connections*并发排序的限制,因此实际上它只受查询的排序复杂性的限制,因此增加这一限制会对系统稳定性造成最大的风险。也就是说,如果查询计划器使用8个合并排序执行单个查询,那么每次执行查询时都将使用8*work\u mem

维护\工作\内存是真空和朋友使用的内存,包括ALTER TABLE ADD外键!增加此值可能会增加真空速度

wal_缓冲区没有超过16MB的好处,16MB是服务器一次写入的最大wal块。这有助于降低写入i/o速度


另请参见:

您以前的设置是什么?请参见,尤其是默认的9.6设置。除hba文件外,我从未接触过允许某些连接的conf文件。您以前的设置是什么?请参阅,特别是默认的9.6设置。除hba文件外,我从未接触过允许某些连接的conf文件。请注意,如果您正在处理大量TOAST-able varlena数据类型,例如包含超过8K pg页面大小的行的文本,那么操作系统缓存也将至关重要,因为指向TOAST属性值的指针可能会缓存在共享的_缓冲区中,实际值可以存储在单独的文件中。请注意,如果要处理大量TOAST-able varlena数据类型,例如包含超过8K pg页面大小的行的文本,那么操作系统缓存也至关重要,因为指向TOAST属性值的指针可以缓存在共享缓冲区中,而实际值可以存储在单独的文件中。看见