Postgrsql专栏(7)postgresql.conf资源消耗相关配置

内存相关配置
1、shared_buffers
设置数据库服务器用于共享内存缓冲区的内存量。默认值通常为128 MB(128 MB),但如果您的内核设置不支持它(在initdb期间确定),则可能会更少。该设置必须至少为128千字节。 (BLCKSZ的非默认值会改变最小值。)但是,通常需要高于最小值的设置才能获得良好的性能。该参数只能在服务器启动时设置。

如果您拥有1GB或更多内存的专用数据库服务器,shared_buffers的合理起始值是系统内存的25%。有一些工作负载甚至可以在shared_buffers的大型设置中生效,但由于PostgreSQL也依赖于操作系统缓存,所以将Shared_buffers的RAM分配超过40%的可能性不大于少量。 shared_buffers的较大设置通常需要max_wal_size的相应增加,以便分散在较长时间内编写大量新数据或更改数据的过程。

在RAM小于1GB的系统上,RAM的较小比例是合适的,以便为操作系统留出足够的空间。另外,在Windows上,shared_buffers的大值不够有效。您可能会发现更好的结果,保持设置相对较低,而使用操作系统缓存更多。 Windows系统上shared_buffers的有用范围通常为64MB到512MB。

2、huge_pages
启用/禁用巨大内存页面的使用。 有效值是尝试(默认),开启和关闭。
目前,该功能仅在Linux上受支持。 设置为尝试时,该设置在其他系统上被忽略。
使用巨大的页面会导致更小的页面表和更少的CPU时间花费在内存管理上,从而提高性能。
当huge_pages设置为尝试时,服务器将尝试使用大页面,但如果失败则返回到使用正常分配。 开启后,如果不使用大页面将会阻止服务器启动。 关闭时,不会使用大量页面。

3、temp_buffers
设置每个数据库会话使用的临时缓冲区的最大数量。 这些是仅用于访问临时表的会话本地缓冲区。 默认值是八兆字节(8MB)。 该设置可以在个别会话中更改,但仅在会话中首次使用临时表之前进行更改; 随后尝试更改该值将不会影响该会话。

会话将根据需要分配临时缓冲区,直到temp_buffers给出的限制。 在实际上并不需要很多临时缓冲区的会话中设置较大值的成本只是一个缓冲区描述符,即temp_buffers中每增加大约64个字节。 但是,如果实际使用缓冲区,则会消耗额外的8192字节(或通常为BLCKSZ字节)。

4、max_prepared_transactions
设置可同时处于“准备”状态的最大事务数。 将此参数设置为零(这是默认值)会禁用准备交易功能。 该参数只能在服务器启动时设置。

如果您不打算使用准备好的事务,则应将此参数设置为零以防止意外创建准备好的事务。 如果您正在使用准备好的事务,那么您可能希望max_prepared_transactions至少与max_connections一样大,以便每个会话都可以有一个准备好的事务挂起。

运行备用服务器时,必须将此参数设置为与主服务器上相同或更高的值。 否则,查询将不被允许在备用服务器中。

5、work_mem
指定写入临时磁盘文件之前内部排序操作和散列表使用的内存量。 该值默认为4兆字节(4MB)。 请注意,对于复杂的查询,可能会同时运行多个排序或散列操作; 在开始将数据写入临时文件之前,每个操作都将被允许使用尽可能多的内存。 此外,多个运行会话可以同时进行这些操作。 因此,所使用的总内存可能是work_mem值的许多倍; 选择价值时必须牢记这一事实。 排序操作用于ORDER BY,DISTINCT和合并连接。 散列表用于散列连接,基于散列的聚合和基于散列的IN子查询处理。

6、maintenance_work_mem
指定维护操作要使用的最大内存量,例如VACUUM,CREATE INDEX和ALTER TABLE ADD FOREIGN KEY。 它默认为64兆字节(64MB)。 由于这些操作中只有一个可以通过数据库会话一次执行,并且安装通常不会同时运行多个操作,因此将此值设置为比work_mem大得多是安全的。 较大的设置可能会提高抽真空和还原数据库转储的性能。

请注意,自动清理运行时,最多可分配此内存的autovacuum_max_workers时间,因此请注意不要将默认值设置得太高。 通过单独设置autovacuum_work_mem来控制它可能很有用。

7、autovacuum_work_mem
指定每个autovacuum工作进程要使用的最大内存量。 它默认为-1,表示应该使用maintenance_work_mem的值。 在其他情况下运行时,该设置对VACUUM的行为没有影响。

8、max_stack_depth
指定服务器执行堆栈的最大安全深度。这个参数的理想设置是由内核执行的实际堆栈大小限制(由ulimit -s或本地等效设置),少于一兆字节左右的安全余量。因为在服务器的每个例程中都没有检查堆栈深度,所以需要安全余量,但只能在关键的潜在递归例程(如表达式评估)中检查。默认设置是两兆字节(2MB),这是保守的小,不太可能有崩溃的风险。但是,它可能太小而无法执行复杂的功能。只有超级用户可以更改此设置。

将max_stack_depth设置为高于实际的内核限制意味着失控的递归函数可能会导致单个后端进程崩溃。在PostgreSQL可以确定内核限制的平台上,服务器不会允许将该变量设置为不安全的值。但是,并非所有平台都提供这些信息,因此建议您慎重选择一个值。

9、dynamic_shared_memory_type
指定服务器应该使用的动态共享内存实现。 可能的值是posix(用于使用shm_open分配的POSIX共享内存),sysv(用于通过shmget分配的System V共享内存),Windows(用于Windows共享内存),mmap(使用存储在数据目录中的内存映射文件来模拟共享内存 )和none(禁用此功能)。 并非所有平台都支持所有值; 第一个受支持的选项是该平台的默认选项。 通常不鼓励在任何平台上使用mmap选项,因为操作系统可能会将修改的页面反复写回到磁盘,从而增加系统I / O负载; 但是,对于调试,pg_dynshmem目录存储在RAM磁盘上或其他共享内存设施不可用时,它可能很有用。

磁盘配置
1、temp_file_limit
指定会话可以用于临时文件的最大磁盘空间量,例如排序和散列临时文件,或者持有游标的存储文件。 试图超过此限制的交易将被取消。 该值以千字节为单位指定,-1(默认值)表示无限制。 只有超级用户可以更改此设置。

此设置限制了给定PostgreSQL会话使用的所有临时文件在任何时刻使用的总空间。 应该注意的是,用于显式临时表的磁盘空间与在查询执行过程中使用的后台临时文件不同,并不计入此限制。

内核资源使用情况配置
1、max_files_per_process
设置每个服务器子进程允许的最大同时打开文件数。 默认值是一千个文件。 如果内核正在执行安全的每进程限制,则不必担心此设置。 但是在某些平台上(特别是大多数BSD系统),如果许多进程都尝试打开那么多文件,内核将允许单个进程打开比系统实际支持的文件多得多的文件。 如果您发现自己看到“打开的文件太多”失败,请尝试减少此设置。 该参数只能在服务器启动时设置。

其余关于资源消耗的相关配置可以参考:
https://www.postgresql.org/docs/9.5/static/runtime-config-resource.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值