3 Key Reasons:
1. Oracle "Strongly recommends always deploying HugePages with Oracle Databases"
2. Reduces memory footprint by a factor of 500
3. 4K vs. 2MB memory pages. More pages can be mapped in memory with less overhead
Great video from OpenWorld DemoGrounds
HOW TO
Do steps 1-4 on EACH NODE
1. Set Oracle User memlock Limits
---------------------------------
NOTE: Value should be 90% of total memory
<value> is in kb (ex. 200 gb = 209715200 kb)
As Root
vi /etc/security/limits.conf
oracle soft memlock <value>
oracle hard memlock <value>
2. Set kernel.shmmax
--------------------
NOTE: Value should be comfortably larger than the largest SGA
As Root
get existing value:
cat /proc/sys/kernel/shmmax
set new value:
vi /etc/sysctl.conf
AND
echo <value in bytes> > /proc/sys/kernel/shmmax
AND
sysctl –p
verify new value
cat /proc/sys/kernel/shmmax
3. Set kernel.shmall
--------------------
NOTE: Value should be sum of SGA's / pagesize
Get pagesize
getconf PAGESIZE
Determine sum of SGAs
ipcs -m |grep oracle, sum of 5th column values + future SGAs
example:
pagesize= 4,096
SGA's = 92gb + 58gb growth = 161061273600 bytes
SGA's / pagesize = 39,321,600
kernel.shmall should be 39321600
get existing value:
cat /proc/sys/kernel/shmall
set new value:
vi /etc/sysctl.conf
AND
echo <value> > /proc/sys/kernel/shmall
AND
sysctl -p
verify new value
cat /proc/sys/kernel/shmall
4. Set vm.nr_hugepages
----------------------
NOTE: Use recommended value returned from hugepages_settings.sh
get the script here
As Root, add the following to /etc/sysctl.conf
# Hugepages
# Allow oracle user access to hugepages
vm.hugetlb_shm_group = 310
vm.nr_hugepages = <value>
AND run
sysctl -p
verify setting:
cat /proc/sys/vm/nr_hugepages
5. Set use_large_pages=ONLY in spfile (11g only)
------------------------------------------------
For Each DATABASE
alter system set use_large_pages=ONLY scope=spfile;
6. Restart Database(s)
----------------------
Verify huge pages in use (alert log)
Run ipcs -m (should only have a couple segments per database)
HOW TO
Do steps 1-4 on EACH NODE
1. Set Oracle User memlock Limits
---------------------------------
NOTE: Value should be 90% of total memory
<value> is in kb (ex. 200 gb = 209715200 kb)
As Root
vi /etc/security/limits.conf
oracle soft memlock <value>
oracle hard memlock <value>
2. Set kernel.shmmax
--------------------
NOTE: Value should be comfortably larger than the largest SGA
As Root
get existing value:
cat /proc/sys/kernel/shmmax
set new value:
vi /etc/sysctl.conf
AND
echo <value in bytes> > /proc/sys/kernel/shmmax
AND
sysctl –p
verify new value
cat /proc/sys/kernel/shmmax
3. Set kernel.shmall
--------------------
NOTE: Value should be sum of SGA's / pagesize
Get pagesize
getconf PAGESIZE
Determine sum of SGAs
ipcs -m |grep oracle, sum of 5th column values + future SGAs
example:
pagesize= 4,096
SGA's = 92gb + 58gb growth = 161061273600 bytes
SGA's / pagesize = 39,321,600
kernel.shmall should be 39321600
get existing value:
cat /proc/sys/kernel/shmall
set new value:
vi /etc/sysctl.conf
AND
echo <value> > /proc/sys/kernel/shmall
AND
sysctl -p
verify new value
cat /proc/sys/kernel/shmall
4. Set vm.nr_hugepages
----------------------
NOTE: Use recommended value returned from hugepages_settings.sh
get the script here
As Root, add the following to /etc/sysctl.conf
# Hugepages
# Allow oracle user access to hugepages
vm.hugetlb_shm_group = 310
vm.nr_hugepages = <value>
AND run
sysctl -p
verify setting:
cat /proc/sys/vm/nr_hugepages
5. Set use_large_pages=ONLY in spfile (11g only)
------------------------------------------------
For Each DATABASE
alter system set use_large_pages=ONLY scope=spfile;
6. Restart Database(s)
----------------------
Verify huge pages in use (alert log)
Run ipcs -m (should only have a couple segments per database)
No comments:
Post a Comment