`
足至迹留
  • 浏览: 496872 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<oracle-3> 内存结构

阅读更多
这一篇主要讨论oracle的3个主要的内存结构:
1.系统全局区(system global area, SGA):这是一个很大的共享内存段,几乎所有oarcle进程都要访问这个区中的某一点。
2.进程全局区(process global area, PGA):这是一个进程或线程专用的内存,其他进程/线程不能访问。
3.用户全局区(user global area, UGA):这个内存区与特定的会话相关联。他可能在SGA中分配,也可能在PGA中分配,这取决于是用共享服务器还是用专用服务器来连接数据库。

3.1 进程全局区和用户全局区
PGA是特定于进程的一段内存。PGA绝对不会在oracle的SGA中分配,而总是由进程或线程在本地分配。
实际上,对你来说,UGA就是你的会话的状态。会话总能访问这部分内存。UGA的位置完全取决于你如何连接oracle。
PGA的内存管理分为手动管理和自动管理,手动管理要DBA设置各参数的值,这不太容易,一般倾向于自动管理。具体的管理策略这里不展开了。

3.2 系统全局区
每个oracle实例都有一个很大的内存结构,称为系统全局区(system global area, SGA)。 这是一个庞大的共享内存结构。

SGA分为不同的池(pool):
(1)Java池(java pool):java池是为数据库中运行的jvm分配的一段固定大小的内存。在oracle 10中,java池可以在数据库启动并运行时在线调整大小。
(2)大池(large pool):共享服务器连接使用大池作为会话内存,并行执行特性使用大池作为消息缓存区,另外RMAN备份可能使用大池作为磁盘IO缓冲区。大池可以在线调整大小。
(3)共享池(shared pool):共享池包含共享游标,存储过程,状态对象,字典缓存和诸如此类的大量其他数据。在oracle10和9中,共享池都可以在线调整大小。
(4)流池(stream pool):这是oracle流专用的一个内存池,oracle流是数据库中地一个数据共享工具,是oracle10中新增的,可以在线调整大小。
(5)空池(NULL pool):这个池其实没有名字。这是块缓冲区,重做日志缓冲区和固定SGA区专用的内存。

3.2.1 共享池
共享池是SGA中最重要的内存段之一,特别是对于性能和可扩展性来说。共享池如果太小,会严重影响性能,甚至导致系统看上去像终止了一样。如果共享池太大,也会有同样的效果。共享池使用不当会导致灾难性的后果。

共享池就是oracle缓存一些“程序”数据的地方。在解析一个查询时,解析得到的表示(representation)就缓存在那里。在完成解析整个查询的任务之前,oracle会搜索共享池,看看这个工作是否已经完成。你运行的pl/sql代码不仅在这里缓存,还会在这里共享。如果有1000个会话都在执行同样的代码,那么只会加载这个代码的一个副本,并由所有会话共享。Oracle把系统参数存储在共享池中。数据字典缓存(关于数据库对象的已缓存信息)也存储在这里。
共享池的特点就是有大量小的内存块,一般为4KB或更小。我们的目标是使用小块的内存来避免碎片问题,共享池的内存根据LRU的原则来管理。

如果真的想破坏oracle的共享池,最容易的办法是不使用绑定变量。如果不使用绑定变量,可能会让系统陷于瘫痪,有两个原因:
(1) 系统要花大量cpu时间解析查询。
(2) 系统使用大量资源来管理共享池中的对象,因为从来不重用查询。

如果提交到oracle的每个查询都是具有硬编码值的唯一查询,则共享池的概念就一点用都没有。设计共享池是为了反复使用查询计划。如果每个查询都是全新的,那么缓存只会增加开销。共享池反而会损害性能。对于这个问题,真正的解决方案只有一个,就是使用共享sql,也就是重用查询。

与管理PGA内存一样,从oracle10开始,管理SGA内存也有两种方法:手动管理和自动管理。手动管理需要设置所有必要的池和缓存参数,自动管理只需设置少数几个内存参数和一个SGA_TARGET参数。通过设置SGA_TARGET参数,实例就能设置各个SGA组件的大小以及调整他们的大小。
从oracle 11g 开始,oracle数据库还提供了自动内存管理,相当于可以一站式完成所有内存设置。在oracle 11g中,DBA现在只需设置一个内存参数,memory_target,这个参数表示SGA和PGA分配能达到的总内存量。
0
0
分享到:
评论

相关推荐

    oracle开发使用手册.part3

    新特性和概念.PDF&lt;br&gt;14-Oracle 8i 附加主题.PDF&lt;br&gt;15-Oracle 8i概述.PDF&lt;br&gt;16-性能调整基础.PDF&lt;br&gt;18-调整内存.PDF&lt;br&gt;19-调整输入输出.PDF&lt;br&gt;20-Oracle 8.x调整问题.PDF&lt;br&gt;21-管理数据库存储.PDF&lt;br&gt;22-鉴别...

    润乾报表4.0在J2EE下的部署

    &lt;driver&gt;oracle.jdbc.driver.OracleDriver&lt;/driver&gt; &lt;url&gt;jdbc:oracle:thin:@localhost:1521:orcl&lt;/url&gt; &lt;username&gt;scott&lt;/username&gt; &lt;password&gt;tiger&lt;/password&gt; &lt;/dataSource&gt; &lt;cacheStrategy&gt; &lt;type&gt;file...

    oracle开发使用手册.part2

    新特性和概念.PDF&lt;br&gt;14-Oracle 8i 附加主题.PDF&lt;br&gt;15-Oracle 8i概述.PDF&lt;br&gt;16-性能调整基础.PDF&lt;br&gt;18-调整内存.PDF&lt;br&gt;19-调整输入输出.PDF&lt;br&gt;20-Oracle 8.x调整问题.PDF&lt;br&gt;21-管理数据库存储.PDF&lt;br&gt;22-鉴别...

    oracle开发使用手册.part1

    新特性和概念.PDF&lt;br&gt;14-Oracle 8i 附加主题.PDF&lt;br&gt;15-Oracle 8i概述.PDF&lt;br&gt;16-性能调整基础.PDF&lt;br&gt;18-调整内存.PDF&lt;br&gt;19-调整输入输出.PDF&lt;br&gt;20-Oracle 8.x调整问题.PDF&lt;br&gt;21-管理数据库存储.PDF&lt;br&gt;22-鉴别...

    oracle-j2sdk1.8-1.8.0+update181-1.x86-64.rpm

    - **类型接口**: 针对泛型类型引入了类型接口,如Optional&lt;T&gt;,增强了代码的可读性和安全性。 3. **RPM包管理**: - **安装**: 使用`rpm -i`或`yum install`命令来安装RPM包,系统会自动处理依赖关系。 - **查询*...

    C#编程经验技巧宝典

    2&lt;br&gt;&lt;br&gt;0003 设置程序代码行序号 3&lt;br&gt;&lt;br&gt;0004 开发环境全屏显示 3&lt;br&gt;&lt;br&gt;0005 设置窗口的自动隐藏功能 3&lt;br&gt;&lt;br&gt;0006 根据需要创建所需解决方案 4&lt;br&gt;&lt;br&gt;0007 如何使用“验证的目标架构”功能 4&lt;br&gt;...

    Oracle 19C安装的补充包 oracle-database-preinstall

    3. **环境变量设置**:安装过程中,环境变量如`ORACLE_HOME`、`PATH`和`LD_LIBRARY_PATH`需要正确配置。预安装包会预先配置这些变量,以便于后续的数据库安装和使用。 4. **软件包安装**:预安装包包含了安装Oracle...

    基于某某平台的数据源迁移oracle -mysql

    - 针对 Oracle 和 MySQL 提供了特别优化功能,例如 Oracle 的 PSCache 内存占用优化,MySQL 的 ping 检测优化等。 **配置示例** (applicationContext-dao.xml): ```xml &lt;bean name="dataSource" class=...

    hibernate笔记

    &lt;property name="connection.driver_class"&gt;oracle.jdbc.driver.OracleDriver&lt;/property&gt; &lt;property name="connection.url"&gt;jdbc:oracle:thin:@192.168.0.20:1521:tarena&lt;/property&gt; &lt;property name="connection....

    Oracle常用操作手册

    #### 一、Oracle内存管理 - **查看当前内存配置**: - 使用命令`show parameter memory_target`查看`MEMORY_TARGET`的设置。 - 使用命令`show parameter memory_max_target`查看`MEMORY_MAX_TARGET`的设置。 - **...

    Oracle Concepts 中文英文对照版 (10g R2)

    方案对象 &lt;br&gt;Chapter 6, Dependencies Among Schema Objects 第 6 章,方案对象间的依赖关系 &lt;br&gt;Chapter 7, The Data Dictionary 第 7 章,数据字典 &lt;br&gt;Chapter 8, Memory Architecture 第 8 章,内存体系结构 ...

    oracle_初级教程

    - **Oracle 实例**是一种访问数据库的方式,包含内存结构(SGA)和后台进程。 - **Oracle 数据库**由控制文件、重做日志文件和数据文件组成。 - **内存结构 - SGA (System Global Area)** - **共享池** (Shared ...

    jsp实现XML解析文档

    &lt;Name&gt;约瑟夫&lt;/Name&gt; &lt;E-mail&gt;joe@yahoo.com&lt;/E-mail&gt; &lt;/Student&gt; &lt;Student&gt; &lt;Name&gt;玛丽&lt;/Name&gt; &lt;E-mail&gt;mary@yahoo.com&lt;/E-mail&gt; &lt;/Student&gt; &lt;/Department&gt; ``` 在DOM解析中,该文件会被转化为一棵树,其中...

    Oracle的内存结构和进程结构

    Oracle数据库的内存结构和进程结构是其高效运行的关键组成部分。Oracle实例是用户访问数据库的核心途径,它由系统全局区(SGA)和一系列后台进程组成。在操作系统层面,实例通过ORACLE_SID标识,而在Oracle数据库...

    hibernate大学教程

    &lt;property name="hibernate.connection.url"&gt;jdbc:oracle:thin:@127.0.0.1:1521:oracle9&lt;/property&gt; &lt;property name="hibernate.connection.username"&gt;peopres&lt;/property&gt; &lt;property name="hibernate.connection....

    Oracle内存结构全面分析

    Oracle内存结构是数据库性能优化的关键因素,它主要分为两大部分:共享内存(SGA)和进程私有内存(PGA及UGA)。理解这些组件的工作原理对于优化Oracle数据库的性能至关重要。 1. SGA(System Global Area) SGA是...

    Oracle 10g内存结构

    Oracle 10g的内存结构是数据库管理系统的关键组成部分,它决定了数据库的性能和稳定性。SGA(System Global Area)是Oracle数据库中一个重要的共享内存区域,用于存储数据库运行时的各种数据和控制信息。 1. SGA...

    Oracle体系结构详解

    本文将深入解析Oracle的基本组成、实例(Instance)结构以及内存结构等核心概念。 #### 一、Oracle基本组成 Oracle的基本组成部分包括Oracle Server、Oracle Instance 和 Oracle Database。具体如下: - **Oracle...

    Oracle-10g体系结构V1.0.docx

    3. **内存结构** - **PGA (Program Global Area)**:程序全局区主要用于存放服务器进程的数据和控制信息,它是私有的,每个服务器进程都有自己的PGA。 - **SGA (System Global Area)**:系统全局区是所有并发连接...

Global site tag (gtag.js) - Google Analytics