为PostgreSQL安assembly置内核参数

我想确保Postgresql可以利用所有可用内存在专用数据库服务器上进行caching。 我如何确保内核的共享内存设置是正确的? 有谁知道计算,以确保shmax等不会限制Postgresql?

这是一个小小的片段,它允许服务器使用多达一半的物理内存用于共享内存:

#!/bin/bash page_size=`getconf PAGE_SIZE` phys_pages=`getconf _PHYS_PAGES` shmall=`expr $phys_pages / 2` shmmax=`expr $shmall \* $page_size` echo \# Maximum shared segment size in bytes echo kernel.shmmax = $shmmax echo \# Maximum number of shared memory segments in pages echo kernel.shmall = $shmall 

把它的输出放到/etc/sysctl.conf中并运行:

 sysctl -p 

那你就定了

PostgreSQL使用操作系统来补充其所有的读写操作,所以你真的不想把一半的RAM专用 – 这对专用的数据库服务器来说有足够的余量。 testing改变服务器专用RAM的数量通常会发现最大吞吐量在总RAM的15%到40%之间; 更多的是,你会得到太多的双缓冲页面。 由于服务器代码中尚未解决的caching争用问题,在大型系统上,有用的上限约为8GB。 更多关于PostgreSQL wiki的服务器调优。