oracle数据库:内存结构_笔记11
4.2.7流池
流池(stream pool)是一个新的SGA结构,从Oracle Database 10g开始才增加的。流(Stream)本身就是一个新的数据库特性,Oracle Database 9i Release 2及以上版本中才有。它设计为一个数据库共享/复制工具,这是Oracle在数据复制方面发展的方向。
流池(或者如果没有配置流池,则是共享池中至多10%的空间)会用于缓存流进程在数据库间移动或复制数据时使用的队列消息。这里并不是使用持久的基于磁盘的队列,流使用的是内存中的队列。如果这些队列满了,最终还是会写出到磁盘。如果使用内存队列的Oracle实例由于某种原因失败了,比如说因为实例错误(软件瘫痪)、掉电或其他原因,就会从重做日志重建这些内存中的队列。
因此,流池只对使用了流数据库特性的系统是重要的。在这些环境中,必须设置流池,以避免因为这个特性从共享池“窃取”10%的空间。
4.2.8自动SGA内存管理
与管理PGA内存有两种方法一样,从Oracle Database 10g开始,管理SGA内存也有两种方法:手动管理和自动管理。手动管理需要设置所有必要的池和缓存参数,自动管理则只需设置少数几个内存参数和一个SGA_TARGET参数。通过设置SGA_TARGET参数,实例就能设置各个SGA组件的大小以及调整它们的大小。
注意 在Oracle Database 9i及以前版本中,只能用手动SGA内存管理,不存在参数SGA_TARGET,而且参数SGA_MAX_SIZE只是一个上限,而不是动态目标。
在Oracle Database 10g中,与内存相关的参数可以归为两类。
.自动调优的SGA参数:目前这些参数包括db_cache_size、shared_pool_size、large_pool_size和java_pool_size。
.手动SGA参数:这些参数包括log_buffer、streams_pool、db_nk_cache_size、db_keep_cache_size和db_recycle_cache_size。
在Oracle Database 10g及更高版本中,任何时候你都能查询V$SGAINFO,来查看SGA的哪些组件的大小可以调整。
sys@ORCL>select * from v$sgainfo; NAME ------------------------------------------------------------------------------------------------ BYTES RESIZEABL ---------- --------- Fixed SGA Size 2227504 No Redo Buffers 4952064 No Buffer Cache Size 109051904 Yes Shared Pool Size 142606336 Yes Large Pool Size 4194304 Yes Java Pool Size 4194304 Yes Streams Pool Size 0 Yes Shared IO Pool Size 0 Yes Granule Size 4194304 No Maximum SGA Size 267227136 No Startup overhead in Shared Pool 74902944 No Free SGA Memory Available 0 12 rows selected.
采用自动SGA内存管理时,确定自动调整组件大小的主要参数是SGA_TARGET,这个参数可以在数据库启动并运行时动态调整,最大可以达到SGA_MAX_SIZE参数设置的值,默认等于SGA_TARGET,所以如果想增加SGA_TARGET,就必须在启动数据库实例之前先把SGA_MAX_SIZE设置得大一些。数据库会使用SGA_TARGET值,再减去其他手动设置组件的大小(如db_keep_cache_size、db_recycle_cache_size等),并使用计算得到的内存量来设置默认缓冲区池、共享池、大池和Java池的大小。在运行时,实例会根据需要动态地对这4个内存区分配和撤销内存。如果共享池内存用光了,实例不会向用户返回一个ORA-04031“Unable to allocate N bytes of shared memory”(无法分配N字节的共享内存)错误,而是会把缓冲区缓存缩小几MB(一个颗粒的大小),再相应地增加共享池的大小。
4.2.9自动内存管理
从Oracle Database 11g Release 1开始,Oracle数据库还提供了自动内存管理,DBA现在只需设置一个内存参数,memory_target。这个memory_target表示SGA和PGA分配能达到的总内存量。数据库会根据工作负载历史自动确定适当的SGA大小和适当的PGA大小。
与自动SGA内存管理一样,DBA可以设置SGA_TARGET和PGA_AGGREGATE_TARGET,为各个内存区的大小设定下界,或者可以把SGA中各个池的值设置为该下界,来设定各个池的下界。如果使用了一个存储参数文件(SPFILE),数据库会记住池以及SGA和PGA的最优设置。
sys@ORCL>create pfile from spfile; File created. sys@ORCL>! [oracle@vcenteroracle ~]$ pwd /home/oracle [oracle@vcenteroracle ~]$ cd $ORACLE_HOME [oracle@vcenteroracle db_1]$ cd dbs [oracle@vcenteroracle dbs]$ ls hc_orcl.dat hc_vcenter.dat initorcl.ora lkORCL lkVCENTER orapwshop snapcf_shop.f spfileshop.ora hc_shop.dat init.ora initorcl.ora.bak lkSHOP orapworcl orapwvcenter spfileorcl.ora spfilevcenter.ora [oracle@vcenteroracle dbs]$ ls -al total 9604 drwxr-xr-x 2 oracle oinstall 4096 Sep 27 07:08 . drwxr-xr-x 75 oracle oinstall 4096 Jun 21 14:46 .. -rw-rw---- 1 oracle oinstall 1544 Sep 27 07:08 hc_orcl.dat -rw-rw---- 1 oracle oinstall 1544 Aug 8 19:17 hc_shop.dat -rw-rw---- 1 oracle oinstall 1544 Jul 11 06:11 hc_vcenter.dat -rw-r--r-- 1 oracle oinstall 2851 May 15 2009 init.ora -rw-r--r-- 1 oracle oinstall 1018 Sep 29 06:50 initorcl.ora -rw-r--r-- 1 oracle oinstall 971 Sep 27 06:05 initorcl.ora.bak -rw-r----- 1 oracle oinstall 24 Jun 20 11:48 lkORCL -rw-r----- 1 oracle oinstall 24 Jun 20 15:23 lkSHOP -rw-r----- 1 oracle oinstall 24 Dec 18 2012 lkVCENTER -rw-r----- 1 oracle oinstall 1536 Jun 20 12:54 orapworcl -rw-r----- 1 oracle oinstall 1536 Jun 21 14:31 orapwshop -rw-r----- 1 oracle oinstall 1536 Dec 18 2012 orapwvcenter -rw-r----- 1 oracle oinstall 9748480 Jul 11 13:01 snapcf_shop.f -rw-r----- 1 oracle oinstall 3584 Sep 27 20:00 spfileorcl.ora -rw-r----- 1 oracle oinstall 3584 Jul 18 00:00 spfileshop.ora -rw-r----- 1 oracle oinstall 3584 Jul 11 06:11 spfilevcenter.ora [oracle@vcenteroracle dbs]$ more initorcl.ora orcl.__db_cache_size=92274688 orcl.__java_pool_size=4194304 orcl.__large_pool_size=4194304 orcl.__oracle_base='/home/oracle/app/oracle'#ORACLE_BASE set from environment orcl.__pga_aggregate_target=268435456 orcl.__sga_target=268435456 orcl.__shared_io_pool_size=0 orcl.__shared_pool_size=142606336 orcl.__streams_pool_size=0 *.audit_file_dest='/home/oracle/app/oracle/admin/orcl/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/home/oracle/app/oracle/oradata/orcl/control01.ctl','/home/oracle/app/oracle/fast_recovery_area/orcl/control02.ctl' *.db_16k_cache_size=16777216 *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.db_recovery_file_dest='/home/oracle/app/oracle/fast_recovery_area' *.db_recovery_file_dest_size=5218762752 *.diagnostic_dest='/home/oracle/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.log_buffer=1 *.open_cursors=300 *.pga_aggregate_target=256m *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=268435456 *.undo_tablespace='UNDOTBS1'
http://www.52ij.com/jishu/5171.htmloracle数据库:内存结构_笔记10
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5172.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
