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

PostgreSQL如何開啟Huge Page場(chǎng)景

共計(jì) 2163 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。

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

1. 大規(guī)格 PG 實(shí)例內(nèi)存使用率較高分析

為了保證物理內(nèi)存能得到充分的利用,避免內(nèi)存空間浪費(fèi),Linux 把進(jìn)程當(dāng)前使用的內(nèi)存部分加載到物理內(nèi)存里,而不使用的部分則暫不加載。PostMaster 進(jìn)程注冊(cè)共享內(nèi)存時(shí),系統(tǒng)只是分配一個(gè)虛擬的地址空間,并不直接分配物理內(nèi)存。當(dāng)有實(shí)際的內(nèi)存訪問(wèn)時(shí),CPU 才會(huì)將虛擬地址映射到物理內(nèi)存的一個(gè)地址上。維護(hù)這個(gè)映射關(guān)系的就是 PageTable,它負(fù)責(zé)將虛擬內(nèi)存地址轉(zhuǎn)換成物理內(nèi)存地址。

Linux 的內(nèi)存管理采取的是分頁(yè)存取機(jī)制:把較大的物理內(nèi)存分為了一個(gè)個(gè)固定大小(4kB)的內(nèi)存頁(yè)進(jìn)行管理。每塊內(nèi)存頁(yè)通過(guò) PageTable 中的一個(gè)元組來(lái)維護(hù)虛擬 / 物理內(nèi)存之間的映射。CPU 為了提高虛擬 / 物理內(nèi)存之間的轉(zhuǎn)換效率,也會(huì)在 TLB 中緩存一定量的 Page Table 元組。

對(duì)于 PostgreSQL 這種多進(jìn)程架構(gòu)程序來(lái)說(shuō),當(dāng)服務(wù)端使用的共享內(nèi)存較大,且并發(fā)連接數(shù)較多時(shí),由于操作系統(tǒng)對(duì)于每個(gè)進(jìn)程都要維護(hù)單獨(dú)的內(nèi)存映射,PageTable 中的元組數(shù)目將會(huì)變得非常多,所占用的內(nèi)存大小也會(huì)特別大。

2. Huge Page 改善措施

Linux 為了應(yīng)對(duì)這種場(chǎng)景,降低多進(jìn)程下 PageTable 的內(nèi)存消耗。自從 2.6 及以上內(nèi)核版本提供了內(nèi)存頁(yè)大小為 2MB 的管理方式,稱為 Huge Page。如果使用 Huge Page 的話,相同物理內(nèi)存使用量的情況下內(nèi)存頁(yè)的數(shù)目變少,減少了 PageTable 元組的條目個(gè)數(shù),從而降低了系統(tǒng)的內(nèi)存占用。

作為世界上最先進(jìn)的開源數(shù)據(jù)庫(kù),PostgreSQL 也適配了 Linux 的 Huge Page 特性,服務(wù)端在注冊(cè)共享內(nèi)存時(shí),會(huì)通過(guò)配置參數(shù) huge_pages 來(lái)決定是否申請(qǐng)大頁(yè)內(nèi)存。

postgresql.conf:
 huge_pages = on --  注冊(cè)共享內(nèi)存時(shí)必須使用大頁(yè)
 huge_pages = try --  注冊(cè)共享內(nèi)存時(shí)首先考慮大頁(yè),若系統(tǒng)提供的大頁(yè)內(nèi)存不足時(shí),則全部使用普通頁(yè)
 huge_pages = off --  注冊(cè)共享內(nèi)存時(shí)不使用大頁(yè) 

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

3. PG 實(shí)例開啟 Huge Page 操作步驟

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

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

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

(4)重新加載系統(tǒng)配置參數(shù):sysctl –p

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

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

(7)啟動(dòng) PostgreSQL 服務(wù)端,可以看到系統(tǒng)中的空閑 Huge Page 已經(jīng)減少,部分大頁(yè)已經(jīng)被共享內(nèi)存使用。

PostgreSQL 如何開啟 Huge Page 場(chǎng)景

4. Huge Page 使用建議

雖然 Huge Page 在一定場(chǎng)景下可以改善服務(wù)端內(nèi)存使用過(guò)高的情況,但不是鼓勵(lì)所有的 PG 實(shí)例都使用大頁(yè),盲目的開啟 Huge Page 可能引起服務(wù)端的性能下降。下面我們根據(jù) Huge Page 的優(yōu)缺點(diǎn)來(lái)分析下使用場(chǎng)景。

Huge Page 優(yōu)勢(shì):

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

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

(3)極大的減少了系統(tǒng)維護(hù) PageTable 的內(nèi)存開銷。

Huge Page 劣勢(shì):

(1)Huge Page 使用的內(nèi)存需要預(yù)先分配;

(2)Huge Page 使用固定大小的內(nèi)存區(qū)域,不會(huì)被釋放;

(3)對(duì)于寫密集型的場(chǎng)景,Huge Page 會(huì)加大 Cache 寫沖突的發(fā)生概率。

所以強(qiáng)烈推薦 PG 實(shí)例開啟 Huge Page 的場(chǎng)景:共享內(nèi)存使用較大(=8GB)且連接數(shù)較多(= 500),并且熱點(diǎn)數(shù)據(jù)分散。不推薦 PG 實(shí)例開啟 Huge Page 的場(chǎng)景:寫業(yè)務(wù)密集,熱點(diǎn)數(shù)據(jù)集中且內(nèi)存使用較小。

5.PG 開啟 Huge Page 時(shí)的注意事項(xiàng)

(1)當(dāng)配置參數(shù) huge_pages 設(shè)置為 on 時(shí),若 PG 啟動(dòng)時(shí)需要注冊(cè)的共享內(nèi)存大于操作系統(tǒng)提供的 Huge Page 大小時(shí),數(shù)據(jù)庫(kù)將無(wú)法啟動(dòng)。推薦將 huge_pages 參數(shù)設(shè)置為 try,在此種場(chǎng)景下,PostMaster 將會(huì)改為申請(qǐng)普通內(nèi)存。

(2)修改 shared_buffers/wal_buffers 等共享內(nèi)存相關(guān)的 GUC 參數(shù)時(shí),需要重新計(jì)算操作系統(tǒng)所需的 Huge Page 數(shù),以防服務(wù)端無(wú)法啟動(dòng)或者部分大頁(yè)內(nèi)存沒有被使用且無(wú)法釋放而造成浪費(fèi)。

以上是“PostgreSQL 如何開啟 Huge Page 場(chǎng)景”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計(jì)2163字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 青岛市| 泉州市| 博兴县| 珠海市| 庄浪县| 富顺县| 阳山县| 寻乌县| 锦州市| 澄江县| 肥城市| 手机| 旺苍县| 永定县| 达州市| 临高县| 桓仁| 湘乡市| 大方县| 宝清县| 衡阳县| 武陟县| 永善县| 伽师县| 奈曼旗| 定襄县| 明光市| 宁陵县| 怀集县| 长沙市| 永福县| 宁海县| 徐汇区| 巨鹿县| 新疆| 沾益县| 利川市| 永定县| 万山特区| 石首市| 海兴县|