受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

19.15. 资源消耗 #

本节描述影响内存、磁盘和后台作业资源使用的参数。

19.15.1. 内存 #

shared_buffers #

指定服务器应为共享缓冲区分配多少内存。默认值通常是系统可接受的合理初始值,但在大多数安装中都可以根据工作负载调高。 如果指定值没有单位,则按块计算。此参数只能在服务器启动时设置。

huge_pages #

控制是否允许主共享内存区域使用大页。可用值通常为 onofftry。 此参数只能在服务器启动时设置。

huge_page_size #

指定大页大小。此参数主要用于调试和平台相关配置,通常只有在系统提供多种大页大小时才有意义。 此参数只能在服务器启动时设置。

temp_buffers #

指定每个会话可用于临时表的缓冲区数量。初次访问临时表时才会分配这些缓冲区,因此把这个值设得太大通常问题不大, 但如果经常创建和使用临时表,合适的值会影响性能。默认值通常为 8MB。此参数只能在会话开始时设置。

max_prepared_transactions #

指定允许的最大预备事务数。此值至少应与 max_connections 一样大,以便每个会话都能使用预备事务。 此参数只能在服务器启动时设置。

work_mem #

指定排序、哈希和其他算子在写入临时文件之前可使用的最大内存量。 默认值为 4MB。该值会影响单个操作,而不是整个会话,因此并发查询可能会消耗远高于此值的总内存。

hash_mem_multiplier #

指定哈希算子可使用的内存倍率,即在 work_mem 的基础上允许扩展多少倍。 默认值为 2.0。增大该值会提高哈希类操作的内存上限,但也会增加内存消耗。

maintenance_work_mem #

指定维护操作可使用的最大内存量,例如 VACUUMCREATE INDEX 以及 ALTER TABLE ADD FOREIGN KEY。默认值通常是 64MB。 相比 work_mem,该值通常可以设得更高,因为单个会话一次只执行一个维护操作。

注意,在自动清理运行时,最多可能分配相当于此值乘以 autovacuum_max_workers 的内存,因此不要把默认值设得过高。单独设置 autovacuum_work_mem 有助于控制这一点。

autovacuum_work_mem #

指定每个自动清理工作进程可使用的最大内存量。默认值为 -1,表示改用 maintenance_work_mem 的值。该设置只影响自动清理上下文中的 VACUUM。 此参数只能在 postgresql.conf 中或服务器命令行上设置。

logical_decoding_work_mem #

指定逻辑解码在把已解码的更改写入本地磁盘之前可使用的最大内存量。 默认值为 64MB。由于每个复制连接只使用一个这样的缓冲区,而集簇通常不会同时拥有很多这类连接, 因此把该值设得明显高于 work_mem 是安全的。

max_stack_depth #

指定服务器执行栈的安全最大深度。理想值应当是内核强制的栈大小限制减去约 1MB 的安全边界。 默认值为 2MB。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

如果把此值设得高于实际内核限制,失控的递归函数可能导致单独的后端进程崩溃。 在能够检测内核限制的平台上,服务器不会允许不安全的设置;不过并非所有平台都能提供这类信息。

shared_memory_type #

指定主共享内存区域使用的共享内存实现,包括共享缓冲区和其他共享数据。 可选值通常有 mmapsysvwindows。 并非所有平台都支持所有值,第一个受支持的选项通常就是该平台的默认值。

dynamic_shared_memory_type #

指定服务器应使用的动态共享内存实现。可选值通常有 posixsysvwindowsmmap。并非所有平台都支持所有值。 通常不建议使用 mmap,因为它可能增加系统 I/O 负载;但在调试或其他共享内存设施不可用时可能有用。 此参数只能在服务器启动时设置。

min_dynamic_shared_memory #

指定服务器启动时预留给并行查询使用的动态共享内存最小量。 当该区域不足时,新的并行查询可以临时向操作系统申请额外共享内存,但代价更高。 默认值为 0。此参数只能在服务器启动时设置。

