首页 > 数据库 >ORACLE内存结构

ORACLE内存结构

时间:2024-06-04 20:55:34浏览次数:27  
标签:缓存 数据库 进程 内存 SQL ORACLE 共享 结构

oracle内存结构主要有两部分组成,一个是系统全局区(SYStem Global Area, SGA),所有进程都可以访问该内存区域。另外一个叫进程全局区(Process Global Area, PGA ),是一个进程专用的内存区域,其他进程不可以访问。

1 PGA介绍

一个进程专用的内存区域,其他进程不可以访问。每个进程的PGA结构不尽相同。简单介绍一下最常见的专用服务器进程的PGA。专用服务器进程是当oracle设置连接方式为专用服务器时,在用户登录时,oracle会建立一个专用服务器进程,在整个用户登录会话期间该进程都会专门为该用户服务。专用服务器进程的PGA由Private SQL Area, SQL Work Areas,Session Memory这三部分组成。

  • Private SQL Area
    Private SQL Area存储已经编译过SQL以及一些关于进行的会话信息。注意不要和SGA的共享池混淆。SGA的共享池是缓存程序的地方。多个Private SQL Area可能会指向同一个共享池的程序或者执行计划。
  • SQL Work Areas
    order by,group by,hash jion等操作是在SQL Work Areas执行的。所以SQL Work Areas的大小会影响排序,hash jion等操作
  • Session Memory
    存储一些会话变量的信息,例如登录用户信息

2 SGA介绍

oracle数据库实例一个很大的内存区域。实例中的每个进程都可以访问这个内存区域。SGA主要由数据库高速缓存(database buffer cache),重做日志缓存(Redo Log Buffers),共享池(shared pool),大池(large pool)组成。

2.1 数据库高速缓存(database buffer cache)

数据库高速缓存是缓存从磁盘读取到的块以及修改后写入磁盘前的块。

2.1.1 数据库高速缓存三个组成部分

  • 默认池:所有段的块的一般缓存位置
  • 保留池:如果一个段的块因为老化推出默认池,但是这些段的块又频繁使用,那么这些块会放在保留池中
  • 回收池: 一个可选的内存区域。存储一些大段的块,避免这些大段的块挤出默认池和保留池中的其他块。

2.1.2 数据库高速缓存管理机制

有两个不同的列表指向这些数据库高速缓存的块

  • 脏块列表:列表里面的块在检查点触发后,要写入磁盘
  • 非脏块列表:数据库使用触点计数管理该列表的块,即在数据库的操作命中一次列表的块,则会增加与之关联的计数器的值

2.2 重做日志缓存(Redo Log Buffers)

重做日志缓存是在在线重做日志写入磁盘之前的缓存。数据库进程LGWR负责将在重做日志缓存的数据写入磁盘。触发重做日志从缓存写入磁盘有如下几种情况

  • 当事务提交commit或者rollback时
  • 每隔3秒会触发
  • 重做日志缓存满1MB
  • 在线重做日志切换

2.3 共享池(shared pool)

共享池是缓存pl/sql代码以及sql执行计划的区域。例如,使用一个sq查询时,oracle会去共享池查找是否相同的sql的执行计划,如果有,就引用执行计划,不用重新编译,生成执行计划。共享池使用最少使用原则(LRU)来进行缓存管理,当共享池的对象很少使用,它就会被使用使用较多的对象挤出共享池。

2.4 大池(large pool)

大池用于大块内存的分配。当数据库连接设为共享服务器连接时,就会使用到大池。在执行并行计算或者RMAN备份时,也会使用大池。

标签:缓存,数据库,进程,内存,SQL,ORACLE,共享,结构
From: https://www.cnblogs.com/study9196/p/18229774

相关文章

  • MySql索引的数据结构
    mysql索引是什么?想象一下,你手上有一本数学教材,但是目录被别人给撕掉了,现在要你翻到三三角函数的那一页,该怎么办?没有了目录,就只有两种方法,要么一页一页翻,要么随机翻。如果数据表没有目录的话,那要查询满足条件的记录行,就需要进行全表扫描,现在的互联网应用,数据量都非常大,百万千......
  • Linux学习笔记6 进程角度看内存泄露
    一,从进程角度看堆区内存申请与释放问题1,c语言中的内存泄漏内存溢出:申请内存时,没用足够的内存可以使用。 内存泄露:严格来说,只有对象不会再被程序用到了,但是GC又不能回收它们的情况,才叫内存泄漏                宽泛的讲,实际情况中很多时候一些不太好的实践......
  • Git 保留空文件夹结构
    假设有如下helloworld项目结构:helloworld|--.git|--.gitignore|--Builds|--WebGL|--iOS|--Android现在有个需求,在上传到github仓库时,只想保留WebGL、iOS、Android文件夹的结构,不想要里面的内容,可以按以下步骤实现分别在WebGL、iOS、Android文件......
  • 数据结构学习笔记-简单选择排序
    简单选择排序的算法设计与分析问题描述:设计并分析简单选择排序【算法设计思想】迭代选择:算法通过循环遍历数组,进行size次迭代。最小值选择:在每次迭代(i)中,算法致力于找到未排序子数组(arr[i]到arr[size-1])内最小元素的索引。这个最小元素将被选出来进行交换。交......
  • 12- Redis 中的 链表 数据结构
    Redis的List对象的底层实现之一就是链表。C语言本身没有链表这个数据结构,所以Redis自己设计了一个链表数据结构。1.链表节点结构设计先来看看【链表节点】结构的样子:typedefstructlistNode{  //前置节点  structlistNode*prev;  //后置节点 ......
  • 数据结构:树
    树,是一种数据结构,就像这样:这就是一棵二叉树,也就是最多有两个分支的树,这些圆圈就是树的节点,下面讲一下节点间的关系:1、最上面的那个节点叫根节点2、每一个节点的上面的连着的节点称作这个节点的父节点,根节点没有父节点。3、每一个节点连着的下面的节点称作这个节点的子节点......
  • 数据结构与算法-图
    图是由顶点(vertex)和边(edge)组成的一种数据结构。顶点代表图中的节点,边代表节点之间的关系。图可以分为有向图(directedgraph)和无向图(undirectedgraph)。有向图中的边有一个方向,而无向图中的边没有方向。常见的图算法包括广度优先搜索(BFS)、深度优先搜索(DFS)、拓扑排序(topologica......
  • 多核内存访问问题整理
    问题:linux和裸板通信不采用ocm的时候,各自对内存访问不体现在另一个核的内存上。zynq的两级缓存和ddr访问问题 linux+裸核,linux那边的缓存行为还不确定 裸核的两级数据缓存由 Xil_DCache决定;cache几个操作:clean、invalidate与flush的含义cachelinecacheline......
  • 数据结构·栈和队列
    栈栈(Stack):只允许在一端插入或删除的线性表栈顶:线性表允许进行插入或删除的那一端栈底:固定的,不允许进行插入和删除的另一端特点:是受限的线性表,拥有线性关系;后进先出LIFO顺序栈使用顺序存储,自底向上存储数据元素,指针指向栈顶元素的位置操作s.top=-1;......
  • 数据结构·线性表
    线性表一、逻辑结构和基本操作1.逻辑结构具有相同数据类型的n个数据元素的有限序列,表长n,n=0为空表表头:第一个元素表尾:最后一个元素除第一个元素外,每个元素有且仅有一个直接前驱除最后一个元素外,每个元素有且仅有一个直接后继2.基本操作initList(&L);len(L);locateE......