ORACLE 启用大页内存

1. huge pages 设置大小的计算脚本

附在文档最后。

 

2.设置oracle用户的memlock

/etc/security/limit.conf

oracle soft memlock unlimited

oracle hard memlock unlimited

 

3. 设置huge pages

/etc/sysctl.conf

vm.nr_hugepages = xxxxx

#sysctl -p 

 

4.oracle启用ASMM ,停用AMM

memory_max_target / memory_target 设置为0

sga_max_size / sga_target / pga_aggregate_target 手动设置

 

huge pages 设置大小的计算脚本:

 

#!/bin/bash  
#  
# hugepages_settings.sh  
#  
# Linux bash script to compute values for the  
# recommended HugePages/HugeTLB configuration  
#  
# Note: This script does calculation for all shared memory  
# segments available when the script is run, no matter it  
# is an Oracle RDBMS shared memory segment or not.  
#  
# This script is provided by Doc ID 401749.1 from My Oracle Support   
# http://support.oracle.com  
  
# Welcome text  
echo "  
This script is provided by Doc ID 401749.1 from My Oracle Support   
(http://support.oracle.com) where it is intended to compute values for   
the recommended HugePages/HugeTLB configuration for the current shared   
memory segments. Before proceeding with the execution please note following:  
 * For ASM instance, it needs to configure ASMM instead of AMM.  
 * The 'pga_aggregate_target' is outside the SGA and   
   you should accommodate this while calculating SGA size.  
 * In case you changes the DB SGA size,   
   as the new SGA will not fit in the previous HugePages configuration,   
   it had better disable the whole HugePages,   
   start the DB with new SGA size and run the script again.  
And make sure that:  
 * Oracle Database instance(s) are up and running  
 * Oracle Database 11g Automatic Memory Management (AMM) is not setup   
   (See Doc ID 749851.1)  
 * The shared memory segments can be listed by command:  
     # ipcs -m  
  
  
Press Enter to proceed..."  
  
read  
  
# Check for the kernel version  
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`  
  
# Find out the HugePage size  
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`  
if [ -z "$HPG_SZ" ];then  
    echo "The hugepages may not be supported in the system where the script is being executed."  
    exit 1  
fi  
  
# Initialize the counter  
NUM_PG=0  
  
# Cumulative number of pages required to handle the running shared memory segments  
for SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' | grep "[0-9][0-9]*"`  
do  
    MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`  
    if [ $MIN_PG -gt 0 ]; then  
        NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`  
    fi  
done  
  
RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`  
  
# An SGA less than 100MB does not make sense  
# Bail out if that is the case  
if [ $RES_BYTES -lt 100000000 ]; then  
    echo "***********"  
    echo "** ERROR **"  
    echo "***********"  
    echo "Sorry! There are not enough total of shared memory segments allocated for   
HugePages configuration. HugePages can only be used for shared memory segments   
that you can list by command:  
  
    # ipcs -m  
  
of a size that can match an Oracle Database SGA. Please make sure that:  
 * Oracle Database instance is up and running   
 * Oracle Database 11g Automatic Memory Management (AMM) is not configured"  
    exit 1  
fi  
  
# Finish with results  
case $KERN in    '2.2') echo "Kernel version $KERN is not supported. Exiting." ;;  
    '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;  
           echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;  
    '2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;  
esac  
  
# End

你可能感兴趣的:(ORACLE)