Oracle物理体系结构


Oracle物理体系结构

用户请求:1-2-3 or 1-2

                                 (图一)

oracle组成

实例:SGA、后台进程

 

数据库:数据文件、参数文件、日志文件、控制文件、归档日志文件。其中归档日志文件最终可能会被转移到其他新的存储介质中。用于恢复备份使用。

 

PGA:私有不共享内存,用户对数据库发起的无论查询还是更新的任何操作都是在PGA预处理,然后才进入实例区域,

有SGA和后台进程共同完成用户请求。

PGA作用:保存用户的连接连接信息,会话属性,连接变量等。保存用户权限等重要信息,当用户进程与数据库建立会话时,系统会将用户权限查出并保存在此会话中。当发起的指令需要排序时,内存PGA区为排序区。如果内存放不下超出的部分就在临时表空间进行 排序,也就是在磁盘中排序。

 

Oracle执行sql过程

Selectname from t where id = 29

用户提交一条语句给服务器进程,此时在1区(PGA)中完成用户连接信息的保存和权限的保存。(会话不断开下次不需要从硬盘中读取)。并且服务器进程利用此sql语句生成一个Hash值。

随后sql指令进入2区(SGA),在共享池中查看有无此Hash值,如果没有:语法检查、语义检查等。检查通过会存储此Hash值。接着对语句中涉及的表,索引,视图等对象进行解析。生成执行计划存储起来和此前的Hash进行对应。

此时进入数据缓存区,缓存中没有则按照之前分析的执行计划从数据库文件中查找。

 

Oracle物理体系结构

两次执行同一条sql比较

原因:1、用户首次执行时需要从磁盘中读取用户连接信息、权限信息并保存在PGA ,第二次执行时 只需从PGA中读取,避免了物理读。

2、首次执行后,SGA中保存了sql指令唯一Hash值,并保留了语法语义检查及执行计划等相关解析结果。第二次执行时只要Hash值匹配则忽略解析和生成执行计划。

3、首次执行时数据从磁盘中获取,第二次执行时数据在数据缓存区中。

 

Updatet set age = 20 where id =19;

更新语句的执行工程:

Oracle物理体系结构

前三条和查询语句基本一样。

数据在数据缓存区被修改后 由DBWR进程写入数据文件。

Oracle物理体系结构

日志缓冲区保存了数据库相关操作的日志。由LGWR进程写入日志文件。日志文件写满时将会被覆盖,覆盖之前ARCH会将日志备份出去,这些归档文件可用作以后恢复数据。

 

Oracle物理体系结构

凡事有记录:数据、日志。先日志后数据。

Oracle物理体系结构

后台进程介绍

PMON:进程监视器(关注单个进程)

SMON:系统监视器(关注系同级别的)

LCKn:用于集群

RECO:用于分布式

CKPT:用于触发DBWR,(触发频繁不能达到批量写入的效果)

DBWR:把数据从数据缓冲区写数据库数据文件

LGWR:把日志缓冲区中的数据写到磁盘redo文件

ARCH:日志文件快被重写时转移日志文件

 

回滚介绍:以update语句为例

Oracle物理体系结构

REDO:重新实现你的操作  ex:日志恢复

UNDO:撤销/回退你的操作 ex:rollback