Oracle内存组件理论篇一

目标

  1.SGA结构

  2.PGA结构

1.SGA


Shared pool
1)、共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。
     在执行SELECT * FROM emp语句时,会对sql语句进行语法分析->编译->生成执行计划->运行执行计划等,这些操作都在共享池中完成;
     如果再次执行SELECT * FROM emp语句时,会在共享池中查找是否有相同的sql,如果存在则省去编译、生成执行计划操作步骤而是直接运行执行计划。
     因此养成良好的编码习惯对于提高oracle执行效率非常有帮助。
2)、共享池由库缓存和数据字典缓存组成。
3)、共享池的大小直接影响数据库的性能。

Database buffer cach
1)、用于存储从磁盘数据文件中读入的数据,所有用户共享。
2)、服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不需要再从磁盘读取,提高了读取速度。
3)、数据缓冲区的大小对数据库的读取速度有直接的影响。
4)、硬盘上的数据文件中的数据,如何返回给用户的?
i、从硬盘取出来,直接返回给用户,使得获取数据的效率非常低。
ii、从硬盘取出来,放到数据缓冲区,从数据缓冲区中把数据返回给用户。下次读取同样的数据的话,直接从数据缓冲区中获取,不需要再从硬盘获取。

Redo log buffer
1)、日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。
2)、当日志缓冲区的日志数据达到一定数量时,由后台进程将日志数据写入日志文件中。
3)、相对来说,日志缓冲区对数据库的性能影响较小。
eg、UPDATE emp SET empno=7935 WHERE empno=7934;
   首先 在日记缓冲区中被记录,
   其次 某个时候(三种情况;一、日志缓冲区中的记录达到1M 二、每隔3秒 三、日志缓冲区已经用了三分之一,满足其中任意一项就可以)把日志缓冲区中的这些记录写到在线日志中去。

Large pool
为了进行大的后台进程操作而分配的内存空间,主要指备份恢复、大型IO操作、并行查询等。

Stream pool
为了stream应用而分配的内存空间,高级复制技术一部分。

JAVA pool
为了java应用而分配的内存空间。

缓冲池:
Keep buffer pool
此池用于保留内存中可能要重用的对象,将这些对象保留在内存中可减少 I/O操作。
   通过使池的大小大于分配给该池的各个段的总大小,可以将缓冲区保留在此池中,这意味着缓冲区不必执行过期处理。可
   通过指定DB_KEEP_CACHE_SIZE参数的值来配置
Recycle buffer pool
此池用于内存中重用几率很小的块,回收池的大小要小于分配给该池的各个段的总大小,这意味着读入该池的块经常需要在缓冲区内执行过期处理。
   可通过指定DB_RECYCLE_CACHE_SIZE 参数的值来配置
nK buffer pool
此池始终存在。它相当于没有保留池和回收池的实例的缓冲区高速缓存,可通过DB_CACHE_SIZE 参数进行配置。
注:保留池或回收池中的内存不是默认缓冲池的子集

CREATE INDEX cust_idx …
STORAGE (BUFFER _POOL KEEP);

ALTER TABLE oe.customers
STORAGE (BUFFER_POOL RECYCLE);

ALTER INDEX oe.cust_lname_ix
STORAGE (BUFFER _POOL KEEP);

BUFFER_POOL 子句用于定义对象的默认缓冲池。它是STORAGE子句的一部分,对CREATE 和ALTER表、集群和索引语句有效。未明确设置缓冲池的对象中的块将进入默认缓冲池。
语法为:BUFFER_POOL [KEEP | RECYCLE | DEFAULT] 。

2.PGA

  共享连接模式和专用连接模式,PGA的管理方式不同。大多情况下,采用专用连接模式


专用SQL区
发出SQL 语句的每个会话都有一个专用SQL 区。
提交同一SQL 语句的每个用户也都有其自己的专用SQL 区,该专用SQL 区使用一个共享SQL 区。这样,许多专用SQL 区可与同一个共享SQL 区关联。
专用SQL 区的位置取决于为会话建立的连接类型。
如果会话是通过专用服务器连接的,则专用SQL 区位于该服务器进程的PGA 中。
如果会话是通过共享服务器连接的,则部分专用SQL 区将保留在SGA中

游标和SQL区
Oracle Pro*C 程序或Oracle 调用接口(OCI)程序的应用程序开发人员可以显式打开特定专用SQL 区的游标或句柄,并在该程序的整个执行过程中将它们用作命名资源。
数据库为某些SQL 语句隐式发出的递归游标也使用共享SQL 区。

工作区
对于复杂查询(例如,决策支持查询),会将大部分PGA 供内存密集型运算符分配的工作区专用。
例如:排序的运算符(ORDER BY 、GROUP BY),散列联接,位图合并,位图创建.

会话内存
会话内存是用于存放会话的变量(登录信息)以及与会话相关的其它信息的内存。
对于共享服务器,会话内存是共享的,而不是专用的。

Oracle内存组件理论篇一,布布扣,bubuko.com

时间: 2024-10-06 04:33:21

Oracle内存组件理论篇一的相关文章

Oracle内存管理理论篇二