19.15.2. 磁盘 #

temp_file_limit #

指定单个进程可用于临时文件以及保留游标相关存储文件的最大磁盘空间。 超过此限制的事务会被取消。默认值为 -1,表示不限制。此参数可在会话中设置。

19.15.3. 内核资源 #

max_files_per_process #

指定服务器进程可同时打开的最大文件数。默认值通常足以满足大多数安装。 此参数只能在服务器启动时设置。

19.15.4. 基于成本的清理延迟 #

这一组参数控制 VACUUM 的成本计量和暂停行为。

vacuum_cost_delay #

指定 VACUUM 在达到成本上限后暂停的时间。默认值为 0,表示不做成本延迟。 如果指定值没有单位,则按毫秒计算。

vacuum_cost_page_hit #

指定在缓冲区中命中的页面所对应的成本。默认值为 1。

vacuum_cost_page_miss #

指定未命中缓冲区、需要从磁盘读取的页面所对应的成本。默认值为 2。

vacuum_cost_page_dirty #

指定把页面标记为脏页所对应的成本。默认值为 20。

vacuum_cost_limit #

指定 VACUUM 在暂停前允许累积的成本上限。默认值为 200。 如果此参数设为负值,则会使用 autovacuum_vacuum_cost_limit 的相应值。

19.15.5. 后台写进程 #

bgwriter_delay #

指定后台写进程轮询与刷写脏页的频率。默认值为 200ms。此参数只能在服务器启动时设置。

bgwriter_lru_maxpages #

指定后台写进程每轮最多可写出的脏页数。默认值为 100。此参数可随时设置。

bgwriter_lru_multiplier #

指定后台写进程根据后台命中率计算刷写额度时所使用的乘数。默认值为 2.0。

bgwriter_flush_after #

指定后台写进程在刷写多少 WAL 或数据页之后主动把脏页刷新到磁盘。该参数有助于平滑 I/O 峰值。 默认值为 512kB。

19.15.6. 异步行为 #

backend_flush_after #

指定单个后台进程在写入多少数据后主动调用刷写。默认值为 0,表示不主动刷写。 这有助于减少长时间运行的写入操作对系统缓存造成的压力。

effective_io_concurrency #

指定磁盘子系统并发预读的有效度量。较高的值可使索引扫描和某些顺序扫描受益, 但只有当底层存储确实能从并发预读中获益时才应调高。默认值因平台而异。

maintenance_io_concurrency #

指定维护操作可并发预读的 I/O 数量。较高的值可能加快 VACUUM 和索引维护, 但也可能增加 I/O 压力。默认值通常为 10。

max_worker_processes #

指定服务器可启动的后台工作进程总数。此上限同时影响并行查询、逻辑复制等功能。 它必须不小于 max_parallel_workersmax_parallel_maintenance_workersmax_parallel_workers_per_gather 的需要。此参数只能在服务器启动时设置。

max_parallel_workers_per_gather #

指定单个 Gather 节点最多可使用的并行工作进程数。即使请求的数量更高,也会受 max_worker_processesmax_parallel_workers 限制。 默认值通常为 2。

max_parallel_maintenance_workers #

指定并行维护操作最多可使用的并行工作进程数,例如并行索引构建。该值受 max_worker_processesmax_parallel_workers 约束。 默认值通常为 2。

max_parallel_workers #

指定整个集簇允许的并行工作进程总数。默认值通常为 8。此值不得小于 max_parallel_maintenance_workersmax_parallel_workers_per_gather 的要求。 如果它小于 max_worker_processes,后者就不会起作用。

parallel_leader_participation #

指定并行查询的 leader 进程是否也参与执行。默认值为 on。 关闭它会让 leader 只负责调度而不参与实际执行。

old_snapshot_threshold #

指定快照被视为过旧之前允许经过的时间。开启后,服务器会在快照过旧时拒绝继续使用它,以减少长时间查询对空间回收的阻塞。 默认值为 -1,表示禁用此功能。此参数只能在服务器启动时设置。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。