环境: OEL 6.5 64bit + Oracle 11.2.0.4 + 32G内存 [11GSGA]
在数据库启动中Alert日志有如下提示信息:
- ************************ Large Pages Information *******************
- Per process system memlock (soft) limit = 64 KB
- Total Shared Global Region in Large Pages = 0 KB (0%)
- Large Pages used by this instance: 0 (0 KB)
- Large Pages unused system wide = 0 (0 KB)
- Large Pages configured system wide = 0 (0 KB)
- Large Page size = 2048 KB
- RECOMMENDATION:
- Total System Global Area size is 11 GB. For optimal performance,
- prior to the next instance restart:
- 1. Increase the number of unused large pages by
- at least 5761 (page size 2048 KB, total size 11 GB) system wide to
- get 100% of the System Global Area allocated with large pages
- 2. Large pages are automatically locked into physical memory.
- Increase the per process memlock (soft) limit to at least 11 GB to lock
- 100% System Global Area\'s large pages into physical memory
- ********************************************************************
看来这样大的内存占用势必需要配置HugePages 提高性能。
在MY ORACLE SUPPORT 中 Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)
提供了计算 vm.nr_hugepages的具体脚本。
点击(此处)折叠或打开
- #!/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\" ;;
- \'3.8\') echo \"Recommended setting: vm.nr_hugepages = $NUM_PG\" ;;
- esac
- # End
如果配置到此,仅仅完成了第一步,在数据库启动时依然有如下提示信息:
点击(此处)折叠或打开
- ************************ Large Pages Information *******************
- Per process system memlock (soft) limit = 64 KB
- Total Shared Global Region in Large Pages = 0 KB (0%)
- Large Pages used by this instance: 0 (0 KB)
- Large Pages unused system wide = 5764 (11 GB)
- Large Pages configured system wide = 5764 (11 GB)
- Large Page size = 2048 KB
- RECOMMENDATION:
- Total System Global Area size is 11 GB. For optimal performance,
- prior to the next instance restart:
- 1. Large pages are automatically locked into physical memory.
- Increase the per process memlock (soft) limit to at least 11 GB to lock
- 100% System Global Area\'s large pages into physical memory
- ********************************************************************
可以参考 MY ORACLE SUPPORT 中 HugePages on Oracle Linux 64-bit (Doc ID 361468.1)
配置 /etc/security/limits.conf 文件
点击(此处)折叠或打开
- soft memlock ******
- hard memlock ******
至此配置完成,重新启动后,Alert日志出现以下内容:
点击(此处)折叠或打开
- ************************ Large Pages Information *******************
- Per process system memlock (soft) limit = 12 GB
- Total Shared Global Region in Large Pages = 11 GB (100%)
- Large Pages used by this instance: 5761 (11 GB)
- Large Pages unused system wide = 3 (6144 KB)
- Large Pages configured system wide = 5764 (11 GB)
- Large Page size = 2048 KB
- ********************************************************************
下面图片详细解释了HugePages
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28538954/viewspace-1344834/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28538954/viewspace-1344834/