目标 了解oracle内存管理方式 掌握ASMM管理方式 掌握AMM管理方式 监控内存使用 学习一个知识点时,最好先了解其历史.ORACLE近期的版本都对内存管理做了简化,从9i通过PGA_AGGREGATE_TARGET参数实现PGA的自动管理,10g通过Automatic Shared Memory Management(ASMM)实现SGA的自动管理,到11g通过Automatic Memory Management(AMM)实现内存(SGA+PGA)的自动管理.目前的11G版本,DBA只

Oracle知识梳理(一)理论篇:基本概念和术语整理

理论篇:基本概念和术语整理 一.关系数据库           关系数据库是目前应用最为广泛的数据库系统,它采用关系数据模型作为数据的组织方式,关系数据模型由关系的数据结构,关系的操作集合和关系的完整性约束三部分组成. 二.关系数据库中的一些基本术语和定义 1.关系数据模型 关系数据模型是建立在严格的数学概念的基础上,由一组关系组成,每个关系的数据结构是一张严格规范化的二维表,简单说关系数据模型就是用二维表的形式来表示实体和实体间联系的数据模型. ①二维表: 简单说关系数据库中数据的主要存储形式

ORACLE内存结构简介

ORACLE数据库作为世界上一款功能强大的数据库管理软件,功能体系特别庞大.我们有必要对它的每一部分学习了解,然后才从全局的角度进行有效把握.我们会着重从理论基础体系角度再逐步到实战应用.实际上,如果没有掌握基础理论体系,而直接生搬硬套一些维护技术经验,那也只是空中楼阁罢了.而如果你想直接通过一两篇文章学到什么秘籍成为维护或是DB优化高手那也是不现实的.所以这些文适合静下心来真正想了解学习ORALCE体系的读者.方法论掌握好,起码头脑中的思路方向是正确的,至于术也就是水到渠成. 我们通常所说的O

CentOS 6开机启动流程理论篇

CentOS 6开机启动流程理论篇 centos 系统的启动流程 grub 破坏Linux的核心文件再修复体验系统启动流程 概述 任何系统启动的第一步必然是加电,然后计算机硬件会主动地读取BIOS来加载硬件设备信息并检测,之后系统会主动地读取第一个有引导程序的设备,该引导程序(grub)可以指定使用哪个内核来启动,并将其加载至内存当中运行,同时内核还要加载其他硬件设备以及对应的驱动程序,来例主机各个组件开始运行,等所有硬件设备加载完后,系统就真正地启动了,稍后系统会操作一些外部程序开始准备软件的

OpenStack入门——理论篇(二):OpenStack的节点类型和架构(含登录的仪表板界面示例)

OpenStack入门--理论篇(二):OpenStack的节点类型和架构(含仪表板界面示例) 前言 ? 看了网上的一些博客对OpenStack架构的描述,大部分都是将官网的架构图截取下来(还是纯英文文字描述的图片)或者直接将描述翻译为中文直接复制粘贴过来了.如果对于初学者而言,这或许是有字天书了.所以笔者先前的一篇文章是介绍了关于OpenStack的基础知识和核心的组件服务.而本文先从OpenStack部署的节点结构描述,再来对其整体架构进行阐述. 一.OpenStack节点类型 ? 在介绍O

修改oracle内存占用

进入系统, 进入系统, # su oracle $cd $ORACLE_HOME $./sqlplus /nolog >connect / as sysdba; >show parameter sga; (查看内存占用情况) NAME TYPE VALUE ------------------------------------ ----------- ------------- lock_sga boolean FALSE pre_page_sga boolean FALSE sga_max

Oracle内存管理(之五)

[深入解析--eygle]学习笔记 1.4. 2其他内存组件 Large Pool-大池是SGA的一个可选组件,通常用于共享服务器模式(MTS). 并行计算或 RMAN的备份恢复等操作. Java Pool-Java池主要用于JVM等Java选件. Streams Pool-Streams pool是Oracle10g引入的概念,为Oracle的Streams功能所使用,如果不定义该参数,这部分内存将从Shread Pool中分配 对于SGA各部分内存分配,可以从数据库的视图中查询得到: 17:

【SSH2(理论篇)】--Struts2配置详解

上篇博客讨论了SSH2框架模型,在开发过程中发现SSH2的开发模型其实类似于经典的三层模式,在每一层中分别添加了不同的框架,显示层使用的是Struts2进行配置的,业务逻辑层使用的是Spring配置,数据持久层则采用的是Hibernate,开发模式简单易懂,接下来将会分别从三层着手讨论每一层的运行内容. 一.Struts体系简介 struts,是Apache软件基金会(ASF)赞助的一个开源项目,它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-V

Oracle内存管理(之四)

[深入解析--eygle]学习笔记 1.3 SGA管理 SGA指系统全局区(System Global Area),是一块用于加载数据.对象并保存运行状态和数据库控制信息的一块内存区域,在数据库实例启动时分配,当实例关闭时释放,每个实例都拥有自己的SGA区. 在第一章曾经?到,当数据库启动到nomount状态时,SGA已经分配,同时启动后台进程,在SQL*Plus中通过show sga命令可以看到SGA的分配情况: [email protected] SQL>show parameter sga