SGA的大小,建议配值并使用HugePage特性。本文基于x86_64上的Linux下来描述如何配值hugepages的。
有关大页面的特性请参考:Linux HugePage的特性
1,为什么需要配值hugepages的?
一个更大的页面尺寸和页数减#:
默认页面大小为4K,而HugeTLB大小为2048K。这意味着该系统将需要处理512倍以下的页面。
二,不表查找:
由于不受hugepages的替换(尽管常规页面),页面查表不是必需的。
C,更好的整体内存性能:
在任何现代操作系统的虚拟内存系统()每个内存操作实际上是两个抽象的内存操作。有了hugepages的,因为有人数较少的页面,页表访问的可能瓶颈显然是可以避免的。
D,没有交换:
我们必须避免交换发生在Linux操作系统上的所有文件1295478.1。hugepages的是不可交换的(而常规页面)。因此,没有任何页面替换机制开销。hugepages的普遍视为寄托。
E,没有kswapd操作:
kswapd将变得非常繁忙,如果有一个非常大的区域进行分页(即13万页表项为50GB的内存),将使用一个令人难以置信的大量的CPU资源。使用大页面时,kswapd是不参与管理它们。另请参阅文档361670.1
2,配值hugepages的
下面列出了配值大页面的所有步骤
立即订购查看当前系统是否配值的大页面
下面的查询中HugePages相关的几个值都为0,表明当前未配值HugePages,其次可以看到Hugepagesize为2MB。
$ grep的巨大的/ proc / meminfo中
则HugePages_Total等于:0
HugePages_Free:0
HugePages_Rsvd:0
Hugepagesize:2048 KB
B,修改用户的MEMLOCK限制
通过修改/ ETC /安全/ limits.conf的配值的文件来实现
该参数的值通常配值位略小于当前的已安装系统内存,如当前你的系统内存为64GB,可以做如下设置
*软MEMLOCK 60397977
*硬MEMLOCK 60397977
上述的设置单位为kb,不会降低系统性能。至少也要配值为略大于系统上所有SGA的总和。
使用的ulimit-L来校验该设置
C,禁用AMM(仅限Oracle 11g)
如果当前的甲骨文版本为10g中,可以跳过此步骤。
如果当前的甲骨文版本为11克,由于自动内存管理(AMM)特性与hugepages的不兼容,需要禁用AMM。
ALTER SYSTEM RESET的MEMORY_TARGET范围= SPFILE;
ALTER系统复位MEMORY_MAX_TARGET的SCOPE = SPFILE;
ALTER SYSTEM SET SGA_TARGET = 克SCOPE = SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 克SCOPE = SPFILE;
SHUTDOWN IMMEDIATE;
启动项目;
D,计算vm.nr_hugepages产品的值
使用甲骨文提供的脚本hugepages_settings.sh的脚本来计算vm.nr_hugepages的值
在执行脚本之前确保所有的Oracle的实例已启动以及ASM也启动(存在的情形下)
$。/ hugepages_settings.sh
...
推荐设置:vm.nr_hugepages = 1496
E,编辑的/ etc / sysctl.conf文件来设置vm.nr_hugepages参数
$ sysctl的-W vm.nr_hugepages的= 1496
$ sysctl的-P
- 作者:罗宾逊
- 博客:外链网址已屏蔽
F,停止所有的实例并重启服务器
上述的所有步骤已经实现了动态修改,但对于HugePages的分配需要重新启动server才能生效。
h时,验证配值
HugePages相关参数的值会随着当前服务器上的实例的停止与启动而动态发生变化
通常情况下,HugePages_Free的值应当小于HugePages_Total的值,在HugePages被使用时HugePages_Rsvd值应当为非零值。
$ grep的巨大的/ proc / meminfo中
则HugePages_Total等于:131
HugePages_Free:20
HugePages_Rsvd:20
Hugepagesize:2048 KB
如下面的情形,当服务器上仅有的一个实例被关闭后,HugePages_Rsvd的值为零。且HugePages_Free等于HugePages_Total
$ grep的巨大的/ proc / meminfo中
则HugePages_Total等于:131
HugePages_Free:131
HugePages_Rsvd:0
Hugepagesize:2048 KB
3,使用大页面的注意事项
下面的三种情形应当重新配置大页面
物理内存的增减或减少
B,在当前服务器的上新增或移出实例
C,实例的SGA的大小增加或减少
如果未能调整hugepages的,可能会引发下面的问题
一,数据库性能地下
B,出现内存不足或者过度使用交换空间
C,数据库实例不能被启动
D,关键性系统服务故障
4,hugepages的特性的常见故障处理
症状A:
系统正在运行的内存或交换
可能的原因:
没有足够的大页面覆盖的SGA(s)和策略性增长地区分配通过常规页面hugepages的浪费保留的区域。
故障排除措施:
审查您的hugepages的配置,以确保所有SGA(s)的覆盖。
症状B:
数据库无法启动
可能的原因:
MEMLOCK限制设置不正确
故障排除措施:
请确保limits.conf中的设置适用于数据库所有者帐户。
症状C:
一个数据库无法启动,而另一种是
可能的原因:
的特定数据库的SGA找不到可用hugepages的,剩余的RAM是不够的。
故障排除措施:
确保,RAM和hugepages的是足以支付所有的数据库SGA的
症状:
集群就绪服务(CRS)无法启动
可能的原因:
hugepages的配置太大(可能大于安装的RAM)
故障排除措施:
确保SGA总小于所安装的RAM和重新计算hugepages的。
症状E:
则HugePages_Total等于= HugePages_Free
可能的原因:
在所有不使用大页面。没有数据库实例或使用AMM。
故障排除措施:
禁用AMM和确保数据库实例。
症状F:
数据库成功启动性能缓慢
可能的原因:
SGA中的特定数据库找不到可用hugepages的,因此SGA是处理常规页面,从而导致性能缓慢
故障排除措施:
请确保hugepages的许多,足以覆盖所有的数据库策略性增长地区
参考文献:[ID 361468.1]
5,计算vm.nr_hugepages值的脚本
#!/斌/庆典
#
#hugepages_settings.sh
#
#Linux的bash脚本来计算值
#推荐hugepages的/ HugeTLB配置,
#
#注:此功能计算所有共享内存
#段运行脚本时,无论
#是Oracle RDBMS中共享内存段或没有。
#
#这个脚本的My Oracle Support提供的文档ID 401749.1
#外链网址已屏蔽
#欢迎文字
回声“
此脚本的My Oracle Support提供的文档ID 401749.1
它的目的是计算值(外链网址已屏蔽)
推荐的大页面/ HugeTLB的配置为当前共享
内存段。在继续执行之前,请注意以下内容:
*对于ASM实例,它需要配置ASMM AMM。
* pga_aggregate_target的'超出SGA和
你应该适应这一点,而计算SGA的大小。
*如果你改变的DB SGA的大小,
新SGA将不适合以前hugepages的配置,
它有更好禁用整个hugepages的,
启动DB新的SGA的大小,再次运行该脚本。
并确保:
* Oracle数据库实例(s)是启动和运行
*甲骨文数据库11g自动内存管理(AMM)不设置
(请参阅文档ID 749851.1)
*共享内存段通过命令可以列出:
#IPCS米
按Enter键继续......“
阅读
#检查内核版本
科恩=`uname-r后用awk-F。'{printf(“请%D%D \ N”,$ 1,$ 2);}'`
#找出HugePage的大小
HPG_SZ =的`grep Hugepagesize的的/ proc / meminfo中|用awk'{$ 2}'`
如果HPG_SZ [-Z“$”];
呼应“大页面可能不支持在系统中正在执行的脚本。”
1号出口
科幻
#初始化计数器
NUM_PG = 0
#累积需要处理运行共享内存段的页面数量
为SEG_BYTES IPCS米|,CUT-C44-300 |用awk'{$ 1}'| grep的“[0-9] [0-9] *”`
做
,MIN_PG =`回声“$ SEG_BYTES /($ HPG_SZ * 1024)”| BC-Q`
如果[$ MIN_PG,GT 0];
NUM_PG NUM_PG =`回声“$ + $ MIN_PG +1”| BC-Q`
科幻
做
RES_BYTES =`回声“$ NUM_PG * $ HPG_SZ * 1024”| BC-Q`
#SGA小于100MB无厘头
#摆脱困境,如果是这样的话
如果[$ RES_BYTES-LT 100000000];
回声“***********”
回声“** ERROR **”
回声“***********”
回声“对不起!有没有足够的总分配共享内存段
hugepages的配置。大页面只能被用于共享内存段
你可以列出命令:
#IPCS米
的大小,可以匹配Oracle数据库SGA。请确保:
* Oracle数据库实例启动并运行
* Oracle数据库11g的自动内存管理(AMM)未配置“
1号出口
科幻
#完成结果
情况$ KERN
'2 .4')HUGETLB_POOL =`回声“$ NUM_PG * $ HPG_SZ/1024”| BC-Q`;
回声“推荐设置:vm.hugetlb_pool = $ HUGETLB_POOL”;
'2 .6')回声“推荐设置:vm.nr_hugepages = $ NUM_PG”;
*)回声“无法识别的内核版本$ KERN退出。”;;
ESAC
#结束