版本:PostgreSQL 11.4

1. postgresql参数调优

序号 参数名称 默认值 优化值 参数说明
1 listen_addresses localhost * 默认只有本地访问,开启允许所有IP地址访问
2 max_connections 100 1000 系统允许的最大连接数,上限跟服务器配置相关
3 superuser_reserved_connections 3 13 为超级用户保留的连接数
4 shared_buffers 128MB 16G PostgreSQL缓存(数据库缓冲区),建议内存的1/4,不超过内存的1/2
5 huge_pages try try 应用大页,建议shared_buffers超过32GB时开启
6 work_mem 4MB 8MB 设置在写入临时磁盘文件之前查询操作(例如排序或哈希表)可使用的最大内存容量。如果指定值时没有单位,则以KB为单位。默认是4MB
7 effective_cache_size 4GB 16GB 可用OS的缓存大小,缓存值1/3~1/2
8 max_stack_depth  2MB 4M 进程STACK所占的空间的最大值,复杂操作建议配置8MB
9 maintenance_work_mem 64MB 维护时可以使用的内存大小,这里定义的内存是被VACUUM等消耗资源较多的命令调用时应用,把该值调大,能放慢命令的执行,建议大于256MB
10 vacuum_cost_limit 200 500 清理delete后的空间,此时对io影响较大,增加该值可以缩小对性能的影响
11 max_worker_processes 8 128 最大并发过程数,parallel worker等都是worker process,该值需要设置的足够大
12 max_parallel_workers_per_gather 2 4 每个执行节点的最大并行处理过程数,应用并行查询时设置该值大于1,不建议超过主机cores-2
13 max_parallel_workers 8 8 并行查询时,最大线程数
14 wal_buffers 4MB 用于wal的内存大小,设置为shared_buffers/32,设置为-1表示按shared_buffers计算
15 max_wal_size 1GB 16G 该值越小,wal日志写入量越大,wal日志恢复时间越长
16 min_wal_size 80MB 1G 建议值shared_buffers/2
17 checkpoint_timeout 5min 10min checkpoint超时,wal查看写入磁盘时间,视情况可以加大。
18 checkpoint_completion_target 0.5 0.5 指定检查点完成的目标,作为检查点之间总时间的一部分。
19 log_destination stderr csvlog 文本格式日志
20 log_truncate_on_rotation on on 文本日志收集

2. postgresql参数详解

1)shared_buffers
        PostgreSQL既使用自身的缓冲区,也使用内核缓冲IO。这意味着数据会在内存中存储两次,首先是存入PostgreSQL缓冲区,然后是内核缓冲区。这被称为双重缓冲区处理。对大多数操作系统来说,这个参数是最有效的用于调优的参数。此参数的作用是设置PostgreSQL中用于缓存的专用内存量。
        shared_buffers的默认值设置得非常低,因为某些机器和操作系统不支持使用更高的值。但在大多数现代设备中,通常需要增大此参数的值才能获得最佳性能。
建议的设置值为机器总内存大小的25%,但是也可以根据实际情况尝试设置更低和更高的值。实际值取决于机器的具体配置和工作的数据量大小。举个例子,如果工作数据集可以很容易地放入内存中,那么可以增加shared_buffers的值来包含整个数据库,以便整个工作数据集可以保留在缓存中。
        在生产环境中,将shared_buffers设置为较大的值通常可以提供非常好的性能,但应当时刻注意找到平衡点。

2)wal_buffers

PostgreSQL将其WAL(预写日志)记录写入缓冲区,然后将这些缓冲区刷新到磁盘。由wal_buffers定义的缓冲区的默认大小为16MB,但如果有大量并发连接的话,则设置为一个较高的值可以提供更好的性能。

3)effective_cache_size

effective_cache_size提供可用于磁盘高速缓存的内存量的估计值。它只是一个建议值,而不是确切分配的内存或缓存大小。它不会实际分配内存,而是会告知优化器内核中可用的缓存量。在一个索引的代价估计中,更高的数值会使得索引扫描更可能被使用,更低的数值会使得顺序扫描更可能被使用。在设置这个参数时,还应该考虑PostgreSQL的共享缓冲区以及将被用于PostgreSQL数据文件的内核磁盘缓冲区。默认值是4GB。
查看当前effective_cache_size的值:
4)work_mem

