• Oracle内存结构


    Oracle的3 个主要的内存结构。

    • 系统全局区(System Global Area, SGA):这是一个很大的共享内存段,几乎所有Oracle进程都要访问这个区中的某一点。
    • 进程全局区(Process Global Area, PGA): 这是一个进程或线程专用的内存,其他进程/线程不能访问。
    • 用户全局区(User Global Area, UGA):这个内存区与特定的会话相关联。它可能在SGA中分配也可能在PGA中分配,这取决与是用共享服务器还是专用服务器来连接数据库。

    如果使用共享服务器UGA就在SGA中分配;如果使用专用服务器UGA就会在PGA中

    1 进程全局区和用户全局区

    PGA(进程全局区)是特定于进程的一段内存。换句话说,是操作系统进程或线程专用的内存。不允许系统中其他进程或线程访问。

    PGA 一般通过C语言的运行时调用malloc()或memmap()来分配。而且可以在运行时动态扩大。

    PGA绝对不会在Oracle的SGA中分配,而总是由进程或线程在本地分配。

    PGA中的P代表Process 或 Program,是不共享的。

    UGA(用户全局区)就是你的会话的状态。会话总能访问这部分内存。UGA的位置完全取决于你如何连接Oracle。

    如果通过一个共享服务器连接,UGA肯定存储在每个共享服务器,因为任何一个共享服务器都能读写你的会话数据。

    如果使用一个专用服务器连接,则不再需要大家能访问你的会话状态,UGA几乎成了PGA的同义词。UGA就包含在专用服务器的PGA中。查看系统统计信息时可以看到,采用专用服务器模式时,总是会报告UGA在PGA中(PGA大于或等于所用的UGA内存,而且PGA内存的大小会包括UGA的大小)。

    有两种方法来管理PGA中的非UGA内存。

    • 手动PGA内存管理
    • 自动PGA内存管理

    自动PGA内存管理可以使用以下两种技术实现:

    通过设置PGA_AGGREGATE_TARGET初始化参数,告诉Oracle可以使用多少PGA内存。

    通过设置MEMORY_TARGET初始化参数,告诉Oracle数据库实例应当为SGA和PGA总共使用多大内存。数据库自己将根据这个参数确定合适的PGA大小。

    手动PGA内存管理

    有些参数对PGA大小的影响最大。

    • SORT_AREA_SIZE:在信息换出到磁盘之前,用于对信息排序的RAM总量。
    • SORT_AREA_RETAINED_SIZE:排序完成后用于保存已排序数据的内存总量。
    • HASH_AREA_SIZE:服务器进程在内存中存储散列表所用的内存量。

    自动PGA内存管理

    • 易用性
    • 手动分配是一种“以一概全”的方法
    • 内存控制

    建立自动PGA内存管理时,需要为两个实例初始化参数确认适当的值,这两个参数如下所示:

    • WORKAREA_SIZE_POLICY: MANUAL OR AUTO
    • PGA_AGGREGATE_TARGET

  • 相关阅读:
    c++ 继承的同名成员以及同名函数的处理方式
    在conda构造的虚拟环境中运行MNIST测试用例
    VR会议:远程带看功能,专为沉浸式云洽谈而生
    基于非局部滤波图像去噪方法
    有哪些做流程图的软件?分享一些制作方法和注意事项
    【大数据 - Doris 实践】数据表的基本使用(三):数据模型
    详解Python魔法函数,__init__,__str__,__del__
    如何在idea中创建一个SpringBoot项目(超详细教学)
    高级架构师_Docker_第1章_第1节_Docker命令分类
    渗透测试-xss的三种类型讲解
  • 原文地址:https://blog.csdn.net/u011868279/article/details/127121820