PostgreSQL内存配置记录
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。其负责内部的sort和hash操作,合适的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。
其他的待总结。
PostgreSQL内存配置记录的更多相关文章
- PostgreSQL日志配置记录
日志审计 审计是值记录用户的登陆退出以及登陆后在数据库里的行为操作,可以根据安全等级不一样设置不一样级别的审计, 此处涉及的参数文件有: logging_collector --是否开启日 ...
- STL库的内存配置器(allocator)
正在学习中,如果有错,还请多多指教,根据不断的理解,会进行更改,更改之前的样子都会保留下来,记录错误是最大的进步,嗯嗯! 具有次配置力的SGI空间配置器(SGI是STL的一种版本,也有其他的版本) 这 ...
- STL内存配置器
一.STL内存配置器的总体设计结构 1.两级内存配置器:SGI-STL中设计了两级的内存配置器,主要用于不同大小的内存分配需求,当需要分配的内存大小大于128bytes时, 使用第一级配置器,否则使用 ...
- postgresql数据库配置csv格式的日志输出
postgresql数据库配置csv格风格日志输出 以下介绍postgresql数据库中关于csv格式日志(pg中一种比較具体的日志输出方式)的设置方法. 1.进入$PGDATA文件夹(pg的安装文件 ...
- SGI STL内存配置器存在内存泄漏吗?
阅读了SGI的源码后对STL很是膜拜,很高质量的源码,从中学到了很多.温故而知新!下文中所有STL如无特殊说明均指SGI版本实现. STL 内存配置器 STL对内存管理最核心部分我觉得是其将C++对象 ...
- 自己动手实现STL 01:内存配置器的实现(stl_alloc.h)
一.前言 在STL中,容器是其中的重中之重,基本的STL中的算法,仿函数等都是围绕着容器实现的功能.而,内存配置器,是容器的实现的基础.所以,我第一次要去编写便是内存配置器的实现.在STL中,内存配置 ...
- 一个Web报表项目的性能分析和优化实践(三) :提高Web应用服务器Tomcat的内存配置,并确认配置正确
摘要 上一篇,一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间 ,讲述了项目优化的整体背景,重点讲述了统一显示了Web项目SQL语句的执行时间. 本篇,将重点介绍提高 ...
- Linux下apache+phppgadmin+postgresql安装配置
Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...
- eclipse启动时虚拟机初始内存配置
eclipse启动时虚拟机初始内存配置: -Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxPermSize=512m
随机推荐
- 海量数据处理之Bloom Filter详解
前言 : 即可能误判 不会漏判 一.什么是Bloom Filter Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个Hash函 ...
- Windows换行符问题
MAC 和 Windows的换行符不一样,导致有些情况下,MAC编辑的多行文本,在windows的TXT中只是一行. 使用nodepad++可以正确识别出换行符,而且可以将其转为Windows格式,使 ...
- Codeforces Round #304 (Div.2)
A. Soldier and Bananas 题意:有个士兵要买w个香蕉,香蕉起步价为k元/个,每多买一个则贵k元.问初始拥有n元的士兵需要借多少钱? 思路:简单题 #include<iostr ...
- HIVE大数据出现倾斜怎么办
hive在跑数据时经常会出现数据倾斜的情况,使的作业经常reduce完成在99%后一直卡住,最后的1%花了几个小时都没跑完,通过YARN的管理界面配合日志,可以清楚其中的具体原因,这种情况就很可能 ...
- 图像运动去模糊(Motion Deblurring)代码
http://blog.csdn.net/qianliheshan/article/details/12853157 http://www.di.ens.fr/~whyte/ Efficient De ...
- NFS 安装、管理
NFS简介 NFS允许一个系统在网络上与他人共享目录和文件.通过使用NFS,用户和程序可以像访问本地文件一样访问远程系统上的文件. 安装NFS 服务端安装 NFS安装包:nfs-utils-lib.i ...
- 使用POI做的一个生成Excel的工具类。包含了导出Excel和解析Excel方法
PoiExcelUtils.java /** * */ package com.common.office; import java.io.File; import java.io.FileInput ...
- 实验一 Linux初步认识
遇到的困难和心得体会: 1.在操作过程中,有道作业是建立一个opt/forloutest的文件,而我建立了一个 OPT文件,cd OPT,却显示not a directory,通过阅读<linu ...
- promise两个参数的具体作用
Promise通常配合then方法来链式的使用,then方法里面第一个回调函数表示成功状态,也就是resolve通过.then调用,第二个是失败状态-reject通过.Cath调用,如果默认写一个参数 ...
- 用adb 启动camera
adb shell am start -a android.media.action.STILL_IMAGE_CAMERA 启动camera adb shell input keyevent 27 ...