这是数据库参数:
SQL> select * from v$sgastat;
POOL NAME BYTES
----------- -------------------------- ----------
fixed_sga 730200
buffer_cache 33554432
log_buffer 787456
shared pool errors 40048
shared pool subheap 102840
shared pool KGK heap 7000
shared pool KQR L PO 1462312
shared pool KQR M PO 548568
shared pool KQR S SO 5120
shared pool sessions 459680
shared pool sql area 44003392
POOL NAME BYTES
----------- -------------------------- ----------
shared pool 1M buffer 2098176
shared pool KGLS heap 2327608
shared pool parameters 4256
shared pool free memory 29512112
shared pool PL/SQL DIANA 748832
shared pool FileOpenBlock 1191104
shared pool PL/SQL MPCODE 346864
shared pool library cache 11524536
shared pool miscellaneous 6909032
shared pool MTTR advisory 18160
shared pool PLS non-lib hp 3112
POOL NAME BYTES
----------- -------------------------- ----------
shared pool XDB Schema Cac 5313768
shared pool joxs heap init 4240
shared pool kgl simulator 1559976
shared pool sim memory hea 133200
shared pool table definiti 6752
shared pool trigger defini 14672
shared pool trigger inform 1640
shared pool trigger source 488
shared pool type object de 101200
shared pool Checkpoint queue 513280
shared pool VIRTUAL CIRCUITS 349120
POOL NAME BYTES
----------- -------------------------- ----------
shared pool dictionary cache 3221760
shared pool KSXR receive buffers 1034000
shared pool FileIdentificatonBlock 349824
shared pool message pool freequeue 940944
shared pool KSXR pending messages que 853952
shared pool event statistics per sess 1728560
shared pool fixed allocation callback 384
large pool free memory 33336256
large pool session heap 234240
java pool free memory 117440512
已选择43行。
找到的文章:
如何动态扩大oracle 9i SGA区中的内存空间?
Oracle 9i 具有动态SGA的功能,用操作系统命令查看系统内存时,发现系统中还有空闲内存. 但为什么有时使用oracle 9i 的
sql > alter system set db_cache_size=xxxxM
命令时数据库会报告错 -- 没有足够的内存. 这是由操作系统引起的吗?
不是,原因在于此时SGA区中没有多余空闲内存。尽管系统中有空闲内存,但未分配给SGA 区。
在oracle 9i 中 动态SGA的概念是无需经过 关闭实例(instance), 修改初始化参数文件和重启实例这一过程,就可动态调整 buffer cache 和 share pool 的大小。 另外,动态SGA允许在实例运行时设置,下次启动时将有多少物理内存分配给SGA 这一数据库参数。 SGA 可用最大物理内存是由SGA_MAX_SIZE 参数来决定的。
在启动实例时,大小为SGA_MAX_SIZE 的内存就分配给了SGA,SGA成员(buffer cache, share pool等)根据参数值也会获得相应的内存。
实例启动后SGA的各成员所用内存之和可以小于SGA_MAX_SIZE。 数据库管理员通过使用 alter system 命令来调整SGA成员间的内存分配。 当SGA中有足够多的空闲内存时,增大share pool 或 buffer cache 才能完成,否则会报内存不足。
另外Share pool 和 buffer cache 的尺寸也可动态缩小。 当实例已启动,SGA已达到 SGA_MAX_SIZE值,可通过先减少某一成员的内存,再增加另一成员的内存来完成。
SGA成员间是相互独立的,在成员间分配内存时,其和一定不能大于 SGA_MAX_SIZE , 并且db_cache_size 参数不能等于0。
在OLAP与OLTP混合型的应用环境中,利用动态SGA的功能,可以根据不同时刻应用的优先级,来动态的调整buffer cache 和 share pool 的尺寸,以提高系统的性能 :
a. 当OLTP 应用 优先级高时,缩小 buffer cache 的值,增大 share pool 的值;
b. 当 OLAP 应用优先级高时,缩小 share pool 的值,增大buffer cache 的值。
例如:
1. 增大buffer cache 尺寸
SQL> show parameter db_cache_size; 显示当前 buffer chache 的大小
NAME TYPE VALUE
-------------------------- ----------- -----------------
db_cache_size big integer 4194304
SQL> alter system set db_cache_size=8M; 增大buffer cache 到8MB。
System altered.
SQL> show parameter db_cache_size;
NAME TYPE VALUE
-------------------------- ----------- -----------------
db_cache_size big integer 8388608
2. 调整参数 SGA_MAX_SIZE (需重启实例)
SQL> alter system set SGA_MAX_SIZE= 1000M scope=spfile;
System altered.
3. 增大shared_pool_size 尺寸
假设,初始参数值为:
SGA_MAX_SIZE=128M
DB_CACHE_SIZE=88M
SHARED_POOL_SIZE=32M
SQL>ALTER SYSTEM SET SHARED_POOL_SIZE=64M; 设置share_pool 的内存为64M
Error ORA-04033, insufficient memory
SQL>ALTER SYSTEM SET DB_CACHE_SIZE=56M; 减少buffer cache 的大小
SQL>ALTER SYSTEM SET SHARED_POOL_SIZE=64M;
Error ORA-04033, insufficient memory
需要等 buffer cache 释放完,才可扩大 share pool 的大小
SQL> select * from v$buffer_pool ; 检查内存释放是否完成。
SQL>ALTER SYSTEM SET SHARED_POOL_SIZE=64M;
System altered.
自改配置:
/etc/system文件,shminfo_shmmax=1.5G
shared_pool_size=200M
OPEN_CURSORS=200
CURSOR_SPACE_FOR_TIME=TRUE
SESSION_CACHED_CURSORS=100
CURSOR_SHARING= SIMILAR
db_cache_advice=READY
db_cache_size=600M
large_pool_size=32M
java_pool_size=60M
log_buffer=3M
sql_trace=FALSE
timed_statistics=true
db_file_multiblock_read_count=16
dbwr_io_slaves=0
db_writer_processes=2
sort_area_size=2M
sort_area_retained_size=0.5M
undo_management= AUTO
undo_retention = 7200