大页

一、什么是大页

系统进程是通过虚拟地址访问内存,但是CPU必须把它转换程物理内存地址才能真正访问内存。为了提高这个转换效率,CPU会缓存最近的虚拟内存地址和物理内存地址的映射关系,并保存在一个由CPU维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。

而在Redhat Linux中,内存都是以页的形式划分的,默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。这种增大的内存页尺寸在Linux 2.1中,称为Big page;在AS 3/4中,称为Hugepage。

二、大页的作用

1、  Linux默认块大小是4K,假设SGA大小为64G,则

SQL> select 64*1024*1024/4 as "KB/Block" from dual;

KB/Block

----------

16777216                   --页表大小16M

2、  如果启用大页,块大小该成2M(只能开启2M,不能改别的!),则

SQL> select 64*1024/2 as "M/Block" from dual;

M/Block

----------

32768                          --页表大小0.032M

3、  Linux每个进程页表独立,如果有1000个进程,则

没开启大页前16*1000

开启大页后0.032*1000

三、什么条件使用大页

如果系统有大量的物理内存(大于64G,SGA > 32G),则无论物理32位的操作系统还是64位的,都应该使用Hugepage。

注意:使用Hugepage内存是共享内存,它会一直keep在内存中的,不会被交换出去,也就是说使用hurgepage的内存不能被其他的进程使用,所以,一定要合理设置这个值,避免造成浪费。对于只使用Oracle的服务器来说,把Hugepage_pool设置成大于SGA大小才能被Oracle使用。

四、如何设置开启大页

1、  查看大页是否开启

more /proc/meminfo |grep Huge

HugePages_Total:       0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

                   --说明没有开启大页

Noteproc内核文件目录

2、11G开启大页前需要关闭AMM

       SQL> show parameter mem

 

NAME                                 TYPE        VALUE

------------------------------------                                   -----------            ------------------------------

hi_shared_memory_address             integer                 0

memory_max_target                   big integer              0

memory_target                        big integer            0

shared_memory_address                integer               0

--默认这两个值为0,如果这两个值不为0,则重置这两个值(不能直接设置为0):

         Alter  system reset  memory_max_target(重启后设置下一个)

         Alter  system  reset memory_ target

3、查询SGA_MAX大小

SQL> showparameter sga_max

NAME                                 TYPE        VALUE

------------------------------------                                   -----------------------------------------

sga_max_size                         big integer       900M

--大页总要比SGA大一点才能生效!

4、查看大页系统参数

sysctl -a |grep huge

vm.nr_hugepages = 0

vm.nr_hugepages_mempolicy = 0

vm.hugetlb_shm_group = 0

vm.hugepages_treat_as_movable = 0

vm.nr_overcommit_hugepages = 0

notesysctl –a显示所有参数

5、  修改大页

vi /etc/sysctl.conf

加入vm.nr_hugepages=455

sysctl  –p                  --使内核参数生效

6、  重启数据库,查看大页是否生效

more /proc/meminfo

HugePages_Total:     455

HugePages_Free:      455

HugePages_Rsvd:        0

HugePages_Surp:        0

--说明还没有生效

7、设置内存锁

 vi /etc/security/limits.conf

加入oracle   soft   memlock   910000或者设置成-1【无限制】

oracle  hard   memlock    910000或者设置成-1

8、  切换oracle用户,查询内存锁是否生效

ulimit -l

910000      --说明已经生效

9、  退出oracle用户,重启启动数据库,使用more/proc/meminfo观察

HugePages_Total:     455              --总共大页数

HugePages_Free:      424            --空闲页数,使用了2*(455-424)=64<sga_target

HugePages_Rsvd:      420            --承诺分配给oracle页数420*2+62=901约等于sga_max_target

HugePages_Surp:        0

五、目前发现开启大页的弊端

开启大页后不能启用AMM!(默认是不开启的)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值