10-大页内存优化:
参见《CentOS6u9 Oracle11g 内存策略选择和大页内存优化》
配置启动ASMM模式:
su - oracle
cd /tmp
# 计算SGA和PGA容量
SGA_Bytes=$(grep 'MemTotal' /proc/meminfo |awk '{printf ("%d\n",$2*1024*0.8*0.8)}')
PGA_Bytes=$(grep 'MemTotal' /proc/meminfo |awk '{printf ("%d\n",$2*1024*0.8*0.2)}')
# 生成pfile
SPFILE_PATH=$(echo "show parameter pfile"|sqlplus -s / as sysdba|awk '{if($1=="spfile") print $3}')
# 注意路径可能较长,SPFILE_PATH参数可能获取不正确
echo "create pfile='/tmp/initedit.ora' from spfile='${SPFILE_PATH}';"|sqlplus / as sysdba
# 修改配置pfile
sed -i '/^.*memory_target.*$/d' initedit.ora
sed -i '/^.*memory_max_target.*$/d' initedit.ora
sed -i '/^.*sga_target.*$/d' initedit.ora
sed -i '/^.*pga_aggregate_target.*$/d' initedit.ora
sed -i '/^.*workarea_size_policy.*$/d' initedit.ora
echo "*.sga_target=${SGA_Bytes}">>initedit.ora
echo "*.pga_aggregate_target=${PGA_Bytes}">>initedit.ora
echo "*.workarea_size_policy=auto">>initedit.ora
# 关库重新生成spfile
SID=orcl
su - grid -c "srvctl stop database -d ${SID}"
echo "create spfile='${SPFILE_PATH}' from pfile='/tmp/initedit.ora';"|sqlplus / as sysdba
# 启库验证
su - grid -c "srvctl start database -d ${SID}"
echo 'show parameter memory_target'|sqlplus -s / as sysdba
echo 'show parameter memory_max_target'|sqlplus -s / as sysdba
echo 'show parameter sga_target'|sqlplus -s / as sysdba
echo 'show parameter pga_aggregate_target'|sqlplus -s / as sysdba
echo 'show parameter workarea_size_policy'|sqlplus -s / as sysdba
大页内存优化:
# 节点1操作:
su -
# 计算大页内存块数量
HPSIZE_Bytes=$(grep Hugepagesize /proc/meminfo|awk '{print $2*1024}')
ADD=$(ipcs -m | awk '{print $5}' | grep "[0-9][0-9]*"|wc -l)
BASE=$(ipcs -m | awk '{print $5}' | grep "[0-9][0-9]*"|awk "{SunBytes+=\$1}END{printf(\"%d\",SunBytes/${HPSIZE_Bytes})}")
NUM=$((${BASE}+${ADD}))
NUM_KB=$((${NUM}*2*1024))
# 配置生效
echo "vm.nr_hugepages = ${NUM}">>/etc/sysctl.conf
sysctl -p
echo "oracle soft memlock ${NUM_KB}">>/etc/security/limits.conf
echo "oracle hard memlock ${NUM_KB}">>/etc/security/limits.conf
# 同步节点2
scp /etc/sysctl.conf rac02:/etc/
ssh rac02 'sysctl -p'
scp /etc/security/limits.conf rac02:/etc/security/
# 库重启验证
SID=orcl
su - grid -c "srvctl stop database -d ${SID}"
su - grid -c "srvctl start database -d ${SID}"
for i in $(seq 10)
do
grep -E 'HugePages_Total|HugePages_Free' /proc/meminfo
cat /proc/meminfo|grep PageT
echo -e '\n\n\n'
sleep 5
done
# 收尾
su - oracle
echo "alter system set use_large_pages=only scope=spfile sid='*';"|sqlplus -s / as sysdba
exit
sed -i 's/\<kernel.*$/& transparent_hugepage=never/g' /boot/grub/grub.conf
ssh rac02 "sed -i 's/\<kernel.*$/& transparent_hugepage=never/g' /boot/grub/grub.conf"
su - grid
su
crsctl stop cluster -all
# 两节点均重启
reboot
grep AnonHugePages /proc/meminfo
[TOC]