博客
关于我
PostgreSQL配置文件--资源使用(除WAL外)
阅读量:800 次
发布时间:2023-03-03

本文共 3051 字,大约阅读时间需要 10 分钟。

PostgreSQL 资源使用(除 WAL 之外)

在 PostgreSQL 数据库的性能优化中,资源配置是至关重要的一环。本文将从内存、硬盘、内核资源等多个方面,详细介绍如何优化 PostgreSQL 的资源使用。

内存 Memory

shared_buffers

  • 默认值:shared_buffers = 128MB
  • 最小值:128KB
  • 作用:这是一个关键参数,决定了数据库共享缓冲区的大小。PostgreSQL 在读取数据时,首先将数据从磁盘读取到内存中,然后进行操作,最后再将数据写回磁盘。shared_buffers 用于存放从磁盘读取的数据。
  • 建议:将 shared_buffers 设置在 25%~40% 的范围内。需要注意的是,Linux 和 Windows 对内存管理的方式不同。在 Linux 中,需要配置 /etc/sysctl.conf 中的 kernel.shmmax 参数。一个简单的计算方法是 kernel.shmmax = postgres shared_buffers + 32MB。

huge_pages

  • 默认值:huge_pages = try(使用)、off(不使用)、try(尽量使用)中的一种。
  • 作用:决定了数据库是否使用大页内存。大页内存需要操作系统的支持。建议将 vm.nr_hugepages 设置为 2 倍的 shared_buffers 大小,以确保其足够大。

temp_buffers

  • 默认值:temp_buffers = 8MB
  • 最小值:800KB
  • 作用:用于存放数据库会话访问临时表数据的内存缓冲区。临时表缓冲区存放在每个数据库进程的私有内存中,而不是共享内存中。

max_prepared_transactions

  • 默认值:max_prepared_transactions = 0
  • 作用:决定了能够同时处于 prepared 状态的事务的最大数量。值为 0 时,数据库会关闭 prepared 事务的特性。通常建议与 max_connections 的值相同。每个事务消耗 600 字节共享内存。

maintenance_work_mem

  • 默认值:maintenance_work_mem = 64MB
  • 作用:决定了数据库维护操作(如 VACUUM)使用的内存空间大小。建议将其设置为总内存大小的 1/4 或 autovacuum_max_workers 的值。

work_mem

  • 默认值:work_mem = 4MB
  • 作用:决定了数据库排序操作和哈希表使用的内存缓冲区大小。合理设置 work_mem 对提高查询性能至关重要。建议根据业务量和系统监控数据进行调整。

autovacuum_work_mem

  • 默认值:autovacuum_work_mem = -1
  • 作用:如果设置为 -1,则使用 maintenance_work_mem 的值。建议根据实际需求进行调整。

max_stack_depth

  • 默认值:max_stack_depth = 2MB
  • 作用:决定了数据库进程运行时的栈空间最大值。建议将其设置为比 OS 的栈限制小 1MB。

dynamic_shared_memory_type

  • 默认值:dynamic_shared_memory_type = posix
  • 作用:决定了动态共享内存的类型。支持 posix、sysv、windows 等多种类型。

replacement_sort_tuples

  • 默认值:replacement_sort_tuples = 150000
  • 作用:影响了替换选择排序的记录数。建议根据 CPU 缓存大小进行调整。

硬盘

temp_file_limit

  • 默认值:temp_file_limit = -1
  • 作用:限制每个线程的临时文件大小。-1 表示不限制。

内核资源 Kernel Resource Usage

max_files_per_process

  • 默认值:max_files_per_process = 1000
  • 作用:限制数据库进程打开文件的最大数量。建议根据实际文件数量进行调整。

shared_preload_libraries

  • 默认值:shared_preload_libraries = ''
  • 作用:指定共享预加载库的路径。

Cost-Based Vacuum Delay

vacuum_cost_delay

  • 默认值:vacuum_cost_delay = 10ms
  • 作用:控制 VACUUM 操作的延迟。值越大,VACUUM 操作的延迟越大。

vacuum_cost_page_hit、vacuum_cost_page_miss、vacuum_cost_page_dirty

  • 默认值:分别为 1、10、20 credits
  • 作用:控制 VACUUM 操作对页面访问、页面缺页和页面脏页的成本。

vacuum_cost_limit

  • 默认值:vacuum_cost_limit = 200 credits
  • 作用:限制 VACUUM 操作的总成本。

Background Writer

bgwriter_delay

  • 默认值:bgwriter_delay = 200ms
  • 作用:控制后台写入进程的等待时间。建议在 10ms~10s 之间。

bgwriter_lru_maxpages

  • 默认值:bgwriter_lru_maxpages = 100
  • 作用:决定后台写入进程每次写入的最大数据量。

bgwriter_lru_multiplier

  • 默认值:bgwriter_lru_multiplier = 2.0
  • 作用:决定后台写入进程每次申请缓冲区的倍率。

bgwriter_flush_after

  • 默认值:bgwriter_flush_after = 512kB
  • 作用:控制后台写入进程在写入大块数据时是否同步刷盘。

Asynchronous Behavior

max_worker_processes

  • 默认值:max_worker_processes = 8
  • 作用:决定数据库集群中可以同时运行的最大工作进程数量。

max_parallel_workers_per_gather

  • 默认值:max_parallel_workers_per_gather = 2
  • 作用:决定每个 GATHER 节点可以启用多少个工作进程。

max_parallel_workers

  • 默认值:max_parallel_workers = 8
  • 作用:决定数据库可以同时执行的最大并行查询工作线程数。

effective_io_concurrency

  • 默认值:effective_io_concurrency = 1
  • 作用:控制磁盘 I/O 操作的并发数。建议根据磁盘类型和负载进行调整。

backend_flush_after

  • 默认值:backend_flush_after = 0
  • 作用:如果设置为 0,则禁用后台刷盘操作。

替换快照阈值

old_snapshot_threshold

  • 默认值:old_snapshot_threshold = -1
  • 作用:决定快照可以保持的最久时间。-1 表示禁用。

通过合理配置以上参数,可以显著提升 PostgreSQL 的性能表现。建议根据实际系统负载和业务需求,对每个参数进行调整,并通过监控工具(如 pg_stat_bgwriter)持续优化数据库性能。

转载地址:http://zvxfk.baihongyu.com/

你可能感兴趣的文章
poj2195 bfs+最小权匹配
查看>>
POJ2251
查看>>
POJ2253-Frogger
查看>>
poj2309
查看>>
POJ2390 Bank Interest【水题】
查看>>
poj2398
查看>>
poj2478欧拉函数
查看>>
poj2546
查看>>
POJ2728 Desert King
查看>>
POJ2794 Double Patience[离散概率 状压DP]
查看>>
poj2828(线段树查找序列第k小的值)
查看>>
POJ2891:Strange Way to Express Integers——题解
查看>>
poj3045 Cow Acrobats(二分最大化最小值)
查看>>
poj3061 Subsequence(尺取法)
查看>>
poj3074 DLX精确覆盖
查看>>
poj3252(组合数)
查看>>
Qt笔记——QToolBox开发简易QQ聊天界面
查看>>
poj3307
查看>>
Qt笔记——QString与隐式共享、MVC架构
查看>>
Qt笔记——QSemaphore处理生产者/消费者模式
查看>>