在Linux中配置hugepage可以提高oracle的性能,減少oracle sga的頁交換,類似於aix中的lagepage。
為什麼 使用大頁?
LINUX內存的默認塊大小是4K
如果SGA為:128G
select 128*1024*1024/4 from dual;33554432個(三千多萬),
select 128*1024/2 from dual; 65536個
每個內存頁,有一個頁表項(大概10個字節),記錄頁的狀態、位置
默認塊大小是4K時--頁表大小:320M。
在大頁下2M時,頁表只占.625M
在Linux中,每個進程頁表獨立,有各自的頁表。
如果有1000個進程:1000*320M大約是320G。
而1000個進程使用大頁:1000*0.625=625M
設置了大頁,但沒被Oracle使用,原因只有兩個:
(1)、SGA_MAX_SIZE超過了大頁
(2)、沒有設置內存鎖
內存:是進程活動的舞台,ORACLE數據庫在startup時會自動去查找是否設置有大頁。
如有,在大頁中分配SGA。
如沒有,則正常使用默認數據塊大小啟動。
#############
設置大頁步驟:
1.查看系統當前的大頁使用情況:
[oracle@bys3 ~]$ cat /proc/meminfo |grep Huge
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize:
2048 kB --大頁大小是2M
BYS@ bys3>show parameter sga_max --查看數據庫SGA大小--我的實驗機
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 216M
2. 設置大頁的數量
--這裡是200個*2M=400M,SGA最大216M,大頁的內存要大於SGA大小,才能被ORACLE使用,所以我設置200個。
vi /etc/sysctl.conf
在裡面增加一行:
vm.nr_hugepages=200
保存之後執行:
sysctl -p
查看: --如果HugePages_Free:未到200,多執行幾次sysctl -p
[root@bys3 ~]# cat /proc/meminfo |grep Huge
HugePages_Total: 200
HugePages_Free: 200
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
3.還需要設置內存鎖:-- memlock數量要大於大頁的數量--設置為-1,不限制。
vi /etc/security/limits.conf
oracle soft memlock -1
oracle hard memlock -1
[root@bys3 ~]# ulimit -l
3500000 -----這個數字就是針對大頁數量的限制的,足夠用。
4.重啟數據庫,大頁已經被ORACLE用上了。
SYS@ bys3>shutdown immediate;
SYS@ bys3>startup
重啟數據庫過程中不斷執行;cat /proc/meminfo |grep Huge,能看到HugePages_Free:的數量不斷減少,說明大頁正在被使用。
[root@bys3 ~]# cat /proc/meminfo |grep Huge
HugePages_Total: 200
HugePages_Free: 101
HugePages_Rsvd: 10
HugePages_Surp: 0
Hugepagesize: 2048 kB