zoukankan      html  css  js  c++  java
  • 【Oracle】物理体系结构

    

    一、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》,本文仅仅作为总结用,如有错误请更正。

  • 相关阅读:
    php 接收表单 方法的区别
    php上传图片---初级版
    php 验证格式的函数总结
    行为类模式分析
    深入理解java虚拟机
    JVM生产环境参数实例及分析
    redis 排序(转)
    八种常用的排序算法(转)
    CAS原理分析
    Redis使用总结之与Memcached异同(转)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5063995.html
Copyright © 2011-2022 走看看