CentOS6u9 Oracle11g RAC 搭建部署(六)大页内存优化

10-大页内存优化:

参见《CentOS6u9 Oracle11g 内存策略选择和大页内存优化》

配置启动AMM模式:

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}')
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
scp /boot/grub/grub.conf rac02:/boot/grub/
su - grid
su
crsctl stop cluster -all
# 两节点均重启
reboot
grep AnonHugePages /proc/meminfo

[TOC]

猜你喜欢

转载自blog.csdn.net/zwjzqqb/article/details/80622990
今日推荐