您的位置:首页 > 数据库 > Oracle

在Linux 5中为oracle配置hugepage的方法

2013-07-22 12:16 781 查看
在Linux 5中为oracle配置hugepage的方法

http://unix-cd.com/vc/www/16/2011-01/17676.html

Hugepage/Big page:

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

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

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

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

在启用了Hugepage的情况下,32位的ORACLE可以把SGA扩展到62G。

[ORACLE 11G]

必须关闭AMM(自动内存管理)特性才能使用hugepage

设置如下初始化参数:

ALTER SYSTEM SET sga_max_size=6720M SCOPE=SPFILE;

ALTER SYSTEM SET sga_target=0 SCOPE=SPFILE;

ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2048 SCOPE=SPFILE;

ALTER SYSTEM SET memory_target=0 SCOPE=SPFILE;

ALTER SYSTEM SET memory_max_target=0 SCOPE=SPFILE;

其他配置同10G

[ORACLE10G]

配置过程

检查hugepagesize

grep Hugepagesize /proc/meminfo

Hugepagesize: 4096 kB

检查是否已经有分配HugePages

cat /proc/meminfo|grep HugePages_Total

HugePages_Total=0

配置分配hugepage的数量

nr_hugepages的计算公式:nr_hugepages>=sga(mb)/Hugepagesize(mb)

echo "vm.nr_hugepages=50" >> /etc/sysctl.conf

sysctl -p

再次检查hugepage的分配情况

grep HugePages_Total /proc/meminfo

HugePages_Total: 6

如果这里显示的值为6,小于配置的数量50,则需要重启

reboot

Broadcast message from root (pts/1) (Mon Jan 25 09:38:04 2010):

The system is going down for reboot NOW!

重启之后,检查hugepage的分配情况

grep HugePages_Total /proc/meminfo

HugePages_Total: 50

现在确认hugepage已经分配了50个单位(50×4096kb=200mb)

配置oracle用户的memlock

需要 vi /etc/security/limits.conf文件,加入标记为红色的两行

计算公式为:>=HugePages_Total×1024,这里设置了2倍的值,即:2×50×1024=102400

cat /etc/security/limits.conf|grep lock

# - memlock - max locked-in-memory address space (KB)

# - locks - max number of file locks the user can hold

oracle soft memlock 102400

oracle hard memlock 102400

检查memlock情况

切换到oracle用户身份,使用ulimit -l命令检查memlock情况

su - oracle

ora_test@oracle[/home/oracle]> ulimit -l

102400

启动数据库

ora_test@oracle[/home/oracle]> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 25 09:50:33 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to an idle instance.

idle> startup

ORACLE instance started.

Total System Global Area 167772160 bytes

Fixed Size 1218292 bytes

Variable Size 67111180 bytes

Database Buffers 92274688 bytes

Redo Buffers 7168000 bytes

Database mounted.

Database opened.

idle> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

检查是否已经使用了hugepage

ora_test@oracle[/home/oracle]> grep HugePages_Free /proc/meminfo

HugePages_Free: 30

这里显示剩余的hugepage为30,小于HugePages_Total(50),证明oracle已经使用了hugepage
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: