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

AIX5.3中将Oracle SGA PIN在内存中的步骤

2015-12-19 11:57 369 查看
原文链接:http://blog.itpub.net/78033/viewspace-462686

在一些操作系统平台中,我们可以将Oracle的SGA定在内存里,这样可以避免页交换,从而提高Oracle的性能。在AIX下,要把操作系统的v_pinshm参数设置为1,否则即使在Oracle中将LOCK_SGA设置为TRUE也是不管用的。然而仅仅知道这两个参数还远不够用的,必须对AIX内存管理有一定了解。本文要求操作系统是5.3 ML01以上,Oracle在9.2.0.4以上。
首先我们来检查一下操作系统版本:
XXIBM:# oslevel -r
5300-07
可见操作系统版本满足我们的要求。如果这个输出是5300-00,那么就先要给操作系统打补丁。Oracle很多的问题都和操作系统有紧密的联系。
接下来看看有多少内存。查看内存的方法有很多,随便用哪一种吧。
XXIBM:# bootinfo -r
64749568
上面的输出显示操作系统有64G内存。
再用rmss -p来看看当前可用内存是否与实际内存一致。因为有的时候可能出于测试的考虑,我们可能用rmss把内存模拟到某个大小(当然只能向小模拟)。
XXIBM:# rmss -p
Simulated memory size is 63231.9375 Mb.
如果上面的输出小于实际的内存,就要考虑用rmss -r来将内存恢复到实际大小。
接下来让我们检查几个有关内存的参数设置。AIX5.3的默认内存参数
首先检查lru_file_repage的设置。这是5.3新增的参数,这个参数默认为1,但IBM推荐在ML01之后,将这个参数设置为0。
XXIBM:# vmo -L lru_file_repage
NAME CUR DEF BOOT MIN MAX UNIT TYPE DEPENDENCIES
--------------------------------------------------------------------
lru_file_repage 1 1 1 0 1 boolean D
在上面的输出中,CUR代表参数的当前值,DEF代表参数默认值,BOOT代表下次启动值。
用下面的命令把lru_file_repage设置为0。下面的设置只是在当前生效,不改变重启的设置。
XXIBM:# vmo -o lru_file_repage=0
Setting lru_file_repage to 0
接下来检查v_pinshm,应该改成1。
XXIBM:# vmo -L v_pinshm
NAME CUR DEF BOOT MIN MAX UNIT TYPE DEPENDENCIES
--------------------------------------------------------------------
v_pinshm 1 0 0 0 1 boolean D
XXIBM:# vmo -o v_pinshm=1
Setting v_pinshm to 1
检查一下minperm%、maxperm%等参数。在使用lru_file_repage之前,我们习惯把maxperm%设置很小,如20%。但从5.3开始,IBM建议改大。这个参数默认是80,IBM建议可以考虑改成90。至于minperm%,默认是20。如果内存在32G-64G,可以改成10,小于32G,改成5,大于64G,保持默认20。
XXIBM:# vmo -o minperm%=10
Setting minperm% to 10
XXIBM:# vmo -o maxperm%=90
Setting maxperm% to 90
操作系统的参数调整好了之后,剩下的工作就简单了。登录到Oracle,查看一下LOCK_SGA参数的设置:
XXIBM:# su - oracle
$ sqlplus /nolog
SQL*Plus: Release 9.2.0.6.0 - Production on Fri Sep 19 08:40:10 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> show parameter lock_sga
NAME TYPE VALUE
------------------------------------ -----------
lock_sga boolean FALSE
这个参数当前为FALSE。要想把SGA定在内存中,要把这个参数改成TRUE。
SQL> alter system set lock_sga=true scope=spfile;
System altered.
接下来计算一下当前SGA的大小:
SQL> select sum(value)/1024/1024 from v$sga;
SUM(VALUE)/1024/1024
--------------------
35941.0215
这个大小一般不要超过物理内存的60%。太小也不好,利用不充分。从上面的输出来看,当前的SGA大小基本合适。当然可进一步查看DB_CACHE_SIZE等参数设置是否合理,以确定是否要调整,这里略过。
设置好之后要重新启动数据库。如果数据库能够顺利启动,那么说明设置没问题。
那么怎样才能看出ORACLE的SGA是否定在内存里呢?可以通过svmon命令来查看。这个命令要用超级用户才可以运行。
$ su -
root's Password:
XXIBM:# svmon -P -t 100|grep -p Pid|head
--------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB 225546 oracle 9313207 9270407 2232 9308982 Y N N
--------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB
119692 oracle 9312614 9270438 2232 9308978 Y N N
--------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB
注意上面输出的Inuse和Pin,还有Command。Command对应oracle,说明进程信息是Oracle的。Inuse代表使用中的内存页,Pin代表定在内存中的页数量,每页大小4KB。这两个值如果相差甚远,则说明随SGA没有定在内存里,如果相差很近,则说明定在了内存里。
如果想在操作系统重启后Oracle也能把SGA定在内存里,并且正常工作,就要把本文一开始设置的v_pinshm、lru_file_repage等设置为重起操作系统后也是想要的值。例如:
XXIBM:# vmo -p -o v_pinshm=1
Setting v_pinshm to 1 in nextboot file
Setting v_pinshm to 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: