postgresql安裝過程中核心資源的配置
官方文件https://www.postgresql.org/docs/current/kernel-resources.html
以下僅針對linux系統 (其他系統請參考上面的官方文件連結),涉及/etc/security/limits.conf、/etc/sysctl.conf、/etc/systemd/logind.conf檔案對應的引數
1、共享記憶體和訊號量Shared Memory and Semaphores
修改/etc/sysctl.conf檔案,linux一般只修改如下兩個引數即可,其中kernel.shmmax值和shared_buffers一樣,一般設定為實體記憶體的40%即可,其他的引數的預設值非常大,通常不需要更改。
kernel.shmmax=XXX
kernel.shmall=XX
SHMMAX:共享記憶體段的最大大小,單位bytes
SHMALL:可用共享記憶體的總數,單位bytes的話值和SHMMAX一樣,單位是pages的話值等於SHMMAX/PAGE_SIZE
linux檢視Block size大小的方法
tune2fs -l /dev/sda1 |grep 'Block size'
linux檢視Page size大小的方法
getconf PAGESIZE
2、systemd RemoveIPC
修改/etc/systemd/logind.conf檔案,增加RemoveIPC=no即可
在RHEL7.2中,systemd-logind 服務引入了一個新特性,該新特性是:當一個user完全退出os之後,remove掉這個user所有的IPC objects。系統使用者除外。“系統使用者”由/etc/login.defs中的SYS_UID_MAX設定確定。該特性由/etc/systemd/logind.conf引數檔案中RemoveIPC選項來控制。
3、資源限制Resource Limits
修改/etc/security/limits.conf檔案,主要是限制每個使用者的程式數,每個程式開啟的檔案數,示例如下
postgres soft nproc 2047
postgres hard nproc 16384
postgres soft nofile 1024
postgres hard nofile 65536
4、Linux記憶體過量使用Linux Memory Overcommit
修改/etc/sysctl.conf檔案,增加vm.overcommit_memory=2
Linux對大部分申請記憶體的請求都回復"yes",以便能跑更多更大的程式。因為申請記憶體後,並不會馬上使用記憶體。這種技術叫做 Overcommit。當linux發現記憶體不足時,會發生OOM killer(OOM=out-of-memory)。它會選擇殺死一些程式(使用者態程式,不是核心執行緒),以便釋放記憶體。
在Linux 2.4及更高版本中,預設的虛擬記憶體行為對於PostgreSQL不是最優的。由於核心實現記憶體過度提交的方式,如果PostgreSQL或其他程式的記憶體需求導致系統耗盡虛擬記憶體,核心可能會終止PostgreSQL postmaster(主伺服器程式)。如果記憶體緊張,增加作業系統的交換空間可以幫助避免這個問題,因為只有當實體記憶體和交換空間耗盡時才會呼叫記憶體不足(out- memory, OOM)殺手。如果PostgreSQL本身是導致系統記憶體不足的原因,那麼可以透過更改配置來避免這個問題。最好減少max_connections,而使用外部連線池軟體。在Linux 2.6及更高版本上,可以修改核心的行為sysctl -w vm.overcommit_memory=2。
overcommit_memory可選值:0、1、2。
0, 表示核心將檢查是否有足夠的可用記憶體供應用程式使用;如果有足夠的可用記憶體,記憶體申請允許;否則,記憶體申請失敗,並把錯誤返回給應用程式。
1, 表示核心允許分配所有的實體記憶體,而不管當前的記憶體狀態如何。
2, 表示核心允許分配超過所有實體記憶體和交換空間總和的記憶體
5、大頁記憶體Linux Huge Pages
系統支援大頁記憶體的情況下 ,修改/etc/sysctl.conf檔案,增加vm.nr_hugepages=XX,即啟用大頁記憶體。
PostgreSQL中大頁記憶體的預設行為是儘可能使用它們,並在失敗時回退到正常頁面 。要強制使用大頁記憶體,可以在postgresql.conf中將huge_pages設定為on。
檢視記憶體是否支援大頁記憶體,cat /proc/meminfo檢視是否有PageTables、HugePages_Total、Hugepagesize、HugePages_Free、HugePages_Rsvd等項,如果沒有,需要核心配置CONFIG_HUGETLBFS=y、CONFIG_HUGETLB_PAGE=y支援大記憶體頁
確定vm.nr_hugepages值的方法
$ head -1 $PGDATA/postmaster.pid
4170
$ pmap 4170 | awk '/rw-s/ && /zero/ {print $2}'
6490428K
$ grep ^Hugepagesize /proc/meminfo
Hugepagesize: 2048 kB
以上6490428/2048=3170,所以編輯/etc/sysctl.conf檔案修改vm.nr_hugepages=3170
oracle的演算法
# grep Hugepagesize /proc/meminfo
For example, if /proc/meminfo lists the large page size as 2 MB, and the total SGA size for the instance is 1.6 GB, then set the value for the vm.nr_hugepages kernel parameter to 820 (1.6 GB / 2 MB = 819.2).
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2649259/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CentOS7下PostgreSQL安裝過程CentOSSQL
- OpenEuler安裝配置PostgreSQLSQL
- centos換源+安裝postgresqlCentOSSQL
- postgresql的yum安裝及配置方法SQL
- Webpack安裝配置及打包詳細過程Web
- 安裝yeoman,grunt過程中的問題
- webpack的安裝過程Web
- 安裝wampserver的過程Server
- SQL Server 2000詳細安裝過程及配置SQLServer
- SQL Server 2005詳細安裝過程及配置SQLServer
- Visual Studio 2013安裝及番茄助手配置過程
- linux mysql5.6版本的安裝配置過程LinuxMySql
- CentOS 7 安裝、配置、使用 PostgreSQL 10 安裝及基礎配置CentOSSQL
- selenium安裝過程
- pip安裝源配置
- 配置ks.cfg實現自動安裝過程
- 【一】TYPORA安裝過程
- pip安裝python庫時使用國內映象資源加速下載過程Python
- PostgreSQL啟動恢復過程中日誌源的切換SQL
- PostgreSQL_11.1_安裝和基礎配置SQL
- 安裝gcc過程中遇到相互依賴的問題GC
- win10的pycharm中安裝ansible模組過程Win10PyCharm
- MySql安裝過程中初始化失敗MySql
- pycharm中安裝和使用sqlite過程詳解PyCharmSQLite
- 關於ubuntu安裝中過程遇到問題Ubuntu
- 秒搞VirtualBox 、CentOS 的安裝過程CentOS
- Tigase手動安裝過程
- RabbitMQ安裝過程詳解MQ
- 原始碼包安裝過程原始碼
- Bclinux離線安裝PostgreSQL10.23+PostGIS2.5編譯安裝配置LinuxSQL編譯
- Centos5.5中安裝Mysql5.5過程分享CentOSMySql
- PYTORCH安裝過程以及遇到的問題PyTorch
- Nebula 2.5.0安裝過程及遇到的坑
- WSL 2 的安裝過程(以及介紹)
- centos7安裝的詳細過程CentOS
- SQLServer2012x64資料庫 安裝過程SQLServer資料庫
- windows7安裝redis過程WindowsRedis
- VisualStudio(Mac)安裝過程筆記Mac筆記