久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

PostgreSQL如何開啟Huge Page場景

163次閱讀
沒有評論

共計 2163 個字符,預計需要花費 6 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 PostgreSQL 如何開啟 Huge Page 場景,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1. 大規格 PG 實例內存使用率較高分析

為了保證物理內存能得到充分的利用,避免內存空間浪費,Linux 把進程當前使用的內存部分加載到物理內存里,而不使用的部分則暫不加載。PostMaster 進程注冊共享內存時,系統只是分配一個虛擬的地址空間,并不直接分配物理內存。當有實際的內存訪問時,CPU 才會將虛擬地址映射到物理內存的一個地址上。維護這個映射關系的就是 PageTable,它負責將虛擬內存地址轉換成物理內存地址。

Linux 的內存管理采取的是分頁存取機制:把較大的物理內存分為了一個個固定大小(4kB)的內存頁進行管理。每塊內存頁通過 PageTable 中的一個元組來維護虛擬 / 物理內存之間的映射。CPU 為了提高虛擬 / 物理內存之間的轉換效率,也會在 TLB 中緩存一定量的 Page Table 元組。

對于 PostgreSQL 這種多進程架構程序來說,當服務端使用的共享內存較大,且并發連接數較多時,由于操作系統對于每個進程都要維護單獨的內存映射,PageTable 中的元組數目將會變得非常多,所占用的內存大小也會特別大。

2. Huge Page 改善措施

Linux 為了應對這種場景,降低多進程下 PageTable 的內存消耗。自從 2.6 及以上內核版本提供了內存頁大小為 2MB 的管理方式,稱為 Huge Page。如果使用 Huge Page 的話,相同物理內存使用量的情況下內存頁的數目變少,減少了 PageTable 元組的條目個數,從而降低了系統的內存占用。

作為世界上最先進的開源數據庫,PostgreSQL 也適配了 Linux 的 Huge Page 特性,服務端在注冊共享內存時,會通過配置參數 huge_pages 來決定是否申請大頁內存。

postgresql.conf:
 huge_pages = on --  注冊共享內存時必須使用大頁
 huge_pages = try --  注冊共享內存時首先考慮大頁,若系統提供的大頁內存不足時,則全部使用普通頁
 huge_pages = off --  注冊共享內存時不使用大頁 

真實應用場景:某 PG 用戶將實例(shared_buffers = 64GB)部署在一臺內存為 256GB 的 ECS 上,業務繁忙時 ECS 內存使用率為 85%,PageTable 占用內存 120GB。而開啟 Huge Page 后相同業務場景的內存使用率降低到 50% 以下,PageTable 大小僅 300M!

3. PG 實例開啟 Huge Page 操作步驟

(1)查看操作系統的 Huge Page 大小 grep Hugepage /proc/meminfo

(2)估算 PostgreSQL 實例需要的 Huge Page 使用量:128GB/2MB * 1.2 = 78643

(3)/etc/sysctl.conf 中添加:vm.nr_hugepages = 78643

(4)重新加載系統配置參數:sysctl –p

(5)確認是否配置成功。可以看到 Huge Page 總數為 78643

(6)確認 PG 配置文件打開 huge_pages

(7)啟動 PostgreSQL 服務端,可以看到系統中的空閑 Huge Page 已經減少,部分大頁已經被共享內存使用。

4. Huge Page 使用建議

雖然 Huge Page 在一定場景下可以改善服務端內存使用過高的情況,但不是鼓勵所有的 PG 實例都使用大頁,盲目的開啟 Huge Page 可能引起服務端的性能下降。下面我們根據 Huge Page 的優缺點來分析下使用場景。

Huge Page 優勢:

(1)CPU 的 TLB 可以緩存的物理地址空間更大,從而提升 TLB 的命中率,降低 CPU 負載;

(2)Huge Page 使用的內存是不可交換(swap)的,沒有內存空間換入 / 換出的開銷;

(3)極大的減少了系統維護 PageTable 的內存開銷。

Huge Page 劣勢:

(1)Huge Page 使用的內存需要預先分配;

(2)Huge Page 使用固定大小的內存區域,不會被釋放;

(3)對于寫密集型的場景,Huge Page 會加大 Cache 寫沖突的發生概率。

所以強烈推薦 PG 實例開啟 Huge Page 的場景:共享內存使用較大(=8GB)且連接數較多(= 500),并且熱點數據分散。不推薦 PG 實例開啟 Huge Page 的場景:寫業務密集,熱點數據集中且內存使用較小。

5.PG 開啟 Huge Page 時的注意事項

(1)當配置參數 huge_pages 設置為 on 時,若 PG 啟動時需要注冊的共享內存大于操作系統提供的 Huge Page 大小時,數據庫將無法啟動。推薦將 huge_pages 參數設置為 try,在此種場景下,PostMaster 將會改為申請普通內存。

(2)修改 shared_buffers/wal_buffers 等共享內存相關的 GUC 參數時,需要重新計算操作系統所需的 Huge Page 數,以防服務端無法啟動或者部分大頁內存沒有被使用且無法釋放而造成浪費。

以上是“PostgreSQL 如何開啟 Huge Page 場景”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-17發表,共計2163字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 凤山市| 南靖县| 沽源县| 景东| 达孜县| 桑植县| 永丰县| 北宁市| 教育| 宁陵县| 正镶白旗| 合水县| 谷城县| 交城县| 柯坪县| 卫辉市| 大足县| 绥芬河市| 高雄市| 濮阳市| 武胜县| 清涧县| 武邑县| 利川市| 崇左市| 八宿县| 景东| 清涧县| 湘阴县| 乐业县| 文山县| 凌海市| 定日县| 南充市| 邵东县| 赤壁市| 岳西县| 扎兰屯市| 乌鲁木齐市| 繁昌县| 常州市|