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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [轉]RAC 安裝配置過程中的問題
- CentOS7下PostgreSQL安裝過程CentOSSQL
- 【mysql】配置MySQL,解決安裝過程中的問題MySql
- TDP for SQL安裝配置全過程SQL
- linux下Postgresql-9.2安裝及資料庫的建立過程LinuxSQL資料庫
- OpenEuler安裝配置PostgreSQLSQL
- mha+keepalived安裝配置過程
- centos換源+安裝postgresqlCentOSSQL
- 曲折的10g,11g中EM的安裝配置過程
- rails 4安裝配置PostgreSQLAISQL
- postgresql的yum安裝及配置方法SQL
- 安裝yeoman,grunt過程中的問題
- STATSPACK安裝過程中遇到的問題
- Webpack安裝配置及打包詳細過程Web
- 10G DATA GUARD 安裝配置過程
- webpack的安裝過程Web
- linux安裝和配置 mysql、redis 過程中遇到的問題記錄LinuxMySqlRedis
- AIX系統中安裝TSM過程AI
- ambari安裝過程中的問題彙總
- CentOS 7 安裝、配置、使用 PostgreSQL 10 安裝及基礎配置CentOSSQL
- 安裝和解除安裝clusterware過程中的各種問題分析
- APK安裝過程APK
- pip安裝源配置
- 安裝wampserver的過程Server
- cocoaPods的安裝過程
- PostgreSQL和Slony-I的安裝和配置SQL
- ovm安裝過程及中斷處理
- WAS叢集安裝配置過程
- 配置ks.cfg實現自動安裝過程
- linux mysql5.6版本的安裝配置過程LinuxMySql
- solaris 9 下ipf的配置安裝過程 版本4.1.29.doc
- linux AS4 核心升級並安裝oracleasm的過程總結LinuxOracleASM
- PostgreSQL啟動恢復過程中日誌源的切換SQL
- selenium安裝過程
- Cocoapods安裝過程
- 【一】TYPORA安裝過程
- 安裝gcc過程中遇到相互依賴的問題GC
- win10的pycharm中安裝ansible模組過程Win10PyCharm