欢迎来到天天文库
浏览记录
ID:44649001
大小:79.50 KB
页数:5页
时间:2019-10-24
《管理内核资源》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一次大型PostgreSQL安装会很容易达到各种操作系统的资源上限.(在有些系统上,出厂设置低得你都不用一次〃大型〃安装・)如果你碰到这类问题请继续阅读.3.5.1.共享内存和信号灯共享内存和信号灯的止确叫法是“SystemVIPC〃(还有消息队列,不过对于PostgreSQL而言没什么关系・)尽管所有现代操作系统都提供这个特性,但并不是所有系统缺省都打开它或者有足够的资源,尤其是有BSD亲源的系统.(对于QNX和BeOS移植?PostgreSQL自己提供这套机制的替换实现•)完全缺少这些机制的表现通常是在postmaster启动的时
2、候的Illegalsystemcall错误.这时除了重新配置内核以外没什么可做的一PostgreSQL没它们干不了活.如果PostgreSQL超出了这些IPC资源的硕限制之一的时候就会拒绝启动并且留下一条相当有启发性的错误信息告诉你它碰到了什么问题以及需要为它做些什么.(又见Section3.3.1.)相关的内核参数在不同系统之间有着相对固定的术语;讪(、3-2是一个概况.不过,设置它们的方法却多种多样.不过耍注意的是,你可能最好重新启动你的机器,或者还耍重新编译内核来修改这些设置.Table3-2.SystemVIPC参数名字」描述
3、合理取值SHMMAX最大共享内存段尺寸(字节)250kB+8.2kB*sharedbuffers+14.2kB*maxconnections或者无穷大SHMMIN最小共享内存段尺寸(字节)1SHMALL可用共享内存的总数量(字节或者页面)如果是字节,就和SHMMAX一样;如果是页面,ce订(SIIMMAX/PAGE_SIZE)SHMSEG每进程最大共享内存段数量只需耍1个段,不过缺省比这高得多.SHMMNI系统范围最大共享内存段数量类似SHMSEG加上用于其他应用的空间SEMMNI信号灯标识符的最小数量(也就是说,套)>二ceil(m
4、ax_connections%16)SEMMNS系统范围的最大信号灯数量ceil(max_connections/16)*17+用于其他应用的空间SEMMSL每套信号灯最小信号灯数量>=17SEMMAP信号灯映射里的记录数量参阅文本SEMVMX信号灯的最大值>二255(缺省通常是32767,除非被要求,否则不要修改)最重要的共享内存参数是SHMMAX,以字节记的共享内存段可拥有的最大尺寸.如果你收到来自shmget的一行Invalidargument这样的错误信息,那么很有可能是你超过限制了.要求的共享内存段随着请求的缓冲区数量(汨选
5、项)和允许的连接数量(-N选项)的变化而变化,尽管前者是主耍因素.(因此,作为一种临时的解决方法,你可以降低这些设置來绕过失败・)如果粗略地估计,你可以估计所需要的段尺寸是缓冲区数量乘以块尺寸(缺省8kB)加上足够的盈余(至少半兆字节).任何错误信息都会包含分配失败的尺寸.不太可能出问题的是共享内存段的最小尺寸(SHMMIN),对PostgreSQL来说最多是256kB左右(通常只是1),而系统范围(SHMMNI)或每进程(SHMSEG)最大共享内存段数量不应该会产生问题,除非你的系统把它们设成零.冇些系统还对系统里的共享内存总量有限
6、制;参阅下面平台相关的指导.PostgreSQL每个允许的联接使用一个信号灯GN选项),以16个为一套.每套信号灯还包含第十七个信号灯,它里而存储一个^magicnumber(标志数字)〃,以检测和其他应用使用的信号灯集冲突.系统里的最大信号灯数目是由SEMMNS设置的,因此这个值应该至少和联接设置一样大,并且每十六个联接还要另外加一个.(参阅Tabic3-2里面的公式.)参数SEMMNI决定系统里一次可以存在的信号灯集的数目•I大I此这个参数至少应该为ceil(max_connections%16).降低允许的联接数口是一个临时的绕
7、开失败的方法,这个用动失败通常被来自函数scmgct()的错课响应"Nospaceleftondevice"搞得很让人迷惑.有吋候你还会发现有必要增大SEWAP,使之至少按照SEMMNS配置.这个参数定义信号灯资源映射的尺寸,可用的每个连续的信号灯块在这个映射屮存放一条记录.每当一套信号灯被释放,那么它要么会加入到该映射中一条相连的已释放的块的入口中,要么注册成一条新的入口.如果映射填满了碎片,那么被释放的信号灯就丢失了(除非重起).因此时间长信号灯空间的碎片了会导致可用的信号灯比应该冇的信号灯少.SEMMSL参数,决定一套信号灯里可
8、以有多少信号灯,对于PostgreSQL而言应该至少是17.许多设置与"semaphoreundo(信号灯恢复)〃有关,比如SEMMNU和SEMUME,这些与PostgreSQL无关.BSD/OS共享内存.缺省时是只支持
此文档下载收益归作者所有