小編給大家分享一下PostgreSQL如何開啟Huge Page場景,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站設計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的南澗網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
為了保證物理內(nèi)存能得到充分的利用,避免內(nèi)存空間浪費,Linux把進程當前使用的內(nèi)存部分加載到物理內(nèi)存里,而不使用的部分則暫不加載。PostMaster進程注冊共享內(nèi)存時,系統(tǒng)只是分配一個虛擬的地址空間,并不直接分配物理內(nèi)存。當有實際的內(nèi)存訪問時,CPU才會將虛擬地址映射到物理內(nèi)存的一個地址上。維護這個映射關系的就是PageTable,它負責將虛擬內(nèi)存地址轉(zhuǎn)換成物理內(nèi)存地址。
Linux的內(nèi)存管理采取的是分頁存取機制:把較大的物理內(nèi)存分為了一個個固定大?。?kB)的內(nèi)存頁進行管理。每塊內(nèi)存頁通過PageTable中的一個元組來維護虛擬/物理內(nèi)存之間的映射。CPU為了提高虛擬/物理內(nèi)存之間的轉(zhuǎn)換效率,也會在TLB中緩存一定量的Page Table元組。
對于PostgreSQL這種多進程架構程序來說,當服務端使用的共享內(nèi)存較大,且并發(fā)連接數(shù)較多時,由于操作系統(tǒng)對于每個進程都要維護單獨的內(nèi)存映射,PageTable中的元組數(shù)目將會變得非常多,所占用的內(nèi)存大小也會特別大。
Linux為了應對這種場景,降低多進程下PageTable的內(nèi)存消耗。自從2.6及以上內(nèi)核版本提供了內(nèi)存頁大小為2MB的管理方式,稱為Huge Page。如果使用Huge Page的話,相同物理內(nèi)存使用量的情況下內(nèi)存頁的數(shù)目變少,減少了PageTable元組的條目個數(shù),從而降低了系統(tǒng)的內(nèi)存占用。
作為世界上最先進的開源數(shù)據(jù)庫,PostgreSQL也適配了Linux的Huge Page特性,服務端在注冊共享內(nèi)存時,會通過配置參數(shù)huge_pages來決定是否申請大頁內(nèi)存。
postgresql.conf: huge_pages = on -- 注冊共享內(nèi)存時必須使用大頁 huge_pages = try -- 注冊共享內(nèi)存時首先考慮大頁,若系統(tǒng)提供的大頁內(nèi)存不足時,則全部使用普通頁 huge_pages = off -- 注冊共享內(nèi)存時不使用大頁
真實應用場景:某PG用戶將實例(shared_buffers = 64GB)部署在一臺內(nèi)存為256GB的ECS上,業(yè)務繁忙時ECS內(nèi)存使用率為85%,PageTable占用內(nèi)存120GB。而開啟Huge Page后相同業(yè)務場景的內(nèi)存使用率降低到50%以下,PageTable大小僅300M!
(1)查看操作系統(tǒng)的Huge Page大小grep Hugepage /proc/meminfo
(2)估算PostgreSQL實例需要的Huge Page使用量:128GB/2MB * 1.2 = 78643
(3)/etc/sysctl.conf中添加:vm.nr_hugepages = 78643
(4)重新加載系統(tǒng)配置參數(shù):sysctl –p
(5)確認是否配置成功??梢钥吹紿uge Page總數(shù)為78643
(6)確認PG配置文件打開huge_pages
(7)啟動PostgreSQL服務端,可以看到系統(tǒng)中的空閑Huge Page已經(jīng)減少,部分大頁已經(jīng)被共享內(nèi)存使用。
雖然Huge Page在一定場景下可以改善服務端內(nèi)存使用過高的情況,但不是鼓勵所有的PG實例都使用大頁,盲目的開啟Huge Page可能引起服務端的性能下降。下面我們根據(jù)Huge Page的優(yōu)缺點來分析下使用場景。
Huge Page優(yōu)勢:
(1)CPU的TLB可以緩存的物理地址空間更大,從而提升TLB的命中率,降低CPU負載;
(2)Huge Page使用的內(nèi)存是不可交換(swap)的,沒有內(nèi)存空間換入/換出的開銷;
(3)極大的減少了系統(tǒng)維護PageTable的內(nèi)存開銷。
Huge Page劣勢:
(1)Huge Page使用的內(nèi)存需要預先分配;
(2)Huge Page使用固定大小的內(nèi)存區(qū)域,不會被釋放;
(3)對于寫密集型的場景,Huge Page會加大Cache寫沖突的發(fā)生概率。
所以強烈推薦PG實例開啟Huge Page的場景:共享內(nèi)存使用較大(>=8GB)且連接數(shù)較多(>= 500),并且熱點數(shù)據(jù)分散。不推薦PG實例開啟Huge Page的場景:寫業(yè)務密集,熱點數(shù)據(jù)集中且內(nèi)存使用較小。
(1)當配置參數(shù)huge_pages設置為on時,若PG啟動時需要注冊的共享內(nèi)存大于操作系統(tǒng)提供的Huge Page大小時,數(shù)據(jù)庫將無法啟動。推薦將huge_pages參數(shù)設置為try,在此種場景下,PostMaster將會改為申請普通內(nèi)存。
(2)修改shared_buffers/wal_buffers等共享內(nèi)存相關的GUC參數(shù)時,需要重新計算操作系統(tǒng)所需的Huge Page數(shù),以防服務端無法啟動或者部分大頁內(nèi)存沒有被使用且無法釋放而造成浪費。
以上是“PostgreSQL如何開啟Huge Page場景”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當前題目:PostgreSQL如何開啟HugePage場景
當前地址:http://www.rwnh.cn/article10/jeshgo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站建設、網(wǎng)站收錄、自適應網(wǎng)站、用戶體驗、響應式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)