IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Oracle物理体系结构 -> 正文阅读

[大数据]Oracle物理体系结构

一、Oracle物理体系结构

Oracle的体系结构如图

1、Oracle由实例和数据库组成,用两个虚框标记出来,上半部的直角方框为实例instance,下半部的圆角方框为数据库Database。

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(Program?Global?Area)正是这个排序区,如果在内在中可以放下排序的尺寸,就在内在PGA区内完成,如果放不下,超出的部分就在临时表空间中完成排序,也就是在磁盘中完成排序。

5、在图中标识了三块区域(注意看虚线框的左下角标注),分别是1区圆形虚线框,2区直角方形虚线框,3区圆角方形虚线框。用户的请求发起经历的顺序一般如下:

1区-->2区-->3区? ?或? ?1区-->2区。

物理读:查询计划生成好以后,如果缓存缺少所需要的数据,让缓存再次去读硬盘。如果内存里没有缓存数据或执行计划(SQL指令改变执行计划不能重用,需要重新计算执行计划),那么SQL指令就要去硬盘读取这些数据,这时候就是物理读,硬盘速度跟内存速度不在一个数量级别,所以物理读是比较慢的。

逻辑读:SQLSERVER去内存里面的缓存取数据或执行计划(执行计划可以重用),所以逻辑读是比较快的。

?二、SQL查询指令多次执行的时间差异:

1、用户首次执行SQL指令时,该指令从磁盘中获取用户转接信息和相关权限,并保存在PGA内存里。当用户再次执行该指令时,由于SESSION之前末被断开重连,转接信息和相关权限信息就可以在PGA内存中直接获取,避免了物理读。

2、首次执行该SQL指令结束后,SGA内存的共享池里已经保存了该SQL唯一指令HASH值,并保留了语法语意检查及执行计划等相关解析动作的劳动成果,当再次执行该SQL时,由于该SQL指令的HASH值和共享池里保存的相匹配了,所以之前的硬解析动作就无须再做,不仅跳过了相关语法语意检查,对于该选取哪种执行计划也无须考虑,直接拿来使用就行。

3、首次执行该SQL指令时,数据一般不丰SGA的数据缓存区里(除非被别的SQL读入内存了),只能从磁盘中获取,不可避免产生了物理读,但是由于获取后会保存在数据缓冲区时,再次执行就直接从数据缓冲区里获取了,完全避免了物理读,效率当然高得多。

三、SQL更新指令

? ? ? ? 更新指令除了执行查询指令的三个步骤外,还会启用DBWR进程,完成更新的数据从内在中刷入到磁盘,将磁盘中的值更新为新值。因为磁盘才是真正存储数据的地方,否则一断电,数据在内在中,那就灰飞烟灭了。DBWR进程写入——如下图

? ? ? ? 日志缓冲区保存了数据库相关操作的日志,记录了这个动作,然后由LGWR后台进程将其从日志缓冲区这个内在区写进磁盘的日志文件里。目的简单,为了便于将来出现异常情况时,可以根据日志文件中记录的动作,再继续执行一遍,从而保护数据的安全。如下图

? ? ? ? 实例中的一个重要后台进程:CKPT。什么时候将数据缓存区数据写到磁盘的动作正是进程CKPT来触发的,CKPT触发DBWR写出。可以通过设置某参数调整来控制CKPT的触发时间,比如万一出现数据库崩溃,希望Oracle的SMON最多用多长时间来做Instance?Recovery,该参数就是FAST?START?MTTR?TARGET,通过调整该参数,Oracle会调配CKPT在适当的时候去调用DBWR......?当然,这个参数也并非越小越好,太小的数值会导致Oracle性能降低。

四、Oracle最核心、最重要、最有用的八个进程(举例,进程不止这些

?分别是PMON、SMON、LCKn、RECO、CKPT、DBWR、LGWR、ARCH,都有一个共同的特点,都是Oracle的后台进程,分别位于体系结构图如何位置

????????PMON的含义为Processes?Monitor,是进程监视器。如果你在执行某些更新语句,末提交时进程崩溃了,这时PMON会自动回滚该操作,无须你人工去执行Rollback命令。除此之外还可以干预后台进程,比如RECO导演失败了,此时PMON会重启RECO进程,如果遇到LGWR进程失败这样的严重问题,PMON会做出中止实例这个激烈的动作,用于防止数据错乱。

? ? ? ? SMON的含义为System?Monitor,理解为系统监视器,与PMON不同的是,SMON关注是系统级的操作而非单个进程,重点工作在于Intance?Recovery,除此之外还有清理临时表空间、清朝回滚表空间、合并空闲空间,等等。

? ? ? ? LCKn仅使用于RAC数据库,最多可有10个进程中(LCK0,LCK1,...,LCK9),用于实例间的封锁。

? ? ? ? RECO用于分布式数据库的恢复,全称是Distributed?Database?Recovery,适用于两阶段提交的应用场景。这里简单描述一下,比如我们面临多个数据库A、B、C,某个应用跨越三个数据库,在发起的过程中需要A、B、C库都提交成功,事务才会成功,只要有一个失败,就必须全部回滚。这和LCK一样,适用的场景比较特殊。

? ? ? ? CKPT进程在前面已经介绍过了,由Oracle的FAST_START_MTTR_TARGET参数控制,用于触发DBWR从数据缓冲区中写出数据到磁盘。CKPT执行越频繁,DBWR越频繁,DBWR写出越频繁越不能显示指特性,性能就越低,但是数据库异常恢复的时候会越迅速。

????????DBWR是Oracle最核心的进程之一了,负责反数据从数据缓存区写到磁盘里,该进程和CKPT相辅相成,因为是CKPT促成DBWR去写的。不过DBWR也和LGWR密切相关,因为DBWR想将数据缓存区数据写到磁盘的时候,必须通知LGWR先完成日志缓冲区写到磁盘的动作后,方可开工。

? ? ? ? LGWR目的简单,就是把日志缓存区的数据从内在写到磁盘的REDO文件里,完成数据库创建、更新数据等操作过程的记录。这个REDO的记录非同小可,可以用来做数据库的异常恢复,只要保护好了这些REDO文件和后续对应的归档文件,从理论上来说,数据文件被删除光了,还是可以让数据库根据这些日志记录,把所有的在数据库中曾经发生的事情全部重做一遍,从而保证了数据库的安全。正因为日志文件对数据库如此重要,LGWR也成了和DBWR一样核心的数据库进程。

? ? ? ? ARCH的作用是在LGWR写日志写到需要覆盖重写的时候,触发ARCH进程去转移日志文件,复制出去形成归档日志文件,以免日志丢失。

参考《收获不止Oracle》

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章           查看所有文章
加:2022-07-03 10:53:18  更:2022-07-03 10:57:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:47:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码