Oracle服务器

是一个数据库管理系统,它提供了一种全面、开放、集成的方法来管理信息。

Oracle服务器由Oracle数据库Oracle实例组成。

oracle数据库软件和Oracle数据库软件可以分开存储。oracle数据库软件一般存放在oralce服务器的本地硬盘上,而Oracle数据库实例所对应的文件(.ctl、.log、.dbf)一般存放在存储服务器上。

一个常用的冗余结构如下图所示:

体系结构图

存储服务器

实例和数据库的关系

一个Oracle数据库可以对应多个数据库实例。对于数据库实例a、b,和数据库db1,如果有1万个用户连接数据库db1,则其中5千个用户连接到实例a,5千个用户连接到实例b(RAC技术)。

数据库结构

Oracle内存结构

与Oracle相关联的内存结构包括:

  • 系统全局区(SGA):由所有服务器进程后台进程共享

  • 程序全局区(PGA): 专用于每一个服务器进程或后台进程,每一个进程使用一个PGA。

SGA是包含了数据库实例控制信息和数据的内存区。

其中,我们需要着重关心的是共享池(Share Pool)和数据库缓冲区高速缓存(Database buffer cache)。

SGA包含的数据结构:

  • 共享池:缓存可在各个用户之间共享的各个结构;(SQL语句以及对应的执行计划)

  • Streams 池:由Oracle Streams使用;

  • 大型池:这是一个可选的区域,可为某些大型进程(如Oeacle的备份和恢复操作、I/O服务器进程)提供大量内存分配;

  • Java池:用于Java虚拟机(JVM)中特定会话的所有Java代码和数据;

  • 数据库缓冲区高速缓存:缓存从数据库检索的数据块

  • 重做日志缓冲区:高速缓存重做信息(用于实例恢复),直到可以将其写入磁盘中存储的物理重做日志

Oracle进程结构

对于每一个用户进程,oracle服务器都会建立一个与之对应的服务器进程。也就是说当前如果有100个用户与oracle服务器进行连接,那么,oracle将建立100个服务器进程来处理用户连接。

Oracle实例管理

  • 控制文件:记录了各文件存放的位置以及当前的运行状态;

  • 数据文件:存放数据;

  • 重做日志文件:对数据文件所有的修改记录;

  • 系统监视器: 出现故障后,在启动实例时执行崩溃恢复任务,对共享池中存在的内存碎片进行整理。

  • 进程监视器: 用户进程失败时,执行进程清理任务;对sql process进行整理。

  • 数据库写进程:将数据库缓冲区高速缓存中修改后的的数据块写入数据文件;

  • 日志写进程:

    ​ 触发条件:

    • 当某个事务提交时
    • 当重做日志缓冲区中变化的记录超过1MB时
    • 当重做日志缓冲区中所存的记录已超过缓冲区容量的1/3
    • 在DBWR将数据库高速缓冲区中修改过的数据块写到数据文件之前
    • 每3秒钟

    归档进程: 发生日志切换时将重做日志文件复制到归档存储器

    检查点: 通过更新所有数据文件的和控制文件指出新的检查点

Oracle数据库服务器由Oracle数据库和Oracle实例组成,Oracle实例由系统全局区SGA的内存结构和后台进程组成。这些后台进程可以处理运行实例时所涉及到的大量后台任务。

物理数据库结构

SQL解析剖析

读数据

  1. 客户端输入SQL语句

  2. SQL语句通过网络到达数据库实例

  3. server process接收SQL语句

    3.1 判断SQL在Shared Pool中是否存在缓存

    ​ a. 如果有,则在shared pool中找到对应的sql语句以及对应的执行计划,然后再去执行

    ​ b. 执行3.1

    3.1 SQL解析成执行计划,然后才能执行

    解析流程:

    ​ a. 判断SQL语法是否存在问题

    ​ b. 判断SQL对应的表、视图是否存在

    ​ c. 判断用户是否有对应表、视图的权限

    ​ d. 判断如何执行(挑出最优的执行计划作为执行计划,最费时间,耗费CPU,I/O资源)

    ​ e. 选择最优执行方案生成执行计划

    3.1 执行SQL

    SQL Process根据SQL语句对应的执行计划,执行SQL,读取高速缓存,如果缓存中存在数据,则将缓存中的数据返回给用户,否则读取dbf中的数据并将数据存入缓存,然后将数据返回给用户。

    逻辑读:从内存中读取数据

    物理读:从物理磁盘中读取数据

缓存命中率: 命中率低一定有问题,命中率高不一定没问题。

比起缓存命中率,我们更关心每秒物理读。

写数据

sql process 将表读到内存中,然后再对表进行修改。Oracle数据库对dbf文件的修改都会强日志。

数据库写进程(DBWn)负责将修改后的数据写入数据文件dbf。

日志写进程(LGWR)将日志写入日志文件。

(单一职责原则)

软解析和硬解析

软解析: 从高速缓存中获取执行计划

硬解析:对SQL process接收到的SQL进行解析,判断sql语法,查询的表是否存在,是否有权限,判断如何执行(挑出最优的执行计划作为执行计划,最费时间,耗费CPU,I/O资源);

SQL Process执行sql后,会将数据放入高速缓存,再由DBRn和LGER分别写入数据文件dbf和日志文件log。因此,对于用户来说,数据库响应快慢由SQL Process直接影响。哪怕DBRn和LOWR两个进程再繁忙,用户也是感受不到的。

服务器进程和数据库缓冲区高速缓冲

算法 :使用最近最少使用算法管理缓冲区

