pagetable的使用學習

济南小老虎發表於2024-05-27

pagetable的使用學習


Oracle資料庫的pagetable的使用

不啟用大頁時
SGA大小: 9504M
PGA大小: 3159M
cat /proc/meminfo  |grep PageT
關閉Oracle時的情況
PageTables:         2416 kB
開啟Oracle時的情況
PageTables:        72748 kB

登入一個遠端使用者
PageTables:        81280 kB
查詢一個小表
PageTables:        83856 kB
查詢一個6GB大小的表
PageTables:        99720 kB

按照上一個文章裡面算的
一個GB 會需要 2MB的頁表
那麼可以看到 登入一個遠端使用者後
增長了大約10MB的頁表, 這一塊可能還沒有涉及堆區
然後查詢一個大表, 堆區增長了大約 18MB
與 9GB的堆區 可以對應起來. 

開啟大頁

修改資料庫的環境變數
比如我這個機器 10GB的堆區
可以選擇的大小為
5120 就足夠了. 
然後還要修改 共享段大小
需要說明 共享段大小應該可以大約記憶體, 這個應該是不限制的
另外要確認 memory_target的引數為 0 避免私用AMM 
vim /etc/sysctl.conf 

kernel.shmmax = 139586437120  
kernel.shmall = 34078720
kernel.shmmni = 4096
vm.nr_hugepages = 5120 

增加memlock的設定
注意單位是KB 需要大約SGA區域設定
vim /etc/security/limits.conf 
oracle          soft    memlock 136314880
oracle          hard    memlock 136314880

機器重啟後

重啟之前的記憶體:
               total        used        free      shared  
Mem:              30           1           0           9   
buffer cache 29g, avaiable 19g
重啟後
               total        used        free      
Mem:              30          10          20 

關於頁表: 
資料庫服務啟動前
PageTables:         2540 kB
啟動後 
PageTables:        42420 kB

登入一個遠端使用者
PageTables:        41140 kB
查詢一個小表
PageTables:        41144 kB
查詢一個6GB大小的表
PageTables:        42072 kB

確認在這樣的場景下, 一個大表的查詢可以節約 50MB的頁表使用。 
100個併發就可以節約 5GB的記憶體。
如果堆區是 30G的話 就是 15GB的記憶體。 
所以啟用大頁 還是非常有必要的。 

相關文章