--==============================
--Oracle 10g SGA 的自动化管理
--==============================
/*
在SGA中每一个单独的组件究竟需要多少内存呢?在Oracle 10g 中可以自动化管理大多数SGA参数。
一、什么是SGA
简言之,系统全局区(SGA)仅仅是在Oracle实例启动时的共享内存结构,提供了实例和控制它行为的一些信息。下面
的表中给出了关于SGA一些特定组件的概要,控制内存大小分配的可变参数,以及这些特定的组件将影响Oracle server
哪些范围,并给出了一个简短的描述。从这个简短的列表中我们可以发现,在没有彻底地理解我们的应用程序后台的工
作状况下,以我们能力去推断并给这些组件中每一个设定内存的大小并不总是最优的选择,因为有大量的选项可供选择。
我们并不希望发生浪费可用内存的情况。
二、SGA组件
--组件列表使用原使文档,未翻译
SGA COMPONENT |
SIZE CONTROLED BY |
AREAS OF INFLUENCE |
SIMPLE DESCRIPTONS |
Shared Pool |
SHARED_POOL_SIZE |
Library Cache · Shared SQL areas · Private SQL areas · PL/SQL procedures and packages · Various control structures |
Oracle needs to allocate & deallocate memory as SQL or procedural code is executed based on the individual needs of users' sessions and in accordance to the LRU algorithm. |
· Row cache · Library cache |
Highly accessed memory structures that provide information on object structures to SQL statements being parsed. |
||
Java Pool |
JAVA_POOL_SIZE |
· Run state · Methods · Classes · Session code · Data in JVM |
Memory available for the Java memory manager to use for all things Java. |
Streams Pool |
STREAMS_POOL_SIZE |
· Stream activity |
New to Oracle 10g, memory available for stream processing. |
LOG_BUFFER |
· Redo entries |
Holds changes made to data and allows for the reconstruction of data in the case of failure. |
|
Database Buffer Cache |
DB_2K_CACHE_SIZE DB_4K_CACHE_SIZE DB_8K_CACHE_SIZE DB_16K_CACHE_SIZE DB_32K_CACHE_SIZE DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE |
· Write list · LRU list |
Holds copies of data requested by SQL and reduces requests to disk by having data in memory. You may have many different buffer caches that help segregate on usage patterns. |
Large Pool |
LARGE_POOL_SIZE |
· Shared server · Oracle XA · I/O server processes · Backup & restore |
For large memory allocations. |
你可以通过初始化参数查看并控制SGA的大小 。下面是一个查询并提供了输出结果。 */
select name, value
from v$parameter
where name in ('shared_pool_size', 'java_pool_size', 'streams_pool_size',
'log_buffer', 'db_cache_size', 'db_2k_cache_size', 'db_4k_cache_size',
'db_8k_cache_size', 'db_16k_cache_size', 'db_32k_cache_size',
'db_keep_cache_size', 'db_recycle_cache_size', 'large_pool_size');
NAME VALUE
------------------------- ---------
shared_pool_size 83886080
large_pool_size 8388608
java_pool_size 50331648
streams_pool_size 54525952
db_cache_size 25165824
db_2k_cache_size 0
db_4k_cache_size 0
db_8k_cache_size 0
db_16k_cache_size 0
db_32k_cache_size 0
db_keep_cache_size 0
db_recycle_cache_size 0
log_buffer 262144
13 rows selected.
/*
三、使用Oracle自动化SGA的管理
使用Oracle 自动共享内存优化,通过设定一个新的SGA_TARGET 参数,即仅仅是告诉Oralce实例SGA目标大小是多少,
Oracle将自动管理一系列SGA的组件。Oracle在你所选的组件中将集中管理,动态分配你设定的SGA_TARGET值。即不再
需要人为的为SHARED_POOL_SIZE, JAVA_POOL_SIZE, LARGE_POOL_SIZE, 或DB_CACHE_SIZE 设定值,Oracle将会自动对
其分配合适的大小。一旦你为SGA_TARGET设定了你所需要的值,上述的这些值将呈现为,并且新的参数将被创建并指派
为 __SHARED_POOL_SIZE, __JAVA_POOL_SIZE, LARGE_POOL_SIZE, and __DB_CACHE_SIZE.在这些区域,Oracle将根据系
统和内存所需的工作负荷,基于内部统计信息来分配更多的内存。Oracle将不再管理DB_KEEP_CACHE_SIZE,
DB_RECYCLE_CACHE_SIZE, DBnK_CACHE_SIZE, 或the STREAMS_POOL_SIZE ,但是你依然可以决定这些参数的值。这些
设置仅仅能通过使用SPFILE,Oracle将动态的使得这些行为再次产生。注意,SGA_TARGET值的大小是所有组成SGA组件的
大小之和。当指定一个SGA_TARGET值时,不仅仅是参数控制,应该考虑所有的这些组件将不再被控制。
四、设置Oracle SGA 自动控制功能
1.查看你的系统是否已经使用了SGA自动控制 */
SQL> show parameter sga_target
NAME TYPE VALUE
------------------------------------ ----------- --------
sga_target big integer 0
/*
2.修改SGA自动控制的大小*/
SQL> alter system set sga_target=216m;
System altered.
/*
3.完成切换
当切换到自动共享内存优化后,一个有趣的事情是你的SPFILE 将发生变化,并且有下列参数被定义,不论你的实例名
是什么,注意k101是我的实例名。*/
k101.__db_cache_size=25165824
k101.__java_pool_size=50331648
k101.__large_pool_size=8388608
k101.__shared_pool_size=83886080
/*
除此之外,你可以使用前面使用过的SQL语句去查看SGA的这些设置,现在他们有一个零值。*/
select name, value
from v$parameter
where name in ('shared_pool_size', 'java_pool_size', 'streams_pool_size',
'log_buffer', 'db_cache_size', 'db_2k_cache_size', 'db_4k_cache_size',
'db_8k_cache_size', 'db_16k_cache_size', 'db_32k_cache_size',
'db_keep_cache_size', 'db_recycle_cache_size', 'large_pool_size');
NAME VALUE
------------------------- ---------
shared_pool_size 0
large_pool_size 0
java_pool_size 0
streams_pool_size 0
db_cache_size 0
db_2k_cache_size 0
db_4k_cache_size 0
db_8k_cache_size 0
db_16k_cache_size 0
db_32k_cache_size 0
db_keep_cache_size 0
db_recycle_cache_size 0
log_buffer 262144
13 rows selected.
--当设定了SGA_TARGET 后,可以修改查询语句使用新创建的带有下划线的参数变量作为查询条件。
select name, value
from v$parameter
where name in ('__shared_pool_size', '__java_pool_size',
'streams_pool_size', 'log_buffer', '__db_cache_size', 'db_2k_cache_size',
'db_4k_cache_size', 'db_8k_cache_size', 'db_16k_cache_size',
'db_32k_cache_size', 'db_keep_cache_size', 'db_recycle_cache_size',
'__large_pool_size');
NAME VALUE
------------------------- ---------
__shared_pool_size 67108864
__large_pool_size 4194304
__java_pool_size 8388608
streams_pool_size 0
__db_cache_size 142606336
db_2k_cache_size 0
db_4k_cache_size 0
db_8k_cache_size 0
db_16k_cache_size 0
db_32k_cache_size 0
db_keep_cache_size 0
db_recycle_cache_size 0
log_buffer 262144
/*
切换到自动共享内存优化非常容易,仅仅是设定一个初始化参数。基于负载的情况下,这个管理方式该是确定的,尽管有不同的建议
这些数量应当被如何分配。我更乐于使用他们作为一个单独的组件。没有理由不去规避风险来使用自动共享内存优化。当然,我会先
在测试的环境中来使用它。我也建议在使用自动共享内存优化之前,做一个初始化参数快照然后比较使用动共享内存优化。这样也很
容易切换回去,仅仅是重新设置SGA_TARGET,然后再单独设置各个组件到原来的值即可。 */
五、原文出处:
September 2, 2004
Automate the Sizing of your SGA in Oracle 10g
By James Koopmann
http://www.databasejournal.com/features/oracle/article.php/10893_3400301_1/Automate-the-Sizing-of-your-SGA-in-Oracle-10g.htm
*/
/*
六、更多:*/
Linux (RHEL 5.4)下安装Oracle 10g R2
VmWare6.5.2下安装RHEL 5.4(配置Oracle安装环境)