【TUNE_ORACLE】Oracle資料庫與HugePages(一)HugePages概念和優勢

Attack_on_Jager發表於2021-03-18

說明

相關文章連結:

Oracle資料庫與HugePages(一)HugePages概念和優勢: http://blog.itpub.net/69992972/viewspace-2763625/

Oracle資料庫與HugePages(二)HugePages配置和限制: http://blog.itpub.net/69992972/viewspace-2764357/

Oracle資料庫與HugePages(三)HugePages常見問題和解決辦法: http://blog.itpub.net/69992972/viewspace-2764597/

Oracle資料庫與HugePages(四)如何禁用透明大頁: http://blog.itpub.net/69992972/viewspace-2764784/


前言

Oracle資料庫使用系統全域性區(SGA)來管理可以共享的一些資源:比如shared pool中儲存了共享的SQL語句及執行計劃,buffer pool中儲存了資料塊。對這些資源的訪問,其實就是Oracle使用OS的API來訪問記憶體資源的過程。記憶體操作通常意義上都是很快的,這時候Oracle資料庫可以很正常的工作。

但是:

1. 如果SGA內的某一部分被swap到硬碟上,那麼再次訪問它,就需要花非常多的時間。

2. 如果OS本身的記憶體非常的大,那麼管理/訪問到我們需要的記憶體的過程就需要更長時間。

在這些情況下,我們往往會碰到諸如latch/mutex/library cache lock/row cache lock的問題。Linux下的HugePages 可以解決由以上兩種問題引發的效能波動。

下面具體談談HugePages。

 

什麼是HugePages

HugePages(記憶體大頁)是整合到2.6版及更高版本Linux核心中的一項功能。它允許較大的頁面來管理記憶體,以替代較小的4KB頁面大小。

 

HugePages優點

如果生產環境有較大的RAM和SGA,那麼HugePages對於在Linux上提高Oracle資料庫效能至關重要。如果資料庫SGA很大(例如超過8GB),則需要配置HugePages。 但是具體多大就一定需要使用HugePage?這並沒有定論,有些文件曾經提到12G以上就推薦開啟,但強烈建議在測試環境進行了充分的測試之後,再決定是否在生產環境應用HugePage( 本人是從8G這個最小值開始測試)。SGA的大小很重要,因為HugePages是依靠SGA計算出來的。


HugePages的優點是: 

1. 每個page較大使得page數量減少:預設頁面大小為4K,而HugeTLB最小大小為2M( 範圍在2M-256M,具體取決於核心版本和硬體架構)。這意味著系統將需要少處理512倍的頁面數量。

2. 減少Page Table遍歷:由於HugePage比常規大小的頁面覆蓋的連續虛擬地址範圍更大,因此使用HugePages的每個TLB條目獲得TLB命中率比常規頁面高。這減少了遍歷頁表以從虛擬地址獲取實體地址的次數。

3. 減少記憶體操作的開銷:在虛擬記憶體系統(任何主流的OS)上,每個記憶體操作實際上是兩個抽象記憶體操作。使用HugePages,由於要處理的頁面數較少,因此可以避免 訪問Page Table中可能出現的瓶頸。

4. 記憶體使用量更少:從Oracle資料庫的角度來看,使用HugePages,與常規大小的頁面相比,Linux核心將使用更少的記憶體來建立頁表來維護SGA地址範圍的虛擬到物理對映。這使更多的記憶體可用於程式專用計算或PGA使用。

5. 不會使用Swap: 我們必須儘可能避免在所有Linux 作業系統上進行swap操作。HugePages是不可交換的(而常規頁面是可交換的)。因此,沒有頁面替換機制的開銷。HugePages通常是固定不變的。

6. 沒有kswapd參與操作:如果要分頁的區域很大(比如50GB記憶體需要1300萬個Page Table項),導致kswapd將變得非常繁忙,並且將佔用大量CPU資源。當使用HugePages時,kswapd可以不參與管理它們。

 

注:

TLB:轉換後備緩衝區(TLB)是CPU中包含頁表部分的緩衝區(或快取)。這是一個固定大小的緩衝區,用於更快地進行虛擬地址轉換。

HugeTLB:這是TLB中的一個條目,它指向HugePage。HugePages是透過HugeTLB條目實現的,即,我們可以說HugePage是由“ HugeTLB頁面條目”處理的。所以 “HugeTLB”一詞也與HugePage相同

Kswapd:是linux中用於頁面回收的核心執行緒。負責在記憶體不足時回收頁面。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2763625/,如需轉載,請註明出處,否則將追究法律責任。

相關文章