当前位置: 首页 > article >正文

Oracle筑基篇-体系结构概览

1、体系结构一览

今天梳理Oracle的整体的体系结构,后面再详细梳理其中重要的那些结构。

图1 Oracle体系机构思维导图

2、组件作用概述

Oracle有两大块组成,一大块是 Oralce实例(oracle instance)一大块是 Oralce数据库(oracle database),Oracle数据库是实实在在存储在硬盘上的三类文件:数据文件、日志文件和控制文件。

数据库启动起来以后,首先在内存划出一块空间来给Oracle使用,这个块内存叫Oracle内存,接着会启动一堆进程,我们把内存和进程统称为Oracle实例,只有数据库启动起来以后才有实例的产生,oracle数据库关闭后就没有oracle实例了。

Oracle各个部分介绍如表1所示:

表1 Oracle体系结构表

组成

介绍

SGA

数据库缓冲区高速缓存

数据库缓冲区高速缓存,也称为缓冲区高速缓存,是用于存储从数据文件读取的数据块副本的内存区域。缓冲区是缓冲区管理器用来暂时缓存当前或最近使用的数据块的主内存地址。所有同时都连接到一个数据库实例的用户,以共享方式访问缓冲区高速缓存。

重做日志缓冲区

重做日志缓冲区是 SGA 中的一个循环式缓冲区,用来存储对数据库所做更改的重做条目。重做条目包含用于重建(或重做)由 DML 或 DDL 操作对数据库所做更改所需的信息。数据库恢复将重做条目应用到数据文件,以重建丢失的更改。

共享池

共享池缓存各种类型的程序数据。例如,共享池存储已解析的 SQL、

PL/SQL 代码、 系统参数、和数据字典信息。几乎数据库中发生的每个操作 都涉及到共享池。例如,如果用户执行一个 SQL 语句,则 Oracle 数据库会访问共享池。

大池

可选的内存区域,提供比共享池更大的内存分配 , 避免性能开销并更好地满足大型内存请求。

用于共享服务器的 UGA、Oracle XA 接口、并行执行中的消息缓冲区、RMAN I/O 缓冲区等。

比共享池更适合分配较大内存。

Java池

存储 Java 虚拟机 (JVM) 内的会话特定 Java 代码和数据的内存区。存储 Java 类的共享部分以及每个会话的 Java 状态数据。专用于 Java 会话空间的对象和数据。

可通过 Java 池顾问提供统计信息并调整池的大小,当 statistics_level 设置为 TYPICAL或更高时,Java 池顾问在内部会被打开。这些统计信息在顾问被关闭时会被重置。

流池

流池用于存储缓冲的队列消息,并为 Oracle 流的捕获进程和应用进程提供 内存。流池专门由 Oracle 流使用。

如果没有专门配置流池,则其大小从零开始。池池的大小由 Oracle 流按需动态增长。

固定SGA

固定 SGA 是内部的内务管理区域。

1.有关数据库及其实例状态的一般信息,后台进程需要访问这些信息

2.进程间通讯的信息,如有关的信息

PGA

SQL 工作区

工作区是在 PGA 中为内存密集型操作分配的私有内存区。例如,排序操作 使用排序区来对一组行进行排序。同样,哈希联接操作将其左侧数据为输入,并使用哈希区来创建一个哈希表,而位图合并操作则使用位图合并区来合并从扫描多个位图索引检索到的数据。

会话内存

专用服务器私有的,共享服务器共享共享的

私有 SQL 区

私有 SQL 区保存了有关某个已解析的 SQL 语句的信息,和其他特定于会话的信息。当服务器进程执行 SQL 或 PL/SQL 代码时,该过程使用其私有SQL 区域,来存储绑定变量值、 查询执行状态信息、和查询执行工作区。

进程结构

客户端进程

这些进程被创建和维护,主要用来运行应用程序代码或 Oracle 工具。 多数环境中都由单独的计算机来运行客户端进程。不属于Oracle。

