Linux AS 5中hugepage的一些變化

space6212發表於2019-05-28

以前一直用的是Linux AS4,在大記憶體情況下,也一直在用hugepage,沒有發現什麼讓人不省心的問題,但最近的Oracle專案用到了AS 5,且用到的機器記憶體都較大,有128GB,使用hugepage時遇到一些怪異的現象。

[@more@]配置hugepage很簡單,只需要在/etc/sysctl.conf加入如下行就可以:
vm.nr_hugepages=25100 #50000M SGA

修改後sysctl -p使得設定生效,但如果沒有足夠的空閒記憶體,則需要重啟機器。
當修改好這個重啟機器,並啟動Oracle後,眼前看到的景象嚇我一跳:
more /proc/meminfo
......
PageTables: 24660 kB
......
HugePages_Total: 25650
HugePages_Free: 21820
HugePages_Rsvd: 21234
Hugepagesize: 2048 kB

PageTables只用了不到25M,這是正常的,說明系統啟用了hugepage了,如果 用預設的4K頁,這部分可能佔用上G的大小。
但是看到下面的HugePages_Free就不淡定了,因為我設定的SGA是50000M,而機器又是剛剛啟動的,HugePages_Total和空閒記憶體都足夠放下SGA了,從表面上看,SGA沒有用到Hugepage那部分記憶體。

後來做了一些研究,發現了原因。先來解析一下幾個相關的引數:
HugePages_Total: Hugepage的頁面數量
HugePages_Free: 剩餘的頁面數量
HugePages_Rsvd: 被分配預留但是還沒有使用的page數目
Hugepagesize: 每單位數量大小

在以前版本中,只要Oracle一啟動,SGA用到了hugepage,HugePages_Free馬上就變少(目標是0)。
但在新版本(AS 5)中,這種情況發生變化:雖然SGA在Hugepage中,但是隻有SGA內使用時(非空閒),HugePages_Free才會減少。
所以我們剛才看到的現象是正常的,只是因為資料庫剛剛啟動,SGA還沒有被使用,所以看到HugePages_Free很大,接近於HugePages_Total,但是HugePages_Rsvd也很大,說明大部分hugepage的記憶體已經被分配出去了,只是目前還沒有使用。

下面透過一個例子來說明:

1. 原始資訊
[root@dwdb01 ~]# more /proc/meminfo |grep Huge
HugePages_Total: 25650
HugePages_Free: 21820
HugePages_Rsvd: 21234
Hugepagesize: 2048 kB

2. 建立一個表,佔用部分SGA
SQL> create table aaa tablespace test as select * from dba_objects;

Table created.

SQL> insert into aaa select * from aaa;

42681 rows created.

SQL> /

85362 rows created.

3. 此時的hugepage資訊
[root@dwdb01 ~]# more /proc/meminfo |grep Huge
HugePages_Total: 25650
HugePages_Free: 21811
HugePages_Rsvd: 21225
Hugepagesize: 2048 kB

可以看到HugePages_Free和HugePages_Rsvd都在減少。

4. 繼續insert資料,佔用更多SGA

SQL> /

170724 rows created.

SQL> /

341448 rows created.

5. 此時的hugepage資訊

[root@dwdb01 ~]# more /proc/meminfo |grep Huge
HugePages_Total: 25650
HugePages_Free: 21783
HugePages_Rsvd: 21197
Hugepagesize: 2048 kB

可以看到HugePages_Free和HugePages_Rsvd在繼續減少。

這個例子證明了,SGA是在hugepage裡面的,但SGA被使用時,HugePages_Free才會減少。因此,看到HugePages_Free很大不用過於擔心,只要證明SGA用到hugepage就沒有問題了。



PS: HugePages_Free - HugePages_Rsvd部分的記憶體是浪費的,且不能被其他程式使用。在實際應用中,儘可能讓HugePages_Free - HugePages_Rsvd=0

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

相關文章