關於資料庫開啟大頁對效能的影響

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

關於資料庫開啟大頁對效能的影響


背景

有個專案出現了資料庫當機的情況.
發到我這邊時有一個比較概略的文件描述問題
當時猜測的原因是:
資料庫沒開啟大頁, 導致data buffer swap出現效能下降
昨天突然看到一個文章, 說不開啟大頁可能會對頁表有影響
我這邊也是恍然大悟, 立馬聯絡現場進行驗證

大頁

注意 oracle使用的是 大頁 而不是 透明大頁
透明大頁是紅帽自己研發的一種大頁記憶體
他可以動態設定, 但是缺點就是沒有了大頁記憶體一定在記憶體裡的優點

大頁是需要手工計算的, 一般要求比SGA的設定要大一點
並且建議將共享段最大大小設定的比大頁設定要高
保證SGA只需要一個共享段就可以完整放進去
這樣 執行緒在管理使用SGA時就只需要關聯一個共享段就可以了.

所以這就是減少必須管理的數量, 來提高效能額方法

當機時的message確認

Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=1048576kB
Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
15737382 total pagecache pages
24768076 pages RAM
451209 pages reserved

現場沒有開啟大頁
然後注意是看當機時的這個地方:
Node 0 Normal free:65304kB min:65572kB low:81964kB high:98356kB active_anon:63687568kB inactive_anon:668kB 
active_file:12796kB inactive_file:15020kB unevictable:0kB isolated(anon):0kB isolated(file):0kB 

present:95944704kB 

managed:94375504kB mlocked:0kB dirty:8kB writeback:0kB mapped:60757952kB shmem:60756396kB slab_reclaimable:1146640kB 
slab_unreclaimable:170404kB kernel_stack:18192kB 

pagetables:28045164kB 

unstable:0kB bounce:0kB free_pcp:5600kB 
local_pcp:120kB free_cma:0kB writeback_tmp:0kB pages_scanned:44234 all_unreclaimable? yes

重要的部分我分段顯示了
記憶體一共96G 頁表使用了 28G 四分之一多的記憶體是頁表
SGA區域 設定的是 60G+

兩者加起來已經快OOM了

所以當機的原因應該是從這裡進行判斷

關於Oracle的執行緒的確認

公司裡面進行了一個開啟大頁環境的 500併發的壓測
發現效果為:
[root@testsvr113 ~]# top -u oracle -bn 1  |grep oracle_ |wc -l
762
[root@testsvr113 ~]# cat /proc/meminfo  |grep PageT
PageTables:       845468 kB

開啟大頁的情況下只有不到1GB的頁表使用

當機的messages 裡面其實出現了  240個左右的 oracle_$pid_$sid 的程序資訊

關於記憶體的學習還是需要就想進行.

相關文章