后台进程

与数据库实例同时启动,并执行一些维护任务,如 执行实例恢复、清理进程、将重做缓冲区写入磁盘等。

服务端进程

基于客户端请求,执行相应的工作。例如,这些进程解析 SQL 查询、将查询放入共享池、为查询 创建并执行查询计划、和将数据从数据库缓冲区高速缓存(或 从磁盘)读入缓冲区。

从属进程

为后台进程或服务器进程执行额外任务。

控制文件

每个 Oracle 数据库都有一个控制文件。 控制文件包含指定数据库物理结构的元数据,包括数据库名称,及数据库文件的位置和名称等。

数据文件

每个 Oracle 数据库都有一个或多个物理数据文件,其中包含数据库的所有数据。数据库的逻辑数据结构,如表和索引,在物理上存储在 这些数据文件中。

重做日志文件

每个数据库都有一个联机重做日志,它包含两个或更多联机重做日志文件。 一个联机重做日志由许多重做项组成(也称为重做记录), 以记录对数据所做的所有更改。

3、RAC + ADG架构图

Oracle实例和数据库一般是1:1的关系,但也有些多个实例对应一个数据库,生产中也较常用,这种架构再Oracle中叫做RAC,开发中称作集群,目的是为了提高数据库的高可用性以及吞吐能力,一台数据库宕机之后另一台还能接着工作。

比如下面这个19cRAC+ADG是我工作场景用的比较多的架构,双主双备,相当于4个实例对应两个数据库。

一个用户要访问数据库,他连接到的是实例,通过实例来访问数据库,比如有100个用户要访问数据库,RAC架构(左边的两个数据库实例)通过负载均衡算法(轮询、随机、负载等)实现50个用户访问实例一,50个用户访问实例二,从理论上讲数据库并发提升了2倍,这就是Oracle的RAC技术,当然也有4个实例对应一个数据库。

ADG(右边的两个数据库实例)通过应用右边的日志和归档实现数据同步从而实现数据库的容灾,也可以用来提供读取服务,甚至再主库双实例都宕机的情况下实现主备切换,不影响对外提供服务.

图2 Oracle19c RAC + ADG架构

todo

Oracle实例作为Oracle工作的主要地方,其结构值得我们研究。其中最重要的是shared pool和buffer cache两个缓存区,作为缓存对象的地方,是OOM内存泄露的重灾区。这篇文章不详细介绍,后续看看能不能图解内存结构。


http://www.kler.cn/a/443515.html

相关文章:

  • mysql 死锁案例及简略分析
  • 【深度学习进阶】基于CNN的猫狗图片分类项目
  • 【国产NI替代】基于STM32+FPGA的8振动+4温度(16bits)数据采集板卡解决方案,支持全国产
  • 【机器学习】工业 4.0 下机器学习如何驱动智能制造升级
  • 多线程访问FFmpegFrameGrabber.start方法阻塞问题
  • 【AimRT】现代机器人通信中间件 AimRT
  • 【开源库 | minizip】Linux(Ubuntu18.04)下,minizip的编译、交叉编译
  • 使用CSS把背景图片铺满屏幕
  • Windows Server 2019 配置PHP环境(图文教程)
  • RFdiffusion get_torsions函数解读
  • NGINX的安装和配置(Linux环境)
  • 文心快码代码助手智能体:智能体时代委托自主完成任务
  • 使用ollama编写大模型客户端
  • mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题
  • 如何使用 Python 处理数据库事务?
  • spring boot密码加密方式
  • opencascade配置笔记
  • QNX通过pfctl工具查看socket通信状态
  • Serverless集成和扩展性概述
  • POD 存储、PV、PVC
  • 基于wifi的火焰报警系统设计(论文+源码)
  • vue框架的搭建
  • Web工作原理:请求与响应
  • request.setAttribute()和session.setAttribute()的区别
  • 统一运维管理平台:全面管理AWS和阿里云
  • 「MDN web 入门」学习笔记