适用于:
Oracle Server - Enterprise Edition - Version: 9.2.0.1 and later [Release: 9.2 and later ]
z*OBSOLETE: Bull Escala RL AIX (64-bit)
IBM AIX on POWER Systems (64-bit)
z*OBSOLETE: IBM AIX 4.3 Based Systems (64-bit)
IBM AIX on POWER Systems (32-bit)
IBM AIX Based Systems (64-bit)IBM AIX Based Systems (32-bit)Bull Escala RL AIX (64-bit)IBM AIX 4.3 Based Systems (64-bit)
Oracle databases running on AIX based systems.
症状
数据库的运行时间长了数据库性能继续变得越来越慢。你也许注意到数据库运行得越久分页空间的运用总量继续增加,然而,当重启系统,或者关掉重启数据库之后数据库性能回到正常状态。
随着对系统关键锁存器比如“缓冲区”和“共享池”锁存器争用的增加就会出现减慢。
原因
很可能你没有调整AIX的虚拟机管理程序。AIX的虚拟机管理程序的系统默认值通常不适用于关系数据库的默认。AIX的虚拟机管理程序的默认值将逐步上升到用于缓冲文件I/O物理存储器的80%。由于oracle已经将缓冲区文件I/O放到系统全局区,同样的数据没有必要缓存两次,留下了20%的物理内存用来运行oracle数据库和其他程序。这些主要的原因导致物理内存的浪费,因此导致数据库的性能受到很大的影响。
本文中以下信息是不适用的,或影响可能非常的小,如果你用一个或更多的下面的数据文件存储类型,因为AIX不会将缓存文件I/O缓存到这些类型:
逻辑容量,用于并发I/O(CIO)或直接I/O(DIO)选项的文件系统如果数据库在存档模式,和写入文件系统而没有用CIO或DIO的文件,那么这篇文章依然适用,即使位于逻辑容量或用于CIO或DIO文件系统的数据文件。
如果你的恢复管理器备份将被写入一个没有用CIO或DIO的文件系统中,那么这篇文章依然有用,即使这个数据文件位于一个逻辑容量或一个用于CIO或DIO的文件系统。
没有“内嵌”对oracle database 9ir2(9.2.0)或更低版本的支持,虽然你可以强迫使用企业的CIO(JFS2)或CIO(JFS)和文件系统上的选择。
请注意,调整AIX VMM已经超出了Oracle的支持范围。你不应该创建一个SR关于信息的在这篇文章里面,因为Oracle辅助人员不熟悉关于AIX VMM的调整。如果你必须得到帮助关于检查,设置,或调整AIX VMM这些超出本文范围的问题,你必须联系你的AIX系统管理员或IBM对更多帮助的支持。
解决方案
核对你的系统是否用的是AIX VMM的未设置的默认值,运行下面的命令:
command:
/usr/sbin/vmo -a
如果你没有/usr/sbin/vmo文件你应该请你的AIX系统管理员加载AIX文件集"bos.perf.tune",vmo的命令将列出所有的VMM参数和他们的当前值。你要审查的参数:
MINPERM%, MAXPERM%, 和 MAXCLIENT%
下面是一个例子vmo的报告:
# vmo –a
memory_frames = 1572864
pinnable_frames = 1431781
maxfree = 1088
minfree = 960
minperm% = 20
minperm = 294356
maxperm% = 80
maxperm = 1177427
strict_maxperm = 0
maxpin% = 80
maxpin = 1258292
maxclient% = 80
lrubucket = 131072
…
未设置的系统默认值是MINPERM%=20%, MAXPERM%=80%, MAXCLIENT%=80%,这些参数没有“正确”的值,只有广泛的测试,才能得到最佳的值,对于在相同系统中不同的数据库最优值可能不一样,所以记住当调整VMM和选择值应该就你将运行于系统的数据库来看,使用下列值作为一个起始点:
MINPERM% = 10-15%, MAXPERM% = 20-30%, MAXCLIENT% = MAXPERM%
得到一个片段多少物理内存被AIX的文件I/O缓冲,运行下面的命令:
/usr/bin/svmon -G
Svmon命令成为同一个vmo属于的AIX文件集“bos.perf.tune”。最后一行的svmon输出应该是“in use”,把"in use / pers" 和"in use / clnt"的值相加。现在用"memory / size"的值除以相加后的值。对于数据库性能好的,一般这个值不会超过30%(0.30)。
下面是一个关于svmon输出的例子:
# svmon -G
size inuse free pin virtual
memory 131072 129432 1640 11704 50091
pg space 262144 100913
work pers clnt lpage
pin 11704 0 0 0
in use 47062 76126 6244 0
在这个例子,(in use / pers) 76126加上(in use / clnt) 6244等于82370。82370除以(memory/size)131072等于0.628或大约63%的物理系统被AIX文件I/O缓冲。这表明,AIX VMM需要进行调整以便有更多的物理内存给oracle和其他程序用,少的物理内存用于文件I/O的缓存。
记住,虽然AIX把这些内存和oracle进程联系起来(因为oracle需要文件I/O),所有的内存使用的文件I/O缓冲是完全分配和AIX控制,没有oracle,如果你需要帮忙检查,设置,或调整AIX VMM,联系你的系统管理员或IBM的支持。你可能也想复习AIX“性能管理指南”
更新:在这篇文章开始写之后,IBM介绍了新的VMM参数,这个参数也对这个错误非常有帮助。这个参数是。。。
lru_file_repage
缺省值是“1”,但是建议设置为“0”。这个设置暗示VMM只窃取文件页面(从AIX文件缓存),把计算页(从SGA)单独留下
这个新的w lru_file_repage参数只对AIX 5.2 ML04或更高版本和AIX 5.3 ML01或更高版本。
注解:如果你用的是不支持lru_file_repage参数的旧AIX系统,那么你必须用上面的“legacy”设置。如果你用的是一个新的支持lru_file_repage参数的AIX系统,那么你应该用下面修正后的设置代替。
作为记录在IBM“VMM TuningTip”参考下面,如果你用的是AIX 5.2 ML 04或者更高版本,IBM修正推荐下列设置:
strict_maxperm=0 (default)
strict_maxclient=1 (default)
lru_file_repage=0
maxperm%=90
minperm%=5 (physical RAM <32 GB)
minperm%=10 (physical RAM >32 GB but <64 GB)
minperm%=20 (physical RAM >64 GB)
v_pinshm=1
maxpin%=percent_of_real_memory
(IBM不推荐减小maxpin%的值。)