首页 > 数据库 >图文深入理解Oracle体系结构之内存篇

图文深入理解Oracle体系结构之内存篇

时间:2024-09-17 10:50:33浏览次数:12  
标签:PGA 缓冲区 SGA 内存 Oracle 图文 进程 体系结构

  1. 前面在Oracle体系结构概述篇中总体介绍了Oracle的体系结构,接下来分别详细深入介绍其组成部分的各个模块的功能与作用,本篇先深入内存部分。
    一.先上图:Oracle DB 内存结构图

    在这里插入图片描述
    Oracle DB 实例的两大基本内存结构(也有的说三大:SGA/PGA/UGA,但是UGA基本包含于SGA(共享服务器模式)或者PGA(占用服务器模式),本人更倾向于两大结构,即SGA和PGA):
    a.系统全局区 (SGA):加载Oracle DB 实例的数据和控制信息。所有服务器进程和后台进程共享 SGA。SGA在DB启动时候即完成分配。
    b.程序全局区 (PGA):包含单个服务器进程或后台进程的数据及控制信息的内存区域。PGA 是在服务器进程或后台进程启动时分配的私有内存。服务器进程对 PGA 的访问是独占式的。每个服务器进程和后台进程都具有自己的专属的 PGA。PGA 分成两个主要区: 堆栈空间和 用户全局区 (UGA);
    二.系统全局区 (SGA)又细分为以下部分:
    a 共享池:用于缓存可在用户间共享的各种数据结构;
    b.数据库缓冲区高速缓存:用于缓存从数据库中读取到的数据块;
    c.保持缓冲区池:专用的数据库缓冲区高速缓存,用于长时间在内存中保留的数据块(热数据).;
    d.RECYCLE 缓冲区池:专用的数据库缓冲区高速缓存,用于从内存中快速回收或删除数据块;
    e. nK 缓冲区高速缓存:多种专用的数据库缓冲区高速缓存,用于存放不同规格大小的数据块的数据;
    f.重做日志缓冲区:redo信息(用于实例恢复)在写入磁盘中存储的物理重做日志文件前,缓存在此;
    g. 大型池:用于为某些大型进程(例如:备份和恢复操作)和I/O 服务器进程提供大型内存分配。大型池为可选内存区域。
    h.Java 池:用于存储 Java 虚拟机 (JVM) 中的 Java 代码和数据;
    i. 流池:供 Oracle Streams 用来存储捕获和应用操作所需的信息;
    二(1).共享池(Shared Pool)的结构:
    在这里插入图片描述
    a.数据字典(data dictionary):是数据库表和视图的集合,其中包含有关数据库、数据库结构及其用户的信息。在 SQL 语句语法分析期间,Oracle DB 会频繁访问数据字典。因此在内存中指定了两个特殊的位置来存放字典数据,所有用户进程都共享这两个高速缓存以便访问数据字典信息:
    b.数据字典高速缓存(data dictionary cache):也称为行高速缓存,因为它以行的形式存放数据。
    c. 库高速缓存(library cache):以缓冲区的形式存放数据(缓冲区用于存放完整的数据块)。
    d. 共享 SQL 区域(含 PGA 中保留的专用 SQL 区域):用于存放数据库运行的 SQL 语句,包括 SQL 语句的语法分析树和执行计划。Oracle DB 可识别出不同用户执行了相同 SQL 语句,多次运行的 SQL 语句将会使用同一个共享 SQL 区域来节省内存。
    e. 固定区域:是启动 SGA 所需要使用的内存区,其大小远小于其它 SGA 内存区块。
    二(2)数据库缓冲区高速缓存(Database Buffer Cache)的结构:
    在这里插入图片描述
    用于存放从数据文件读取的数据块,当前所有用户都可以共享访问该区的缓存数据。高速缓存中的缓冲区是由一个复杂 LRU(Least Recently Used)列表算法管理,确保最近使用的块都留在内存中,从而最大限度地减少磁盘访问。
    二(3) KEEP 缓冲区池是用于延长缓冲区在内存中的保留时间,比使用 LRU 时的正常保留时间长。
    二(4) RECYCLE 缓冲区池有更快的缓冲区刷新速度,缩短缓存数据保留时间。
    二(5) 重做日志缓冲区(Redo Log Buffer):
    在这里插入图片描述
    重做日志缓冲区是 SGA 中的循环缓冲区,存放有关对数据库所做的更改信息,包含 DML 和 DDL 等操
    作所做的更改的相关信息。后台的日志写进程会适时地将此缓冲区的数据保存写入到磁盘上的活动重做日志文件(或文件组)中。
    二(6)大型池(Large Pool)
    在这里插入图片描述
    大型池可以更好地满足对大型内存的请求,为以下对象提供大型内
    存分配:
    a. 共享服务进程和 Oracle 接口(在事务处理与多个数据库交互时使用)的会话内存;
    b. I/O 服务进程;
    c. Oracle DB 备份和还原操作;
    d.并行查询操作;
    二(7)Java 池(Java Pool)流池(Streams Pool)
    在这里插入图片描述
    a.Java 池用于存储 JVM 中所有会话的 Java 代码和数据;
    b.流池 以独占方式使用流池内存来执行以下操作:
    – 存储缓冲的队列消息
    – 为 Oracle Streams 进程提供内存,池大小会根据需要动态增长。
    三。程序全局区 (PGA)的结构:
    在这里插入图片描述
    程序全局区 (PGA) 是一个专用内存区,包含服务器进程的数据及控制信息。每个服务器进程都有独立的 PGA。PGA 只能由相应的服务器进程访问,开发人员的代码不能访问 PGA。
    - 每个 PGA 都包含堆栈空间。
    - 在专用服务器环境中,连接到数据库实例的每个用户都有单独的服务器进程。
    -对于这种类型的连接,PGA 包含一个名为用户全局区 (UGA) 的内存分区。
    UGA 包括以下部分:
    ① 游标区,用于存储游标的运行时信息
    ② 用户会话数据存储区,用于存储有关会话的控制信息
    ③ SQL 工作区,用于处理 SQL 语句,其中包括:
    • 排序区,用于对数据排序的函数,如 ORDER BY 和 GROUP BY
    • 散列区,用于执行表的散列联接
    • 位图创建区,用于创建数据仓库常用的位图索引
    • 位图合并区,用于解析位图索引计划的执行
    - 在共享服务器环境中,多个外接的用户共享服务器进程。在这种模式下,UGA
    将移入 SGA(共享池,也可配置到大型池),则 PGA 仅包含堆栈空间。
    四。Oracle内存结构的相关维护操作:
    四(1)针对SGA和PGA的操作:
    查看 SGA 设置:
    • SELECT * FROM v$sga;
    • SHOW PARAMETER sga_max_size
    • SHOW PARAMETER sga_target
    查看 PGA 设置:
    • SHOW PARAMETER pga_aggregate_target
    查看自动内存设置:
    • SHOW PARAMETER memory_target
    • SHOW PARAMETER memory_max_target
    四(2)针对数据库缓冲区高速缓存(Database Buffer Cache)的相关操作:
    查看各缓冲区的大小:
    • show parameter db_cache_size
    • show parameter db_keep_cache_size
    • show parameter db_recycle_cache_size
    使用指定的缓冲区:
    • ALTER TABLE customers STORAGE (BUFFER_POOL RECYCLE);
    • CREATE INDEX cust_idx … STORAGE (BUFFER_POOL KEEP);
    修改数据库高速缓冲区的大小:
    • ALTER SYSTEM SET db_cache_size=500m;
    清空数据库高速缓冲区(包括 KEEP、RECYCLE、及默认的高速缓冲区):
    • ALTER SYSTEM FLUSH buffer_cache;
    备注:其他部分内存结构都是系统自己调整管理,基本无需用户手动调整。
    下一篇介绍Oracle的进程体系结构

    码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,后续不定期分享DB基本知识和排障案例及经验、性能调优等。

