这一篇主要讨论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分配能达到的总内存量。
分享到:
相关推荐
新特性和概念.PDF<br>14-Oracle 8i 附加主题.PDF<br>15-Oracle 8i概述.PDF<br>16-性能调整基础.PDF<br>18-调整内存.PDF<br>19-调整输入输出.PDF<br>20-Oracle 8.x调整问题.PDF<br>21-管理数据库存储.PDF<br>22-鉴别...
<driver>oracle.jdbc.driver.OracleDriver</driver> <url>jdbc:oracle:thin:@localhost:1521:orcl</url> <username>scott</username> <password>tiger</password> </dataSource> <cacheStrategy> <type>file...
新特性和概念.PDF<br>14-Oracle 8i 附加主题.PDF<br>15-Oracle 8i概述.PDF<br>16-性能调整基础.PDF<br>18-调整内存.PDF<br>19-调整输入输出.PDF<br>20-Oracle 8.x调整问题.PDF<br>21-管理数据库存储.PDF<br>22-鉴别...
新特性和概念.PDF<br>14-Oracle 8i 附加主题.PDF<br>15-Oracle 8i概述.PDF<br>16-性能调整基础.PDF<br>18-调整内存.PDF<br>19-调整输入输出.PDF<br>20-Oracle 8.x调整问题.PDF<br>21-管理数据库存储.PDF<br>22-鉴别...
- **类型接口**: 针对泛型类型引入了类型接口,如Optional<T>,增强了代码的可读性和安全性。 3. **RPM包管理**: - **安装**: 使用`rpm -i`或`yum install`命令来安装RPM包,系统会自动处理依赖关系。 - **查询*...
2<br><br>0003 设置程序代码行序号 3<br><br>0004 开发环境全屏显示 3<br><br>0005 设置窗口的自动隐藏功能 3<br><br>0006 根据需要创建所需解决方案 4<br><br>0007 如何使用“验证的目标架构”功能 4<br>...
- 针对 Oracle 和 MySQL 提供了特别优化功能,例如 Oracle 的 PSCache 内存占用优化,MySQL 的 ping 检测优化等。 **配置示例** (applicationContext-dao.xml): ```xml <bean name="dataSource" class=...
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@192.168.0.20:1521:tarena</property> <property name="connection....
#### 一、Oracle内存管理 - **查看当前内存配置**: - 使用命令`show parameter memory_target`查看`MEMORY_TARGET`的设置。 - 使用命令`show parameter memory_max_target`查看`MEMORY_MAX_TARGET`的设置。 - **...
方案对象 <br>Chapter 6, Dependencies Among Schema Objects 第 6 章,方案对象间的依赖关系 <br>Chapter 7, The Data Dictionary 第 7 章,数据字典 <br>Chapter 8, Memory Architecture 第 8 章,内存体系结构 ...
<Name>约瑟夫</Name> <E-mail>joe@yahoo.com</E-mail> </Student> <Student> <Name>玛丽</Name> <E-mail>mary@yahoo.com</E-mail> </Student> </Department> ``` 在DOM解析中,该文件会被转化为一棵树,其中...
Oracle数据库的内存结构和进程结构是其高效运行的关键组成部分。Oracle实例是用户访问数据库的核心途径,它由系统全局区(SGA)和一系列后台进程组成。在操作系统层面,实例通过ORACLE_SID标识,而在Oracle数据库...
3. **环境变量设置**:安装过程中,环境变量如`ORACLE_HOME`、`PATH`和`LD_LIBRARY_PATH`需要正确配置。预安装包会预先配置这些变量,以便于后续的数据库安装和使用。 4. **软件包安装**:预安装包包含了安装Oracle...
<property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:oracle9</property> <property name="hibernate.connection.username">peopres</property> <property name="hibernate.connection....
Oracle内存结构是数据库性能优化的关键因素,它主要分为两大部分:共享内存(SGA)和进程私有内存(PGA及UGA)。理解这些组件的工作原理对于优化Oracle数据库的性能至关重要。 1. SGA(System Global Area) SGA是...
<type-version>7.0</type-version> <type-storage>META-INF/weblogic-cmp-rdbms-jar.xml</type-storage> </persistence-use> </persistence> </entity-descriptor> <jndi-name>com.ejb.CatalogHome</jndi-name...
Oracle 10g的内存结构是数据库管理系统的关键组成部分,它决定了数据库的性能和稳定性。SGA(System Global Area)是Oracle数据库中一个重要的共享内存区域,用于存储数据库运行时的各种数据和控制信息。 1. SGA...
Oracle 内存结构研究 - PGA 篇 Oracle 内存结构研究 - PGA 篇是 Oracle 中最重要的内存结构之一,PG 即程序全局区,一个进程的专用的内存区。PGA 的主要组成部分包括 UGA(User Global Area)、排序区、散列区和...
本文将深入解析Oracle的基本组成、实例(Instance)结构以及内存结构等核心概念。 #### 一、Oracle基本组成 Oracle的基本组成部分包括Oracle Server、Oracle Instance 和 Oracle Database。具体如下: - **Oracle...