關於資料庫開啟大頁對效能的影響
背景
有個專案出現了資料庫當機的情況.
發到我這邊時有一個比較概略的文件描述問題
當時猜測的原因是:
資料庫沒開啟大頁, 導致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 的程序資訊
關於記憶體的學習還是需要就想進行.