• oracle设置大页


    环境:

    OS:Centos 7

    DB:11.2.0.4

     

    1.查看系统当前的大页使用情况:
    [root@localhost ~]# cat /proc/meminfo |grep Huge
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB   --大页大小是2M

    2.查看sga大小
    SQL> show parameter sga_max   

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    sga_max_size                         big integer 3568M

    3.设置大页的数量
    --这里是 1800 个*2M=3600M,SGA最大3568M,大页的内存要大于SGA大小,才能被ORACLE使用,所以我设置1800个.

    可以允许如下脚本让其给出建议值:

    #!/bin/bash
    #
    # hugepages_settings.sh
    #
    # Linux bash script to compute values for the
    # recommended HugePages/HugeTLB configuration
    # on Oracle Linux
    #
    # 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 on Oracle Linux. 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
    ",$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" ;;
        '3.8') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
        '3.10') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
        '4.1') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    esac
    
    # End
    [root@localhost tmp]# ./hugepages_settings.sh 
    
    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 on Oracle Linux. 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...
    
    Recommended setting: vm.nr_hugepages = 1789


    vi /etc/sysctl.conf
    在里面增加一行:
    vm.nr_hugepages=1800
    保存之后执行:
    sysctl -p
    查看:--如果HugePages_Free:未到1800,不停的执行sysctl -p,使HugePages_Total达到设置的值
    [root@localhost ~]# cat /proc/meminfo |grep Huge
    HugePages_Total:     1800
    HugePages_Free:      1800
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB

    我这里写个使用crontab里执行
    [root@localhost tmp]# more flush_huge.sh
    #!/bin/bash
    . /etc/profile
    . ~/.bash_profile
    sysctl -p


    crontab里做的配置
    * * * * * /tmp/flush_huge.sh
    * * * * * sleep 10; /tmp/flush_huge.sh
    * * * * * sleep 20; /tmp/flush_huge.sh
    * * * * * sleep 30; /tmp/flush_huge.sh
    * * * * * sleep 40; /tmp/flush_huge.sh
    * * * * * sleep 50; /tmp/flush_huge.sh



    4.还需要设置内存锁:

    --此设置需要重新登陆或重启才能生效, memlock数量要大于大页的数量--设置为-1,不限制。
    vi /etc/security/limits.conf
    oracle   soft   memlock    -1
    oracle   hard   memlock    -1
    [root@bys3 ~]#ulimit -l
    3500000   -----这个数字就是针对大页数量的限制的,足够用。


    5.重启数据库,大页已经被ORACLE用上了。
    SYS@ bys3>shutdown immediate;
    SYS@ bys3>startup

    重启数据库过程中不断执行,cat /proc/meminfo |grep Huge,能看到HugePages_Free:的数量不断减少,说明大页正在被使用。
    [root@bys3 ~]# cat /proc/meminfo |grep Huge
    HugePages_Total:     1800
    HugePages_Free:      1701
    HugePages_Rsvd:       10
    HugePages_Surp:        0
    Hugepagesize:       2048 kB

     

    -- The End --

     

  • 相关阅读:
    第12课
    第11课
    第6课
    第5课
    ubuntu apache 通过端口新建多个站点
    phpstudy所需运行库
    ubuntu 修改和配置ip
    Linux Cp命令
    Ubuntu各个版本的镜像下载地址
    ubuntu 虚拟机添加多个站点
  • 原文地址:https://www.cnblogs.com/hxlasky/p/12516307.html
Copyright © 2020-2023  润新知