标签:PGA,缓冲区,SGA,内存,Oracle,图文,进程,体系结构
From: https://blog.csdn.net/qq_45732829/article/details/142306226

相关文章

  • LeetCode题集-4 - 寻找两个有序数组的中位数,图文并茂,六种解法,万字讲解
    题目:给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。作为目前遇到的第一个困难级别题目,我感觉这题还是挺难的,研究了三天总算研究明白了,下面就给大家分享一下这题的几种解法,请......
  • oracle 存储加数据检查
    在Oracle数据库中,可以使用存储过程和触发器来实现数据检查。以下是一个简单的例子,展示了如何使用触发器来在数据插入之前进行数据检查。假设我们有一个名为orders的表,其中包含order_id和order_amount两个字段。我们想确保每个order_id都是唯一的,且order_amount大于零......
  • 引言 -- 1.4 体系结构设计的基本原则
    计算机体系结构发展很快,但在发展过程中遵循一些基本原则,这些原则包括平衡性、局部性、并行性和虚拟化。1.4.1平衡性结构设计的第一个原则就是要考虑平衡性。一个木桶所盛的水量的多少由最短的木板决定,一个结构最终体现出的性能受限于其瓶颈部分。计算机是个复杂系统,影响性能的......
  • 达梦数据库之Oracle到DM的数据迁移
    文章目录一、环境说明二、迁移前准备三、数据迁移一、环境说明源数据库:OracleV11.2.0.4.0目标数据库:DM8二、迁移前准备在DM数据库中执行如下:创建表空间:createtablespace"TEST"datafile'/dmdata/data/DAMENG/TEST.DBF'size50autoextendonnext10;创......
  • 达梦数据库之异构数据库(dm-oracle)的dblink
    文章目录一、安装客户端二、添加环境变量三、配置tnsnames.ora四、开始创建dblink准备一台装有oracle数据库和一台装有DM数据库一、安装客户端解压客户端文件到/opt/oracle/下查看解压文件二、添加环境变量vim.bash_profileexportPS1="[`whoami`@`hostname`......
  • 引言 -- 1.3 计算机体系结构的发展
    从事一个领域的研究,要先了解这个领域的发展历史。计算机体系结构是不断发展的。20世纪五六十年代,由于工艺技术的限制,计算机都做得很简单,计算机体系结构主要研究怎么做加减乘除,ComputerArchitecture基本上等于ComputerArithmetic。以后我们会讲到先行进位加法器、Booth补码乘法......
  • u盘怎么重装系统_u盘重装win10系统详细图文教程【支持新旧机型】
         u盘怎么重装系统?对于电脑小白来说用u盘安装系统还是有点难度的,有些电脑小白采用在线一键重装的方式安装系统,结果在安装过程中出现各种问题进不了系统了。所以建议小白采用U盘方式安装系统比较保险,因为这样哪怕安装失败还可以通过U盘进入pe重新安装。用U盘重装......
  • oracle之spool详细使用总结
    一、通过spool命令,可以将select数据库的内容写到文件中,通过在sqlplus设置一些参数,使得按指定方式写到文件中(1)常规使用spool方法,将set的一些命令和spool,select等放入.sql脚本中,然后再sqlplus中运行该脚本。以下为logmnr.sql脚本,在sqlplus中执行@logmnr.sql就可以写入文件record......
  • 从0开始计算机体系结构的学习(一):FGPA预备知识与Vivado环境搭建
    引入与预备知识什么是FPGA?FPGA(Field-ProgrammableGateArray,现场可编程门阵列)是一种集成电路(IC),其硬件功能可以通过用户在现场编程来定义。与传统的ASIC(专用集成电路)不同,FPGA在制造完成后仍然可以根据需求进行重新配置。因此,它们被广泛应用于需要灵活性和可定制性且性能要求较高......
  • Docker 部署 Seata (图文并茂超详细)
    部署Seata(Docker)[Step1]:创建对应的**seata**数据库,也就是下面的的**seata.sql**文件seata.sql[Step2]:拉取Seata镜像dockerpullseataio/seata-server:1.5.2[Step3]:创建目录➡️创建容器➡️拷贝文件➡️授权文件➡️删除容器#创建目录......