postgresql调优一:postgresql参数调优(1)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

| 参数名称 | 参数意义 | 优化思路 |
| shared_buffers | 数据库服务器将使用的共享内存缓冲区大小,该缓冲区为所有连接共用。从磁盘读入的数据(主要包括表和索引)都缓存在这里。 | 提高该值可以减少数据库的磁盘IO。 |
| work_mem | 声明内部排序和哈希操作可使用的工作内存大小。该内存是在开始使用临时磁盘文件之前使用的内存数目。数值以kB为单位的,缺省是 1024 (1MB)。请注意对于复杂的查询,可能会同时并发运行好几个排序或者哈希操作,每个都会使用这个参数声明的这么多内存,然后才会开始求助于临时文件。同样,好几个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是 work_mem 的好几倍。ORDER BY, DISTINCT 和mergejoin都要用到排序操作,而哈希操作在哈希连接、哈希聚集和以哈希为基础的 IN 子查询处理中都会用到。该参数是会话级参数。 | 执行排序操作时,会根据work_mem的大小决定是否将一个大的结果集拆分为几个小的和 work_mem差不多大小的临时文件写入外存。显然拆分的结果是导致了IO,降低了排序的速度。因此增加work_mem有助于提高排序的速度。通常设置时可以逐渐调大,知道数据库在排序的操作时不会有大量的写文件操作即可。该内存每个连接一份,当并发连接较多时候,该值不宜过大。 |
| effective_cache_size | 优化器假设一个查询可以使用的最大内存(包括pg使用的和操作系统缓存),和shared_buffer等内存无关,只是给优化器生成计划使用的一个假设值。 | 设置稍大,优化器更倾向使用索引扫描而不是顺序扫描,建议的设置为可用空闲内存的25%,这里的可用空闲内存指的是主机物理内存在运行pg时得空闲值。 |
| maintenance_work_mem | 这里定义的内存只是在CREATE INDEX, VACUUM等时用到,因此用到的频率不高,但是往往这些指令消耗比较多的资源,因此应该尽快让这些指令快速执行完毕。 | 在数据库导入数据后,执行建索引等操作时,可以调大,比如512M。 |
| wal_buffers | 日志缓冲区,日志缓冲区的大小。 | 两种情况下要酌情调大:1.单事务的数据修改量很大,产生的日志大于wal_buffers,为了避免多次IO,调大该值。 2.系统中并发小数据量修改的短事务较多,并且设置了commit_delay,此时wal_buffers需要容纳多个事务(commit_siblings个)的日志,调大该值避免多次IO。 |
| commit_delay | 事务提交后,日志写到wal_buffer上到wal_buffer写到磁盘的时间间隔。 | 如果并发的非只读事务数目较多,可以适当增加该值,使日志缓冲区一次刷盘可以刷出较多的事务,减少IO次数,提高性能。需要和commit_sibling配合使用。 |
| commit_siblings | 触发commit_delay等待的并发事务数,也就是系统的并发活跃事务数达到了该值事务才会等待commit_delay的时间才将日志刷盘,如果系统中并发活跃事务达不到该值,commit_delay将不起作用,防止在系统并发压力较小的情况下事务提交后空等其他事务。 | 应根据系统并发写的负载配置。例如统计出系统并发执行增删改操作的平均连接数,设置该值为该平均连接数。 |
| fsync | 设置为on时,日志缓冲区刷盘时,需要确认已经将其写入了磁盘,设置为off时,由操作系统调度磁盘写的操作,能更好利用缓存机制,提高IO性能。 | 该性能的提高是伴随了数据丢失的风险,当操作系统或主机崩溃时,不保证刷出的日志是否真正写入了磁盘。应依据操作系统和主机的稳定性来配置。 |
| autovacuum | 是否开启自动清理进程(如开启需要同时设置参数stats_start_collector = on,stats_row_level = on,),整理数据文件碎片,更新统计信息。 | 如果系统中有大量的增删改操作,建议打开自动清理进程,这样一方面可以增加数据文件的物理连续性,减少磁盘的随机IO,一方面可以随时更新数据库的统计信息,使优化器可以选择最优的查询计划得到最好的查询性能。如果系统中只有只读的事务,那么关闭自动清理进程。 |
| autovacuum_naptime | 自动清理进程执行清理分析的时间间隔 | 应该根据数据库的单位时间更新量来决定该值,一般来说单位时间的更新量越大该时间间隔应该设置越短。由于自动清理对系统的开销较大,该值应该谨慎配置(不要过小)。 |
| bgwriter_delay | 后台写进程的自动执行时间 | 后台写进程的作用是将shared_buffer里的脏页面写回到磁盘,减少checkpoint的压力,如果系统数据修改的压力一直很大,建议将该时间间隔设置小一些,以免积累的大量的脏页面到checkpoint,使checkpoint时间过长(checkpoint期间系统响应速度较慢)。 |
| bgwriter_lru_maxpages | 后台写进程一次写出的脏页面数 | 依据系统单位时间数据的增删改量来修改 |
| bgwriter_lru_multiplier | 后台写进程根据最近服务进程需要的buffer数量乘上这个比率估算出下次服务进程需要的buffer数量,在使用后台写进程写回脏页面,使缓冲区能使用的干净页面达到这个估计值。 | 依据系统单位时间数据的增删改量来修改。 |
| | | |

2。 tpcc/压力测试时pg常调参数示例:

max_connections = 200

#根据数据量尽量调大shared_buffer值,把所有数据都放到内存中更好,

#曾经在32G内存的服务器上把shared_buffert调到了26G

#wal_buffers根据产生的wal日志量也适当设大点

shared_buffers=1200MB
wal_buffers = 2000kB

#work_mem要适可而止,每个连接都要用这么大的

work_mem = 1024kB

#一般做做检查点的时间长于压力测试的时间,这样性能数据会更好,等压力测试完了再去做检查点吧。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Checkpoint_timeout=120min

bgwriter_delay = 10ms  
bgwriter_lru_maxpages = 75
full_page_writes = off
log_min_messages = fatal

#压力测试时由于高并发等锁的时间可以长一些

deadlock_timeout = 3s

#平时实践有些应用中把位图扫描和顺序扫描关了性能会更好

enable_bitmapscan = off

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL调优是优化数据库性能和性能瓶颈的重要手段,以下是一些常见的PostgreSQL调优技术: 1. 调整参数PostgreSQL有许多参数可以调整,例如shared_buffers、work_mem、effective_cache_size等。通过调整这些参数,可以提高系统的性能和稳定性。 2. 索引优化:索引是PostgreSQL查询的关键,优化索引可以提高查询的性能和效率。可以通过创建、删除、调整索引,来优化查询的性能。 3. 查询优化:查询是PostgreSQL的核心功能,优化查询可以提高系统的性能和效率。可以通过分析查询计划、使用合适的连接方式、使用合适的过滤条件等,来优化查询的性能。 4. 缓存优化:PostgreSQL有多种缓存,例如共享缓存、本地缓存、预处理缓存等。通过优化这些缓存的使用,可以提高查询的性能和效率。 5. 分区优化:PostgreSQL支持表的分区,可以将大表分成多个小表,提高查询的性能和效率。可以通过分析数据的分布、查询的频率等因素,来进行分区优化。 6. 备份和恢复优化:备份和恢复是数据库管理的重要部分,优化备份和恢复可以提高系统的可用性和稳定性。可以通过使用异步备份、增量备份、并行恢复等技术,来优化备份和恢复的性能和效率。 以上是一些常见的PostgreSQL调优技术,可以帮助管理员和开发人员优化数据库的性能和性能瓶颈,提高系统的可用性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值