shmmax 并不是shared memory 的最大SIZE
它指的是 单个 shared memory segment 的最大SIZE
所以,并不是说它限制了SGA的大小。换句话说,SGA的大小可以超过shmmax 的设置
如 shmmax 设为 1G
SGA可以设为 2.5G
只是造成这个instance的SGA被切成了N 块,每块都不大于 1G.
我的某个系统shmmax设为 4G
SGA为5G
SGA分成3 块attach 到 Oracle process上
[php]
ps -ef|grep pmon
1234 ……
pmap 1234
……
0000000380000000 4096K read/write/exec/shared [ ism shmid=0xcc ]
0000040000000000 2621440K read/write/exec/shared [ ism shmid=0x5 ]
00000400C0000000 2625536K read/write/exec/shared [ ism shmid=0x6 ]
……
当然,由于SGA被切开了,可能导致性能会有所下降(具体不清楚有多大影响)
所以,正常情况最好shmmax 的设置要大于设计的SGA值。
PGA影响到的是*area_size
最主要是sort_area_size 和 hash_area_size
所以根据你的排序操作的多少/大小,hash_join的多少/大小来决定,当然,同时需要考虑可用内存的情况了。
PGA是可以动态调节的。
尽可以先设一个值,试运行一段,再根据v$pgastat和v$system_event里的direct path read/write sorts (disk/memory)等值再来做进一步调整。(呵呵,statspack可以帮到你很多)
一般地:
在线联机事务处理:sga=80%,pga=20%
数据仓库:sga=20%,pga=80%
数据库系统中,应保证有足够大的内存。在UNIX系统中,如果系统的物理内存小于1GB,可将交换区的大小设为内存的4倍,否则,可设为内存的2倍,交换区要放在磁盘速度最快的硬盘上。Oracle 的SGA区大小直接关系到数据库操作的性能,一般来说,SGA区的大小可设为系统可用内存的55%到57%,SGA区过多占用系统内存反而会降低性能。在应用系统运行中,应定期监测系统的内存使用情况,对关键应用进行分析,根据应用适时调整SGA区各部分的大小。Oracle9i可在不重新启动数据库的情况下修改SGA区的参数,实时改变SGA区的大小。
阅读(1413) | 评论(1) | 转发(0) |