Chinaunix首页 | 论坛 | 博客
  • 博客访问: 52895
  • 博文数量: 17
  • 博客积分: 1466
  • 博客等级: 上尉
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-06 17:05
文章分类

全部博文(17)

文章存档

2011年(1)

2010年(16)

分类: 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能消除碎片,本地管理的表空间对连续的碎片有自动处理的能力,但对不连续的碎片无能为力。

阅读(703) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:oracle data guard 学习(转帖)

给主人留下些什么吧!~~