PostgreSQL内存配置,参考了其他人的总结,再加上自己的一些体会,做个记录。

postgresql的内存分配主要由shared_buffers、temp_buffers、work_mem、maintenance_work_mem参数控制。

1.shared_buffers

又可以叫做共享缓冲区,postgresql对数据操作时都要先将数据从磁盘读取到内存中,然后进行更新,最后再将数据写回磁盘。shared_buffers的功能就是用于存放从磁盘读取的数据。根据文档参数的设置范围一般在25%~40%之间。windows与linux对内存的管理方式不同,在linux中需要注意共享段大小的设置(kernel.shmmax)。

在系统(OS)中,记得设置 kernel.shmmax的值(/etc/sysctl.conf)

kernel.shmmax决定了进程可调用的最大共享内存数量。简单的计 算方法是

kernel.shmmax=postgres shared_buffers + 32 MB

2.temp_buffers

称之为临时缓冲区,用于数据库会话访问临时表数据,系统默认值为8M。可以在单独的session中对该参数进行设置,尤其是需要访问比较大的临时表时,将会有显著的性能提升。

3.work_mem

可以称之为工作内存或者操作内存2~4M。其负责内部的sorthash操作,合适的work_mem大小能够保证这些操作在内存中进行。定义太小的话,sort或者hash操作将需要与硬盘进行swap,这样会极大的降低系统的性能;太大的话致使在能够在内存中完成的操作数量减少,其他的部分需要与磁盘进行swap操作,增加IO降低性能。系统提供的默认值是1M,在实际的生产环境中,要对系统监控数据进行分析,作出最好的选择。

大致有两种方式:估计方法与计算方法。

第一种是可以根据业务量的大小和类型,一般语句运行时间,来粗略的估计一下。

第二种方式是通过对数据库的监控,数据采集,然后计算其大小。总之合适的大小对系统的性能至关重要。

在实际的维护中可以通过explain analyze分析语句的work_mem大小是否合适。在语句中设置work_mem参数的大小可以充分利用内存,提高语句的执行效率。

对于work_mem内存分配时还要考虑数据库的并发情况,max_connections决定了系统的最大的并发连接数。不论如何调整work_mem都要考虑max_connections*work_mem+shared_buffers+temp_buffers+maintenance_work_mem+操作系统所需内存不能够超过整个的RAM大小,这是非常重要的。

work_mem参数对系统的性能是如此的重要,让其实时的适应数据库的运行状况显的不太可能,但是可以通过对数据库运行周期的监控,总结相应的数据,然后定制一个专用的脚本,专门用来修改work_mem的大小,使其阶段性的更加适应系统的状况,不失为一种好的方法。

4.maintenance_work_mem

称之为维护工作内存,主要是针对数据库的维护操作或者语句。尽量的将这些操作在内存中进行。主要针对VACUUM,CREATE INDEX,REINDEX等操作。在对整个数据库进行VACUUM或者较大的index进行重建时,适当的调整该参数非常必要。

通常maintenance_work_mem超过1G时候并没有 什么实际的效能增加(如果内存够, 设定在1G足以)

5.OLAP系统中,这些配置又不一样

temp_buffers设置大一点,分析系统中可能用到大的临时表。

work_mem可以设置更大一点,适应大量的排序和hash。

其他的待总结。

最新文章

  1. [版本管理]有惊无险修复svn服务器Invalid filesystem revision number问题
  2. iOS 剪贴板基本知识
  3. [POJ1157]LITTLE SHOP OF FLOWERS
  4. [转载]字典树(trie树)、后缀树
  5. mysql select 报错
  6. 3、XCode: 如何添加自定义代码片段
  7. Unity性能优化的N种武器
  8. 道可道,非常道——详解promise
  9. 杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例
  10. 一文了解腾讯云数据库SaaS服务
  11. WireShark抓包工具使用
  12. SpringBoot和Mybatis的整合
  13. leftJoin鏈錶查詢
  14. Hive 特殊分隔符处理
  15. Android listview 侧滑 SwipeListView 详解 实现微信,QQ等滑动删除效果
  16. iOS中的序列帧动画
  17. Tomcat server.xml 配置虚拟目录
  18. vue项目部署流程
  19. bootstrap插件的一些常用属性介绍
  20. DA14580_583_DK_II开发板入门笔记

热门文章

  1. Hadoop的IO操作
  2. vue中的锚点和查询字符串
  3. JAVA 对象序列化——Serializable(转)
  4. Oracle数据安全(三)权限管理
  5. JS 原生JS 判断滚动条滑动到底部
  6. sublime Text emmet插件使用手册
  7. mysql中int(M) tinyint(M)中M的作用
  8. 深入解析Koa之核心原理
  9. 开源CMDB详细安装使用
  10. 使用本地JConsole监控远程JVM