2019独角兽企业重金招聘Python工程师标准>>>

上面这是Oracle的体系结构图

先来简单描述一下Oracle的体系结构图

1. Oracle 由实例和数据库组成,也就是图中的1区和2区,

2. 实例是由一个共享内存区SGA(System Global Area)和一系列后台进程组成的,其中SGA被分为共享池(Shared Pool),数据缓冲区(db cache ),日志缓冲区(log buffer)三类,

后台进程包括图中的PMON,SMON,LCKN,RECO,CKPT,DBWR,LGWR,ARCH等系列进程。

3. 数据库是由数据文件,参数文件,日志文件,控制文件,归档日志文件等系列文件组成的,其中归档日志文件最终可能会被转移到新的存储介质中,用备份恢复使用。

4.  PGA(Program Global Area)区,这是一块开辟出来的内存区,和SGA最大的区别在于,PGA不是共享内存,是私有不共享的,S理解为共享的首字母。用户对数据库发起的无论

查询还是更新的任何操作,都是在PGA先预处理,然后接下来进入实例区域,由SGA和系列后台进程共同完成用户发起的请求。

PGA起到的具体的作用,就是前面说的预处理,主要有三点:第一,保存用户的连接信息,比如会话属性,绑定变量等;第二,保存用户权限等重要信息,当用户进程与数据库建立

会话时,系统会将这个用户的相关权限查询出来,然后保存这个会话区内;第三,当发起的指令需要排序时,PGA正是这个排序区,如果在内存中可以放下排序的尺寸,就在内存

PGA中完成,如果放不下,超出的部分就在临时表空间中进行完成排序,也就是在磁盘中排序。

5. 用户的请求发起经历的顺序一般如下:1区-->2区-->3区 , 或者  1区-->2区

先从一条简单的sql查询语句 select name from t where id=1;当发出这条sql指令后,该sql语句从1区先做准备工作,如图

PGA不同于SGA,是仅供当前发起用户使用的私有内存空间,这个区域的具体作用有三点,这里改连接只是完成了两点,即用户连接信息的保存和权限的保存,只有该session不断开连接,下次系统不用再去硬盘中读取数据,而直接从PGA内存中读取。

此外该sql还会立即匹配成一条唯一的HASH值,接下来该sql指令进入2区进行处理,首先敲开SGA区的共享池的大门,共享池的大门打开以后,该sql在里面查询是否什么地方有存储过这个sql指令的身份证(就是那个唯一的HASH值),如果没有,首先查询自己的语句语法是否正确(比如from写成了form),语义是否正确(比如id字段根本不存在)、是否有权限,在这些都没问题的情况下,生成这条语句的唯一的HASH值并存储,接下来开始进行解析,比如select name from t where id=1这个语句,在id列有索引的情况下,是用索引读更高效呢,还是全表扫描更搞笑呢,Oracle要做出选择。

Oracle处理这个事情的一句很简单,就是把两种方式都估算一遍,看哪个代价(COST)更低,就用哪种。假如Oracle认定使用索引代价更低,于是Oracle就选用了索引读的执行计划而放弃了全表扫描方式,接下来这个索引读的执行计划就立即被存储起来,并且和之前的存储的该sql的身份证(唯一HASH值)对应在一起。

接下来,该sql指令就直奔数据缓存区,数据缓存区立即要根据ID列上的索引从t表中查找id值位1的数据,但是所要的数据找不到的话,就把指令传递到Database去查找数据,必须要用索引读的方式查找,如果查到了,就返回给数据缓冲区,如果找不到,就结束了,如图:

转载于:https://my.oschina.net/hcy8888/blog/900203

Oracle浅谈第一回相关推荐

  1. Oracle浅谈第六回

    2019独角兽企业重金招聘Python工程师标准>>> Oracle的实例是由实例和一组数据库文件组成的,实例则是Oracle开辟的内存区和一组后台进程组成的. 体验过Oracle内 ...

  2. shoug oracle,oracle 浅谈索引

    今天第一次参加shoug,听了一些关于sql性能调优的东西,结合自己的认识和理解.整理一下 首先oracle三大范式: 表中每一条记录的每个一个字段值,都是不可再分的最小数据单位(原子不可分解). 每 ...

  3. 浅谈Oracle RAC --集群管理软件GI

    浅谈Oracle RAC --集群管理软件GI基本架构 今天周五,想想可以过周末,心情大好.一周中最喜欢过的就是周五晚上,最不喜欢过的是周日晚上和周一,看来我不是个热爱劳动的人啊.趁着现在心情愉悦,赶 ...

  4. 浅谈oracle树状结构层级查询测试数据

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  5. 单引号oracle如何转义_浅谈oracle中单引号转义

    ORACLE 单引号转义: 在ORACLE中,单引号有两个作用: 1:字符串是由单引号引用 2:转义. 单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始 ...

  6. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  7. 浅谈oracle树状结构层级查询

    oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只要精通数据库那么对于java开发你 ...

  8. 《浅谈Cache Memory》 学习-第一章

    序 近些年,我在阅读一些和处理器相关的论文与书籍,有很多些体会,留下了若干文字.其中还是有一片领域,我一直不愿意书写,这片领域是处理器系统中的Cache Memory.我最后决定能够写下一段文字,不仅 ...

  9. 浅谈达梦数据库与ORACLE数据库差异点及常用SQL总结

    一.通过近一周的达梦DCA课程培训让我对达梦数据库有了大概的认识,因为原来用oracle较多,达梦数据库是对标oracle的,所以上手还算顺利.下面我就个人了解的情况浅谈下两者的区别. 1.在使用体验 ...

最新文章

  1. SpringMVC中使用Interceptor拦截器
  2. 由于开发者通过接口修改了菜单配置_开发者说:Seata 0.7.0 版本,你 get 'Metrics' 技能了吗?...
  3. 2020了,最流行的密码依旧是123456
  4. MyBatis缓存与Apache Ignite的陷阱
  5. 内存超频时序怎么调_电脑内存条专业科普,内存选购、内存品牌、内存安装、内存时序体质、内存超频频率详细讲解...
  6. 2019-07-22
  7. bzoj 2656: [Zjoi2012]数列(sequence)(简单高精度模板2.0)
  8. Python学习路程-常用设计模式学习
  9. linux7 yum安装Mysql5.7
  10. Getway 中predicates: - Query=x 标签作用
  11. Axure元件库web组件库典藏版 (含五大类159小类组件 )
  12. MyBatisPlus之逻辑删除
  13. csgo连接到任意官方服务器失败删除文件,CSGO连接到官方任意服务器失败怎么办...
  14. Python程序员的就业方向及就业薪资,你都了解吗?
  15. gamemaker 更新 runtime 快一点
  16. 如何让60岁老人学会使用智能手机
  17. 银河麒麟V10操作系统修改屏幕分辨率
  18. UniRx_UniTask_学习记录_3.1_Subject
  19. UE4开发PSVR游戏的常见问题
  20. bootstrap表格 行编辑状态_JS表格组件BootstrapTable行内编辑解决方案x-editable

热门文章

  1. 【NOIP2013提高组T3】加分二叉树
  2. CSS伪类的又一个小应用,实现下拉菜单
  3. 使用Nmon监控Linux的系统性能
  4. 121 项目 024 笔记向 内省机制
  5. [整理]国际学术会议
  6. 不使用库函数将字符串转换为数字
  7. 要快乐的度过充满困难的一生——任总给陈珠芳及党委成员的一封信
  8. WebServer起不来,如何查看原因
  9. Android WatchDog正解
  10. Javascript 刷新框架及页面的方法汇总(转)