分类: Oracle
2010-12-16 14:41:54
1. Oracle系统架构图
1)Oracle包含两部分Instance和Database
2)SGA是一内存块。
3)SGA的五个部分:Share Pool;Java Pool;Large Pool;Database Buffer Cache;Redo Log Buffer.
4)Oracle server包括Instance和Oracle Dababase
5)Instance组成:内存(SGA)和后台进程(PMON、SMON、DBWR等)
6)Connection(链接)和Session(会话):Connection是Oracle客户端和后台服务器 (service process)建立的一个TCP链接;Connection完成后开始会话。
7)Oracle Database:主要包括三种核心文件类型:Data files(存储数据);Controller files (控制文件);Redo Log files(重做日志,记录数据库的修改)。Archived Log files (归档日志文件)
8)Oracle’s memory:SGA和PGA。一个实例就有一个SGA,实例启动时分配,实例一部分;一个service process(处理Connection)启动时就启动一个PGA。
9)查看SGA:SQL> show sga
2. memory structures
1)SGA在Oracle9i以后可自动调节。SGA_MAX_SIZE设置SGA最大值,递增单位granules,当SGA小于128M是granules为4M,大于128M时为16M。
SQL> select component,granule_size from v$sga_dynamic_components;
2)shared Pool(共享池)
共享池存储解析好的SQL语句,包括Library Cache和Data Dictionary Cache(数据 字典) Library Cache:存储经过解析编译以后的SQL或PL/SQL语句,大小由共享池大小决定。Data Dictionary Cache:存储数据库信息,数据库字典,提高访问数据库速度
3)Data Buffer Cache:包含来自于数据文件的数据和即将写到数据文件的数据,提高访问速度,性能。体积最大。查询数据是先在Data Buffer Cache查找数据,如存在直接返回用户(Cache hit),如没有记录则从磁盘数据文件读取(Cache miss)。存储的是数据块(DB_BLOCK_SIZE参数决定)
4)Redo Log Buffer:存储对数据的修改,主要用于恢复数据。LOG_BUFFER
5)Large Pool和Java Pool
6)PGA一个server process对应一个PGA,一个实例可以对应对多个PGA,对应一个SGA
3.Process Structure
1)三种进程:User Process;Server Process;Background Process
User Process:客户端的进程。Started at the time a database user requests connection to the Oracle server.
Server Process:主要负责和客户端连接的进程。
Background Process:后台进程。
必须存在:DBWn,PMON,CKPT,LGWR,SMON.可选进程,根据配置不同,启动不同进程。
DBWn:将Database Buffer Cache中要写入磁盘的数据写入磁盘。
LRWR:将Redo Log Buffer中的数据写入磁盘。
SMON:系统监视已经一些系统清理及恢复工作(清理临时空间以及临时段、接合空闲空间、执行实例恢复)
PMON:进程监控
CKPT: 检查点进程(更新控制文件,数据文件头(当log switch时))
ARCn:归档进程(非主要进程)
2)Oracle的逻辑结构。一个Oracle Server包含一个database,一个database可以有多个Tablespace,一个Tablespace可以有多个Segment,一个Segment可以有多个Extent,一个Extent是一组连续Blocks。Blocks是Oracle最小基本单位,一个Blocks对OS多个Blocks。
附:extents 存在的理由
extents的特性:
1:一个extent由相连的多个blocks组成,多个extents组成一个segment,
2:oracle在为segment分配空间时,是以extent为单位
因此extents带来的好处:
1、空间分配、释放效率将会提升
oracle建议一个segment的extents数量一般不要超过1024,而对于big table可能包含上千万个block,如果没有extent,那么oracle就要分配上千万个block,而有了extent,只要分配上千个extents就行。extent表示大量的blocks效率很高,extent并不列出所有的block,而是列出起始两个block(因为extent是联系的,起始block就能定位一个extent),oracle分配空间的时间与extents的数目呈比例,与blocks数目没有很大关系。同理,在释放空间时,extent一样可以提高操作的效率。
对字典管理的表空间,extent作用很明显,如果没有extent,数据字典中必须记录各个block,如果big table占用上千万个block,那么数据字典也会大量占用,假设数据字典会占用上百万个block,分配或释放这些big table时,还要对这些上百万block的数据字典插入会删除,岂不会额外添加很多工作,
2、全表扫描
在进行全表扫描时,利用extent包含联系blocks的特性,可以一次读出多个字段,这样就能大大减少物理IO,极大提高扫描的效率。
every thing has two side
extent带来的负面作用:
表空间碎片:
如果没有extent,oracle在给segment分配空间时以block为单位,而block总是一样大的,典型的8k,16k,这时每个block都可以得到利用。有了extent,extent就是最小的分配单元,而extent的大小并不总是相等的,假设开始的的三个segment都很小,extent也不大,例如10个blocks,如果第二个的segment释放后,在中间的那个10block就空闲出来,但是如果以后segment都要求分配至少20个block的extent时,那么这10blocks的空闲空间就得不到利用,在极端情况下,表空间由1000个10block的空闲,但无法分配20block的extent。exp/imp能消除碎片,本地管理的表空间对连续的碎片有自动处理的能力,但对不连续的碎片无能为力。