数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle9i在AIX上的性能调整--内存篇


发布日期:2023年08月26日
 
Oracle9i在AIX上的性能调整--内存篇
内存访问的沖突出现在当进程申请的内存超过系统的物理内存总量时为了处理这种情况系统将程序与数据在内存和硬盘间进行交换

控制内存交换操作(Paging)

大量的内存交换操作会极大地影响系统的性能尤其是在当数据库文件创建在文件系统上时(JFS and JFS)在这种情况下经常访问的数据即在SGA中存在也同样在文件的缓存中存在这种相同的数据在内存中缓存两次的情况会降低内存的使用效率从而使内存频繁进行交换操作造成系统的I/O瓶颈降低整个系统的性能

调整AIX上的文件缓存

在AIX上可以通过vmtune命令中的MINPERM和MAXPERM参数调整系统文件缓存来控制内存交换操作MINPERM和MAXPERM参数的调整应遵照以下的原则

当内存中的文件缓存页在MINPERM以下时内存页交换算法同时交换文件缓存页和程序页(computational pages)

当内存中的文件缓存页在MAXPERM以上时内存页交换算法只交换文件缓存页

当内存中的文件缓存页在MINPERM和MAXPERM之间时内存页交换算法通常只交换文件缓存页但如果文件缓存页的交换率大于程序页时程序页也同样被交换

MINPERM和MAXPERM参数的缺省值

MINPERM = ((number of memory page) )*

MAXPERM = ((number of memory page) )*

可以用以下命令将MINPERM设为%的内存页而MAXPERM设为%的内存页

# vmtune p P

缺省值分别为%和%

在Oracle数据库应用的环境下可以将MINPERM和MAXPERM分别设为%和%甚至更小从而使内存更多地被用于Oracle的SGA而不是系统的文件缓存

配置足够的交换区

如果交换区空间不足会造成系统响应速度变慢甚至挂起交换区的大小取决于系统内存的大小以及应用程序对内存的需求在AIX上可以动态增加交换区也可以用lsps命令察看交换区的使用状况以及用vmstat监视系统内存页交换的操作

通常交换区的大小需要大于系统的实际内存这主要取决于应用程序对内存的需求用户需要监视交换区的使用状况根据需要增加交换区的空间对于运行Oracle Application或Oracle development tools可能需要较大的交换空间

排定内存需求优先级

如果系统的内存不足就需要对进程对内存使用的优先级进行排序将内存优先分配给能获得更好的系统总体性能的进程通常的顺序如下

AIX和Oracle的核心进程

应用程序进程

Oracle的Redo log buffer

PGA和共享池(shared pool)

Oracle的数据缓存(block buffer cache)

例如当你查询Oracle的动态性能表时发现共享池(shared pool)和数据缓存区(block buffer cache)都需要配置更多地内存而你的系统中的空闲内存有限那么将空闲内存分配给共享池比分配给数据缓存区有更好的效果

数据块(Database block)的大小

用户可以选择Oracle数据库中数据块的大小以获得更好的性能在AIX上通过设置DB_BLOCK_SIZE初始化参数选择从KB到KB的数据块缺省值是KB如果数据文件在文件系统上则Oracle数据块的大小应为文件系统数据块KB的整倍数如果数据文件在系统裸设备上则Oracle数据块的大小应为系统数据块B的整倍数

Oracle公司推荐对于在线交易的应用(OLTP)或混合型的应用环境采用KB或KB的数据块对于BI的应用或决策支持系统(DSS)采用更大的数据块KBKB或KB

调整日志归档缓存(Log Archive Buffers)

配置较大的缓存可以提高数据库日志归档的速度但注意不要对整个系统的性能产生影响用户可以将LOG_ARCHIVE_BUFFER_SIZE增加到KB (其缺省值为KB)会提高%的数据库归档操作的性能

调整SGA的大小

对于Oracle SGA来说被系统的内存管理程序换出到交换区上肯定是用户最不愿意见到的情况这就需要系统配置有足够的内存对于大量用户同时在线的应用建议配置较大的SGA区对于SGA影响最大的参数是DB_BLOCK_BUFFERS和SHARED_POOL_SIZE增大这两个参数取决于用户希望分配给SGA内存的大小同时增大这两个参数也会造成CPU的利用率提高

小结

合理的内存配置是Oracle数据库性能调整的重要方面其根本的目标是首先尽量避免系统内存页的交换操作然后尽量将应用程序经常用到的数据缓存在系统的SGA区中

上一篇:工作中遇到的oracle故障分析和处理一例

下一篇:sql走索引,怎么始终有物理读?