Oracle体系结构就是围绕这张图展开的,要想深入了解oracle,就必须把这张图搞明白。
如图:一、基本组成:Oracle server:一般情况下是一个instance和一个database组成1个instance只能对应一个数据库。
特殊:1个数据库可以有多个instance(rac)一台服务器上同时可装多套版本的数据库软件,每个数据库软件可建多个数据库,但是每个数据库只对应一个instance,也可以理解成每个数据库只有一个SID 。
利用DBCA建出的每个库都是相对独立的,在同一服务器上如果创建多库必须将环境变量的参数文件做区分,并且在对实例切换时需如下操作:connect 用户名/密码@实例的服务名Oracle Instance:是由内存(SGA)和后台进程(backupground Process)组成通过instance来访问database一个实例只能打开一个数据库Oracle database:数据文件(Data files):数据文件永远存储数据库的数据,包括数据字典、用户数据(表、索引、簇)、undo数据等重做日志(Redo log):“先记后写”重做日志用于记录数据库的变化,当进行例程恢复或介质恢复时需要使用重做日志执行DDL或DML操作时,事物变化会被写到重做日志缓冲区,而在特定的时刻LGWR会将重做日志缓冲区中的内容写入重做日志。
控制文件(Control file)控制文件用于记录和维护数据库的物理结构,并且每个Oracle数据库至少要包含一个控制文件。
归档日志(Archive log):是非活动(Inactive)重做日志的备份。
口令文件(Password file):用于验证特权用户(具有SYSDBA、SYSOPER权限的特殊数据库用户)参数文件(Parameter file):用于定义启动实例所需要的初始化参数,包括文本参数文件(pfile)和服务器参数文件(spfile)(二进制文件放入裸设备,引入spfile)User and Server process :在执行sql语句时产生的进程,每一个连接,oracle server创建一个session,产生一个server process,在client发起一个connection时就产生了一个user process。
体系结构可以分为,database结构和instance结构如下结构:二、instance结构详解1、内存结构主要包括sga(system global area)和pga(program global area)Pga是当程序起来时,给server process用(排序,数据挖掘等order by)SGA(System Global Area)由一组内存结构组成,它是由所有用户进程共享的一块内存区域。
启动例程时,Oracle自动分配SGA,关闭例程时,oracle自动释放SGA所占用的内存空间。
Sga包括,share pool,db buffer cache,redo log buffer,large pool,java pool。
在9i 中我们都知道在管理Oracle中使用动态SGA时,Granule(是连续虚拟内存分配的单位)的大小是和SGA的大小有关系。
SGA 分配的最小单元为一个granule.Oracle SGA的大小总是granule的整数倍,即分配是以整数个granule来分配的。
9i 中的规则如下:linux/unixSGA <=128 M granule 4MSGA >128M granule 16MWindowsSGA <=128 M granule 4MSGA >128M granule 8M10g 中的分配规则为linux/unixSGA <=1G granule 4MSGA >1G granule 16MWindowsSGA <=1G granule 4MSGA >1G granule 8MSQL> select component, granule_size from v$sga_dynamic_components; COMPONENT GRANULE_SIZE---------------------------------------------------------------- ------------shared pool 4194304large pool 4194304java pool 4194304streams pool 4194304DEFAULT buffer cache 4194304KEEP buffer cache 4194304RECYCLE buffer cache 4194304DEFAULT 2K buffer cache 4194304DEFAULT 4K buffer cache 4194304DEFAULT 8K buffer cache 4194304DEFAULT 16K buffer cache 4194304DEFAULT 32K buffer cache 4194304ASM Buffer Cache 419430413 rows selected.Elapsed: 00:00:00.06SQL>SQL> desc v$sga_dynamic_components;Name Type--------------------------------------------------------COMPONENT VARCHAR2(64)CURRENT_SIZE NUMBERMIN_SIZE NUMBERMAX_SIZE NUMBERUSER_SPECIFIED_SIZE NUMBEROPER_COUNT NUMBERLAST_OPER_TYPE VARCHAR2(13)LAST_OPER_MODE VARCHAR2(9)LAST_OPER_TIME DATEGRANULE_SIZE NUMBERSQL>SQL> select * from v$sga_dynamic_components;COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPECIFIED_SIZE OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE-------------------- ------------ ---------- ---------- ------------------- ---------- ------------- --------- --------- ------------shared pool 92274688 92274688 0 0 0STATIC 4194304large pool 4194304 4194304 0 0 0STATIC 4194304java pool 4194304 4194304 0 0 0STATIC 4194304streams pool 0 0 0 0 0STATIC 4194304DEFAULT buffer cache 62914560 62914560 0 0 0 INITIALIZING 4194304KEEP buffer cache 0 0 0 0 0STATIC 4194304RECYCLE buffer cache 0 0 0 0 0STATIC 4194304DEFAULT 2K buffer ca 0 0 0 0 0STATIC 4194304DEFAULT 4K buffer ca 0 0 0 0 0STATIC 4194304DEFAULT 8K buffer ca 0 0 0 0 0STATIC 4194304DEFAULT 16K buffer c 0 0 0 0 0STATIC 4194304DEFAULT 32K buffer c 0 0 0 0 0STATIC 4194304ASM Buffer Cache 0 0 0 0 0STATIC 419430413 rows selected.Buffer Cache Size数据缓存,调高数据命中率可以提高性能。
按数据块存放。
db_cache_sizedb_keep_cache_sizedb_recycle_cache_sizealter system set db_cache_size = xxx MSQL> show parameter adviceNAME_COL_PLUS_SHOW_PARAM TYPE VALUE_COL_PLUS_SHOW_PARA M--------------------------------------------------------------------------------db_cache_advice string ONSQL>SQL> select * from v$db_cache_advice;SQL>Large Pool Size rman 和一些并行处理时候会用到。
Java Pool Size java存储过程的支持Streams Pool SizeOracle 10g 中sga_target自动调整只是针对这四项:data buffer cache, large_pool, shared_pool, java_pool1)03:41:30 SQL> show sga2)3)Total System Global Area 285212672 bytes4)Fixed Size 1218992 bytes5)Variable Size 71304784 bytes6)Database Buffers 209715200 bytes7)Redo Buffers 2973696 bytes8)04:45:40 SQL>9)04:46:18 SQL> select name,bytes/(1024*1024) ,resizeable from v$sgainfo;10)11)NAME BYTES/(1024*1024) RES12)-------------------------------- ----------------- ---13)Fixed SGA Size 1.16252136 No14)Redo Buffers 2.8359375 No15)Buffer Cache Size 200 Yes16)Shared Pool Size 60 Yes17)Large Pool Size 4 Yes18)Java Pool Size 4 Yes19)Streams Pool Size 0 Yes20)Granule Size 4 No ;区组大小为4M21)Maximum SGA Size 272 No22)Startup overhead in Shared Pool 36 No23)Free SGA Memory Available 024)04:49:34 SQL> select sum(bytes)/(1024*1024) size_in_mb from v$sgastat;25)26)SIZE_IN_MB27)----------28)276.00307129)30)04:48:19 SQL> select * from v$sgastat;31)32)POOL NAME BYTES33)------------ -------------------------- ----------34)shared pool KKJ WRK LAT 30035)shared pool kfkhsh_kfdsg 205236)shared pool event statistics ptr arra 68037)shared pool KGKP randnum 4000038)large pool PX msg pool 20620839)large pool free memory 398809640)java pool free memory 419430441)42)602 rows selected.43)04:50:37 SQL> show parameter sga;44)45)NAME TYPE VALUE46)------------------------------------ ----------- ------------------------------47)lock_sga boolean FALSE48)pre_page_sga boolean FALSE49)sga_max_size big integer 272M50)sga_target big integer 272MSGA动态尺寸总计不能超过初始化参数SGA_MAX_SIZE的值。