程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> LINUX下為ORACLE數據庫設置大頁--hugepage

LINUX下為ORACLE數據庫設置大頁--hugepage

編輯:Oracle教程

在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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved