前兩天客戶Exadata 12c環境因為內存分配報錯,以下為處理過程。
節點重新啟動的時候報錯,但是其他節點卻啟動正常。報錯內容:
ORA-27106 System pages not available toallocate memory
alert內容:
Supported system pagesize(s):
Fri Apr 10 18:07:43 2015
PAGESIZE AVAILABLE_PAGES EXPECTED_PAGES ALLOCATED_PAGES ERROR(s)
Fri Apr 10 18:07:43 2015
2048K 3079 8194 3076 ORA-27125
判斷有可能是hugePage的分配不足導致。
檢查了參數文件中修改的內容。發現設置了use_large_pages。參數值有三個代表的含義如下:
TRUE表示如果系統配置好了HugePage,則會使用,如果沒有,SGA也可以使用通常頁大小的內存,也就是說SGA可以運行在混合模式下。
FALSE表示,實例不會使用HugePage。
ONLY表示只使用Huge。
故障節點上use_large_pages值為ONLY。所以出現了上面沒有足夠的HugePage而報錯的情況。
知道的問題的根源,解決起來就容易了。兩種解決方案。
1、 修改操作系統參數vm.nr_hugepages將值擴大。
2、 修改數據庫參數use_large_pages為TRUE。
經過溝通,用戶方沒有特別要求數據庫參數的值,所以將其修改為TRUE後,事情結束。
這時候有同學要問了,為什麼其他節點的數據庫正常開啟呢?
其實是因為這樣,這套集群中一共有兩個數據庫。第二個數據庫是後來創建的,use_large_pages的值為默認值TRUE。
故障節點重啟後第二個數據庫的實例先行啟動,使用了大部分的HugePage,導致剩余的數量不夠第一個數據庫實例啟動,因此報錯。