此配置用于复合排序。内存中的排序比溢出到磁盘的排序快得多,设置非常高的值可能会导致部署环境出现内存瓶颈,因为此参数是按用户排序操作。如果有多个用户尝试执行排序操作,则系统将为所有用户分配大小为work_mem *总排序操作数的空间。全局设置此参数可能会导致内存使用率过高,因此强烈建议在会话级别修改此参数值。默认值为4MB。
查看当前work_mem的值:

5)maintenance_work_mem
        maintenance_work_mem是用于维护任务的内存设置。默认值为64MB。设置较大的值对于VACUUM,RESTORE,CREATE INDEX,ADD FOREIGN KEY和ALTER TABLE等操作的性能提升效果显著。
查看当前maintenance_work_mem的值:

6)synchronous_commit

此参数的作用为在向客户端返回成功状态之前,强制提交等待WAL被写入磁盘。这是性能和可靠性之间的权衡。如果应用程序被设计为性能比可靠性更重要,那么关闭synchronous_commit。这意味着成功状态与保证写入磁盘之间会存在时间差。在服务器崩溃的情况下,即使客户端在提交时收到成功消息,数据也可能丢失。
查看当前synchronous_commit的设置值:

7)checkpoint_timeout和checkpoint_completion_target
        PostgreSQL将更改写入WAL。检查点进程将数据刷新到数据文件中。发生CHECKPOINT时完成此操作。这是一项开销很大的操作,整个过程涉及大量的磁盘读/写操作。用户可以在需要时随时发出CHECKPOINT指令,或者通过PostgreSQL的参数checkpoint_timeout和checkpoint_completion_target来自动完成。
checkpoint_timeout参数用于设置WAL检查点之间的时间。将此设置得太低会减少崩溃恢复时间,因为更多数据会写入磁盘,但由于每个检查点都会占用系统资源,因此也会损害性能。此参数只能在postgresql.conf文件中或在服务器命令行上设置。
checkpoint_completion_target指定检查点完成的目标,作为检查点之间总时间的一部分。默认值是 0.5。 这个参数只能在postgresql.conf文件中或在服务器命令行上设置。高频率的检查点可能会影响性能。

8)max_connections

允许客户端连接的最大数目

9)fsync

强制把数据同步更新到磁盘,如果系统的IO压力很大,把改参数改为off

在fsync打开的情况下,优化后性能能够提升30%左右。因为有部分优化选项在默认的SQL测试语句中没有体现出它的优势,如果到实际测试中,提升应该不止30%。
测试的过程中,主要的瓶颈就在系统的IO,如果需要减少IO的负荷,最直接的方法就是把fsync关闭,但是这样就会在掉电的情况下,可能会丢失部分数据。

10)commit_delay

事务提交后,日志写到wal log上到wal_buffer写入到磁盘的时间间隔。需要配合commit_sibling。能够一次写入多个事务,减少IO,提高性能

11)commit_siblings

设置触发commit_delay的并发事务数,根据并发事务多少来配置。减少IO,提高性能

注意:
并非所有参数都适用于所有应用程序类型。某些应用程序通过调整参数可以提高性能,有些则不会。必须针对应用程序及操作系统的特定需求来调整数据库参数。

