大页(huge pages) 三大系列 ---计算大页配置参数

时间:2023-03-09 18:58:29
大页(huge pages) 三大系列 ---计算大页配置参数

使用以下shell 脚本来计算大页配置参数,确保使用脚本实例之前的数据已经开始,

如果数据库的版本号11g,确认是否使用自己主动的内存管理(AMM)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#!/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 HugePagesconfiguration, 

   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 notsetup 

   (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 wherethe script is being executed."

    exit 1

fi



# Initialize the counter

NUM_PG=0



# Cumulative number of pages required to handle the running shared memorysegments

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 sharedmemory segments allocated for 

HugePages configuration. HugePages can only be used for shared memorysegments 

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 notconfigured"

    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" ;;

    '3.8') echo "Recommended setting: vm.nr_hugepages =$NUM_PG" ;;

esac



# End

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

版权声明:本文博客原创文章,博客,未经同意,不得转载。