高速缓冲区状态

  • 空闲或未使用:实例刚启动,缓冲区为空
  • 已连接: SQL Process正在对内存中的数据进行读写操作。其他会话正在等待
  • 脏数据 :缓冲中的数据和磁盘中的数据不一致(对缓冲中的数据进行了修改,但是还没有写入磁盘)。需要先将脏数据写入磁盘才能腾出缓冲区。
  • 干净的 :缓冲区已解除连接。如果没有再次使用当前内容(数据块),现在可以考虑立即腾出缓冲区。此时,不是缓冲区中的数据快已经同磁盘中的数据保持同步,就是缓冲区中包含对数据快的读取一致性快照。

Oracle体系结构概述与SQL解析剖析的更多相关文章

  1. oracle 基础知识(九)----SQL解析

    一,解析过程 二,硬解析,软解析,软软解析 01,硬解析 将SQL语句通过监听器发送到Oracle时, 会触发一个Server process生成,来对该客户进程服务.Server process得到 ...

  2. oracle11g之Oracle体系结构(理论基础知识)

    第二章 oracle的体系结构 一.oracle体系结构概述1.实例和数据库组成完整的Oracle数据库系统数据库:一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等)实例:一组oracl ...

  3. Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述

    Spark SQL模块,主要就是处理跟SQL解析相关的一些内容,说得更通俗点就是怎么把一个SQL语句解析成Dataframe或者说RDD的任务.以Spark 2.4.3为例,Spark SQL这个大模 ...

  4. 学习笔记:oracle学习一:oracle11g体系结构之体系结构概述和逻辑存储结构

    目录 1.oracle 11g体系结构概述 1.1 三个重要概念 1.2 oracle数据库存储结构 2 逻辑存储结构 2.1 数据块(Data Blocks) 2.2 数据区(Extent) 2.3 ...

  5. oracle 内存结构 share pool sql解析的过程

    1.sql解析的过程 oracle首先将SQL文本转化为ASCII字符,然后根据hash函数计算其对应的hash值(hash_value).根据计算出的hash值到library cache中找到对应 ...

  6. oracle 体系结构解析

    三.oracle 体系结构 1.oracle内存由SGA+PGA所构成 2.oracle数据库体系结构数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. oracl ...

  7. [转]ORACLE SQL解析之硬解析和软解析

    http://blog.chinaunix.net/uid-25909722-id-3363789.html 当客户端进程,将SQL语句通过监听器发送到Oracle时, 会触发一个Server pro ...

  8. Oracle 11g 体系结构概述

    一.Oracle 体系结构主要用来分析数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. Oracle 数据库是一个逻辑概念,而不是物理概念上安装了 Oracle 数据库管理系统的服务 ...

  9. Oracle 课程一之Oracle体系结构

    课程目标 •理解ORACLE数据库体系架构—内存结构和进程 •理解SQL在数据库中的运作流程 •理解UNDO&REDO原理 •理解commit原理   1.Oracle数据库概述 •数据库:物 ...

随机推荐

  1. 解决ORA-00257无法删除用户

    今日早晨在客户反馈不能登陆系统了,查看oracle日志.发现如下错误ORA-00257: archiver error. Connect internal only, until freed.该错误是 ...

  2. jinja2快速实现自定义的robotframework的测试报告

    一.背景 RF的结果报告可以方便我们查看每一条用例集.用例的执行结果统计,但是有的项目涉及到一些数据的比对,希望能够直观到看到数据,原生的测试报告就无法满足这个需求了. 原生的报告 项目需求报告格式 ...

  3. 剑指 Offer 54. 二叉搜索树的第k大节点

    题目描述 给定一棵二叉搜索树,请找出其中第k大的节点. 示例1: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4 示例2: 输入: root ...

  4. 用Python实现十大经典排序算法-插入、选择、快速、冒泡、归并等

    本文来用图文的方式详细讲解了Python十大经典排序算法 —— 插入排序.选择排序.快速排序.冒泡排序.归并排序.希尔排序.插入排序.桶排序.基数排序.计数排序算法,想要学习的你们,继续阅读下去吧,如 ...

  5. luogu P3796 【模板】AC自动机(加强版)

    知识点:1.一定要删掉调试信息 2.数组别重名 code: #include <bits/stdc++.h> using namespace std; int n; int len[]; ...

  6. Linux系统小知识

    换Linux系统快半年了,刚开始总是碰到各种各样的问题,虽然斗解决了,由于没有记录,过一段时间就忘了,故在这里记录一下. 选择国内镜像源: Manjaro有一个很好用的命令rankmirrors.ra ...

  7. 浅谈在win server2012 R2操作系统上安装mysql odbc数据源遇到的问题 -九五小庞

    一,服务器系统 Windows Server 2012 R2 二,安装odbc数据源出现的问题 三,步骤二 中的问题,是因为缺少微软常用运行库.需要安装一下运行库 四,安装odbc数据源 安装MySQ ...

  8. Catalina 动态壁纸相关设置

    关闭SIP 重启,在开机时一直按Command+r进入recovery模式. 打开终端,如图所示: 在终端中输入命令,回车: csrutil disable 然后重启 设置动态壁纸 首先需在Dynam ...

  9. 再见了SpringMVC!这个框架有点厉害,甚至干掉了Servlet!

    # 前言 对 Java 开发者来说, Spring 发布 5.0 正式版,而新版 Spring 的一大特色,就是 Reactive Web 方案 Web Flux,这是用来替代 Spring Web ...

  10. Hadoop学习笔记(一):ubuntu虚拟机下的hadoop伪分布式集群搭建

    hadoop百度百科:https://baike.baidu.com/item/Hadoop/3526507?fr=aladdin hadoop官网:http://hadoop.apache.org/ ...