postgresql性能优化相关推荐

  1. PostgreSQL 性能优化方法 - 1

    使用一个非常容易理解的案例,讲解PostgreSQL的优化手段. 本文成文自2012年初,有一些性能指标数据已经过时了,但是优化方法没有过时,请关注优化的方法. 现在的硬件和软件,一台主机达到的性能数 ...

  2. PostgreSQL 性能优化之 - 大锁与long sql/xact的蝴蝶效应

    在使用数据库时,某些特定的因素结合在一起,就可能引发蝴蝶效应. 导致数据库性能的急剧下降. 本文要讲的是和以下几个因素有关的: 因素1 PG的锁排队机制,即使没有获得锁,只要在锁队列中就会造成锁竞争. ...

  3. PostgreSQL on XFS 性能优化 - 1

    概要 XFS文件系统的性能优化主要分4块 1. 逻辑卷/RAID优化部分 2. XFS mkfs 优化部分 3. XFS mount 优化部分 4. xfsctl 优化部分 以上几个部分,建议了解原理 ...

  4. PostgreSQL数据库 OLTP高并发请求性能优化

    PostgreSQL数据库 OLTP高并发请求性能优化   2015-10-14 11:00:00|  作者:德哥:分类: PgSQL PerfTuning| 2015年度PG大象会报名地址: htt ...

  5. Postgresql快照优化Globalvis新体系分析(性能大幅增强)

    相关: <Postgresql源码(18)PGPROC相关结构> <Postgresql源码(65)新快照体系Globalvis工作原理分析> <Postgresql快照 ...

  6. PostgreSQL:十五. 性能优化

    十五. 性能优化 优化简介: PostgreSQL优化一方面是找出系统的瓶颈,提高PostgreSQL数据库整体的性能: 另一方面,需要合理的结构设计和参数调整,以提高用户操作响应的速度: 同时还要尽 ...

  7. PostgreSQL 数据库性能调优的注意点,pg数据库性能优化

    PostgreSQL 数据库性能调优的注意点,pg数据库性能优化 PostgreSQL 优化思路: 一.排序: 二.索引: 三.连接查询方式: 四.多表联查时: PostgreSQL提供了一些性能调优 ...

  8. oracle 好多p进程,PostgreSQL在最新硬件上的性能优化.pdf

    PostgreSQL在最新硬件上的性能优化 叶 涛 2015/11/20 希望探讨的问题 单实例的PostgreSQL的性能极限可以到多少? 目录 • 硬件的发展趋势及对数据库的机遇和挑战 • Pos ...

  9. 如何“暴力破解”Oracle性能优化的极端问题(附精彩案例解读)

    云和恩墨大咖系列报道 2019数据技术嘉年华于11月16日在京落下了帷幕.大会历时两天,来自全国各地上千名学术精英.数据库领袖人物.数据库专家.技术爱好者在这里汇聚一堂,围绕"开源 • 智能 ...

最新文章

  1. 900万张标注图像,谷歌发布Open Images最新V3版
  2. 网站服务器高主频还是多核心,CPU核心多好还是主频高好?核心多和主频高区别介绍...
  3. gcc 与 glibc 的关系 glibc版本查看
  4. 程序员面试金典适合java么,【程序员面试金典】面试题 01.03. URL化(示例代码)
  5. Sharepoin学习笔记—架构系列—07nSharepoint服务(Services)与服务应用程序框架(Service Application Framework) 2
  6. shell打开wifi命令_远程执行命令的填坑记录
  7. 【UML】用例图中<<extend>>与<<include>>的区别
  8. sql如何粘贴一列不同的数值_原来Excel的复制粘贴有这么多不为人知的用法
  9. Android UI开发第四十篇——ScrollTricks介绍
  10. c语言学习宝典怎么样,C语言学习宝典
  11. JS编写 简易网页音乐播放器
  12. dpkg: 依赖关系问题使得 sdkmanager 的配置工作不能继续: sdkmanager 依赖于 libgconf-2-4;然而: 未安装软件包 libgconf-2-4。 [已解决]
  13. 移动硬盘I盘误删的数据恢复方法
  14. 阿朱:企业信息化十年
  15. python tensorflow教程_真正从零开始,TensorFlow详细安装入门图文教程!
  16. openoffice jodconverter 文档转换pdf过坑记录
  17. dojo框架的基本认识
  18. .properties文件加载失败
  19. 地理空间技术改变世界的未来
  20. 福娃之路 | 五面阿里算法

热门文章

  1. 大彩串口屏modbus通讯时,根据某一变量的不同值显示对应文本
  2. arm汇编中ldr、str、stm、ldm的用法
  3. 联想thinkcentre微型计算机,联想ThinkCentre超小台式机
  4. 魅族微信无法连接到服务器,原来魅族手机要搞定这几个设置,微信才会更好用!...
  5. selenium-滑动验证码实现
  6. 【ES6-ES11 笔记】基础内容(连载中)
  7. 国内最早的android手机,三强争霸 国内10大热门Android手机排行
  8. QCustomplot 坐标轴和网格线
  9. 寻宝游戏c语言代码,查看“宝可梦探险寻宝/料理/5”的源代码
  10. 小米澎湃S2流片失败,根本原因是没有顶级高手