ITPub博客

首页 > 数据库 > Oracle > Linux AS 5中hugepage的一些变化

Linux AS 5中hugepage的一些变化

原创 Oracle 作者:space6212 时间:2019-05-28 19:21:06 0 删除 编辑

以前一直用的是Linux AS4,在大内存情况下,也一直在用hugepage,没有发现什么让人不省心的问题,但最近的Oracle项目用到了AS 5,且用到的机器内存都较大,有128GB,使用hugepage时遇到一些怪异的现象。

[@more@]配置hugepage很简单,只需要在/etc/sysctl.conf加入如下行就可以:
vm.nr_hugepages=25100 #50000M SGA

修改后sysctl -p使得设置生效,但如果没有足够的空闲内存,则需要重启机器。
当修改好这个重启机器,并启动Oracle后,眼前看到的景象吓我一跳:
more /proc/meminfo
......
PageTables: 24660 kB
......
HugePages_Total: 25650
HugePages_Free: 21820
HugePages_Rsvd: 21234
Hugepagesize: 2048 kB

PageTables只用了不到25M,这是正常的,说明系统启用了hugepage了,如果 用默认的4K页,这部分可能占用上G的大小。
但是看到下面的HugePages_Free就不淡定了,因为我设置的SGA是50000M,而机器又是刚刚启动的,HugePages_Total和空闲内存都足够放下SGA了,从表面上看,SGA没有用到Hugepage那部分内存。

后来做了一些研究,发现了原因。先来解析一下几个相关的参数:
HugePages_Total: Hugepage的页面数量
HugePages_Free: 剩余的页面数量
HugePages_Rsvd: 被分配预留但是还没有使用的page数目
Hugepagesize: 每单位数量大小

在以前版本中,只要Oracle一启动,SGA用到了hugepage,HugePages_Free马上就变少(目标是0)。
但在新版本(AS 5)中,这种情况发生变化:虽然SGA在Hugepage中,但是只有SGA内使用时(非空闲),HugePages_Free才会减少。
所以我们刚才看到的现象是正常的,只是因为数据库刚刚启动,SGA还没有被使用,所以看到HugePages_Free很大,接近于HugePages_Total,但是HugePages_Rsvd也很大,说明大部分hugepage的内存已经被分配出去了,只是目前还没有使用。

下面通过一个例子来说明:

1. 原始信息
[root@dwdb01 ~]# more /proc/meminfo |grep Huge
HugePages_Total: 25650
HugePages_Free: 21820
HugePages_Rsvd: 21234
Hugepagesize: 2048 kB

2. 创建一个表,占用部分SGA
SQL> create table aaa tablespace test as select * from dba_objects;

Table created.

SQL> insert into aaa select * from aaa;

42681 rows created.

SQL> /

85362 rows created.

3. 此时的hugepage信息
[root@dwdb01 ~]# more /proc/meminfo |grep Huge
HugePages_Total: 25650
HugePages_Free: 21811
HugePages_Rsvd: 21225
Hugepagesize: 2048 kB

可以看到HugePages_Free和HugePages_Rsvd都在减少。

4. 继续insert数据,占用更多SGA

SQL> /

170724 rows created.

SQL> /

341448 rows created.

5. 此时的hugepage信息

[root@dwdb01 ~]# more /proc/meminfo |grep Huge
HugePages_Total: 25650
HugePages_Free: 21783
HugePages_Rsvd: 21197
Hugepagesize: 2048 kB

可以看到HugePages_Free和HugePages_Rsvd在继续减少。

这个例子证明了,SGA是在hugepage里面的,但SGA被使用时,HugePages_Free才会减少。因此,看到HugePages_Free很大不用过于担心,只要证明SGA用到hugepage就没有问题了。



PS: HugePages_Free - HugePages_Rsvd部分的内存是浪费的,且不能被其他程序使用。在实际应用中,尽可能让HugePages_Free - HugePages_Rsvd=0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-1043961/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 只读表空间
请登录后发表评论 登录
全部评论

注册时间:2005-01-25

  • 博文量
    245
  • 访问量
    166144