一、前因
再給一位客戶的Exdata 2 節點 RAC 19C版本創建數據庫并配置好優化參數后,客戶一天發來一份健康檢查報告,打開一看 use_large_pages
配置異常。 回想安裝部署時特意確認了在db啟動大頁已經生效,為何會有此異常告警項?
二、檢查確認
在DB中檢查 配置的是參數是 AUTO_ONLY
啟動日志也是正常使用上了大頁內存。
三、參數解析
在 19c 之前的早期版本中,有三個可能的值 – TRUE
、FALSE
、ONLY
。從 Oracle 11.2.0.3 開始,TRUE
意味著實例將分配系統中可用的盡可能多的大頁面,并從普通的小頁面獲取其余部分。FALSE
將告訴它根本不使用大頁面,而 ONLY
只有在系統中有足夠數量的可用大頁面來容納所有 SGA 時才能啟動實例。TRUE
是所有數據庫的默認值。
在 19c 版本中,多了一個值 AUTO_ONLY
,現在它是運行 Oracle Database 19c 的 Exadata 系統的默認值。
Database Reference
文檔的描述看起起來與 ONLY
值的描述比較像。以下是文檔的摘錄:
指定在啟動期間,實例將計算并請求它所需的大頁面數量。如果作系統可以滿足此請求,則實例將成功啟動。如果作系統無法滿足此請求,則實例將無法啟動。
實踐出真知 測一下不同參數它是如何產生作用的,測試環境沒有配置大頁面。
[root@localhost ~]# cat /proc/meminfo |grep H
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB[root@localhost ~]# cat /etc/sysctl.conf
# For more information, see sysctl.conf(5) and sysctl.d(5).
fs.aio-max-nr = 3145728
fs.file-max = 6815744
kernel.shmall = 4066380
kernel.shmmax = 16655892479
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.swappiness = 10
當前數據庫版本19.19、內存15G、SGA 9.5G
use_large_pages
參數設置為AUTO_ONLY
并重新啟動實例。
SQL> show parameter pagesNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
use_large_pages string TRUE
SQL> show parameter sgaNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 9536M
sga_min_size big integer 0
sga_target big integer 9536M
unified_audit_sga_queue_size integer 1048576
SQL> !free -gtotal used free shared buff/cache available
Mem: 15 1 1 9 13 4
Swap: 7 0 7SQL> alter system set use_large_pages=auto_only scope=spfile;System altered.SQL>startup force
數據庫重啟后可以看到,大頁面在系統上被自動配置以適應 SGA。
[oracle@localhost ~]$ cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
HugePages_Total: 4770
HugePages_Free: 11
HugePages_Rsvd: 11
HugePages_Surp: 0
Hugepagesize: 2048 kB[oracle@localhost trace]$ cat /etc/sysctl.conf
fs.aio-max-nr = 3145728
fs.file-max = 6815744
kernel.shmall = 4066380
kernel.shmmax = 16655892479
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.swappiness = 10
數據庫實例能夠更改內核配置并自行分配 大頁內存空間,這個數字正是適合 SGA 所需的數字。
在alter日志中,也看到實例獲取到了SGA所需大小的大頁內存。
2025-07-16T04:13:07.478027-04:00Per process system memlock (soft) limit = UNLIMITED
2025-07-16T04:13:07.478104-04:00Expected per process system memlock (soft) limit to lockinstance MAX SHARED GLOBAL AREA (SGA) into memory: 9540M
2025-07-16T04:13:07.478300-04:00Available system pagesizes:4K, 2048K
2025-07-16T04:13:07.478424-04:00Supported system pagesize(s):
2025-07-16T04:13:07.478486-04:00PAGESIZE AVAILABLE_PAGES EXPECTED_PAGES ALLOCATED_PAGES ERROR(s)
2025-07-16T04:13:07.478680-04:002048K 4770 4770 4770 NONE
2025-07-16T04:13:07.478739-04:00Reason for not supporting certain system pagesizes:
2025-07-16T04:13:07.478836-04:004K - Large pagesizes only
2025-07-16T04:13:07.478900-04:00
如果關閉數據庫會發生什么情況?
SQL> shutdown IMMEDIATE
DATABASE closed.
DATABASE dismounted.
ORACLE instance shut down.
SQL>
數據庫已關閉,內存中還是分配了 hugepage,直到重啟或修改。
[oracle@localhost trace]$ sysctl vm.nr_hugepages
vm.nr_hugepages = 4770
[oracle@localhost trace]$
四、總結
參數值 | 核心功能描述 | 啟動情況 | 性能相關說明 | 適用場景及特殊限制 |
| 系統配置大頁時可使用;優先分配大頁,不足時用常規頁 | 無論大頁是否充足,均可啟動 | 11.2.0.2 版本中若大頁不足可能導致 錯誤和性能下降;11.2.0.3 及之后版本支持混合頁分配,性能更穩定 | 無特殊場景限制,是除特定云服務和本地 Exadata 外的默認值 |
| 不使用大頁,僅用常規頁 | 可正常啟動 | 可能導致嚴重性能下降(任何平臺均可能受影響) | 不推薦使用,僅 Oracle ASM 實例因 啟用自動設為 時無性能問題 |
| 啟動時計算并請求所需大頁數;大頁不足時混合使用大頁和常規頁 | 無論大頁是否充足,均可啟動 | 性能穩定性中等,依賴系統大頁配置情況 | 適用于希望嘗試使用大頁但允許 fallback 到常規頁的場景 |
| 要求整個 SGA 必須使用大頁;大頁不足時無法啟動 | 大頁充足則啟動,否則啟動失敗 | 性能一致性好,推薦用于需要穩定性能的場景 | 云環境 Exadata 和 Base Database Service 的默認值;不可與 等參數同時設置 |
| 啟動時計算并請求所需大頁數;僅在大頁充足時啟動,不足則失敗 | 大頁充足則啟動,否則啟動失敗 | 性能穩定性好,確保 SGA 完全使用大頁 | 19c 及之后版本的本地 Exadata 系統默認值 |