eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« 海里、船速、节 - 海船速度何谓节 | 文摘首页 | ASKTOM about :Consistenet gets and arraysize »

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

在一些操作系统平台中,我们可以OracleSGA定在内存里,这样可以避免页交换,从而提高Oracle的性能。在AIX下,要把操作系统的v_pinshm参数设置为1,否则即使在Oracle中将LOCK_SGA设置为TRUE也是不管用的。然而仅仅知道这两个参数还远不够用的,必须对AIX内存管理有一定了解。本文要求操作系统是5.3 ML01以上,Oracle9.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建议改大。这个参数默认是80IBM建议可以考虑改成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: Release9.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等参数设置是否合理,以确定是否要调整,这里略过。

设置好之后要重新启动数据库。如果数据库能够顺利启动,那么说明设置没问题。

那么怎样才能看出ORACLESGA是否定在内存里呢?可以通过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

注意上面输出的InusePin,还有CommandCommand对应oracle,说明进程信息是Oracle的。Inuse代表使用中的内存页,Pin代表定在内存中的页数量,每页大小4KB。这两个值如果相差甚远,则说明随SGA没有定在内存里,如果相差很近,则说明定在了内存里。

如果想在操作系统重启后Oracle也能把SGA定在内存里,并且正常工作,就要把本文一开始设置的v_pinshmlru_file_repage等设置为重起操作系统后也是想要的值。例如:

XXIBM:#vmo -p -o v_pinshm=1

Setting v_pinshm to1 innextboot file

Setting v_pinshm to 1

原文: http://space.itpub.net/78033/viewspace-462686

历史上的今天...
    >> 2008-03-09文章:

By eygle on 2009-03-09 23:25 | Comments (10) | Oracle摘 | 2305 |


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com