[Oracle] 物理结构介绍

Posted Jan丶X

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Oracle] 物理结构介绍相关的知识,希望对你有一定的参考价值。

  1. 原理结构图



各部分解释:

PGA: 私有内存区,仅供当前发起用户使用。

三个作用

  1. 用户登录后的 session信息会保存在PGA。
  2. 执行排序,如果内存不够,oracle会在临时表空间中完成
  3. 保存用户 权限信息

SGA: 包含共享池,数据缓冲区,日志缓冲区以及一些相关的进程。

DATABASE: 数据最终存放的地方,其中一块区域是日志存放区。数据和记录日志又由DBWR和LGWR来写入数据库和重做日志组,待一个重做日志组满了之后切换到下一个,等到循环了一次之后,原来排序为第一组的日志会被ARCH进程写入归档日志。


2. 结构深入



2.1 从一条查询sql语句解析结构

    假设有一条sql: select * from user where user_id='20'

  1. Sql被解析后, (1区)PGA 保存其登陆和权限信息。这一点必须注意,如果保存了该信息,下次调用sql的时候就不需要重新校验,直接玩PGA里取就行了。
  2. 随后该sql会匹配一条 唯一的HASH值并到达 2区的共享池,共享池判断此HASH值是否之前已经存在,如果存在就直接执行就OK了;如果不存在,就要检查sql的 语法、语义等进行验证并解析。解析什么呢?就是要把select * from user where user_id='20' 这条语句,在user_id存在索引的情况下,oracle对最优COST做出选择( 到底是索引扫描还是全表扫描),作出选择后oracle会把改执行计划和之前的那条HASH值放在一起。
  3. 带着条件,sql下一步会到数据缓冲区中查找是否存在user_id为20的记录。如果缓冲区有则马上返回结果;如果无,则要到 3区(database)中查找,无论是否找到都要返回结果。

2.2 从一条更新sql语句解析结构

    假设有一条sql:update user set user_name='萧红'

  1. 如上步骤1.2 。
  2. 把数据的操作记录写到 重做日志
  3. 写入数据库中,持久化数据,把数据库user表的user_name 字段都改为萧红。

3. 提交与回滚



  1. 当用户提交commit的时候,数据并不会马上刷进数据库。数据何时会被刷入数据库?

    这与CKPT进程有关,当缓冲区的数据量达到一定的程度时,CKPT进程会被触发,数据此时才批量刷入数据库。当刷入数据库前断电了怎么办?REDU机制重新执行日志恢复数据。

      2. ROLLBACK 执行的是UNDO

本文只作为总结用,如有错误请更正。

以上是关于[Oracle] 物理结构介绍的主要内容,如果未能解决你的问题,请参考以下文章

oracle基础(基本介绍)

Oracle中数据库、数据文件、表、表空间、用户之间是啥关系(转)

Oracle数据库基本操作 —— Oracle数据库体系结构介绍DDLDCLDML

赵强老师史上最详细的PostgreSQL体系架构介绍

oracle数据库的物理存储结构有那些,它们各自的作用?

Oracle存储(物理+逻辑)结构