`
liwenshui322
  • 浏览: 519082 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle内存结构(第四节 SGA浅析)

阅读更多

     SGA(System Global Area)系统全局区。这是一个非常庞大的内存区间,也是为什么开启oracle之后占用了很大内存的原因!

      SGA分为不同的池,我们可以通过视图sgastat查看,如下所示命令。

 我们可以看到SGA由java pool(java 池) shared pool(共享池) large pool(大池) 和没有名字的池组成。其实那块没有名字的内存是 块缓冲区(缓存的数据库块)、重做日志缓冲区和“固定SGA”区专用的内存。 所以oracle SGA内存结构如下所示:

 下面逐个介绍:

1.Fixed SGA 固定SGA

      可以把这个区想成是 SGA中的“自启”区,Oracle在内部要使用这个区来找到SGA的其他区。换一句话,就是在这个内存里面存有其他区的地址,我们可以通过访问这个区来查找到其他区的位置!

2.Redo Buffer 重做缓冲区

      如果数据需要写到在线重做日志中,则在写至磁盘之前要在重做缓冲区(redo buffer)中临时缓存这些数据。由于内存到内存的传输比内存到磁盘的传输快得多,因此使用重做日志缓冲区可以加快数据库的操作。我的理解就是,如果没有这个区,那我们操作一次数据库就访问一次磁盘,而如果有的话,就是我可以操作很多次之后才访问一次磁盘。速度当然要快很多了!

3.Block Buffer 块缓冲区缓存

       Oracle将数据库块写至磁盘之前,另外从磁盘读取数据库块之后,就会把这些数据库块存储在块缓冲区缓存(block buffer cache)中。对我们来说,这是SGA中一个很重要的区。如果太小,我们的查询就会永远也运行不完。如果太大,又会让其他进程饥饿(例如,没有为专用服务器留下足够的空间来创建其PGA,甚至无法启动)。这个其实是缓存数据,也是为什么你第二次进行同一个操作的时候比第一次要快的原因,因为他可以直接从这个缓存里面取就可以了!但是如果你第二天来继续进行同一操作应该是比较慢的,因为在那个缓存里面已经没有你要取的数据了!( 就是通常说的内存老化,也就是缓存你数据的那块内存被别人用了。这就是LRU算法),为了使自己要的数据不那么快老化。oracle把这块内存划分为三种类型:

     默认池(default pool):所有段块一般都在这个池中缓存。这就是原先的缓冲区池(原来也只有一个缓冲区池)。
     保持池(keep pool):按惯例,访问相当频繁的段会放在这个候选的缓冲区池中,如果把这些段放在默认缓冲区池中,尽管会频繁访问,但仍有可能因为其他段需要空间而老化(aging)。
     回收池(recycle pool):按惯例,访问很随机的大段可以放在这个候选的缓冲区池中,这些块会导致过量的缓冲区刷新输出,而且不会带来任何好处,因为等你想要再用这个块时,它可能已经老化退出了缓存。要把这些段与默认池和保持池中的段分开,这样就不会导致默认池和保持池中的块老化而退出缓存。

4.shared pool(共享池)

     共享池就是Oracle缓存一些“程序”数据的地方。在解析一个查询时,解析得到的表示(representation)就缓存在那里。在完成解析整个查询的任务之前, Oracle会搜索共享池,看看这个工作是否已经完成。你运行的PL/SQL代码就在共享池中缓存,所以下一次运行时,Oracle不会再次从磁盘重新读取。PL/SQL代码不仅在这里缓存,还会在这里共享。如果有1 000个会话都在执行同样的代码,那么只会加载这个代码的一个副本,并由所有会话共享。Oracle把系统参数存储在共享池中。数据字典缓存(关于数据库对象的已缓存信息)也存储在这里。简单地讲,就像是厨房的水池一样,什么东西都往共享池里放。我的理解是:这是个共用的东西,大家都可以用。比如一个用户进行一次查询,在解析之前,查看共享池,这个sql语句是否已经缓存在这里了。如果在,他就没有必要再去进行解析了,因为已经解析好了,直接拿来用就可以了!这也是绑定变量为什么可以改善oracle性能的原因!

5.large pool 大池

    大池(large pool)并不是因为它是一个“大”结构才这样取名(不过,它可能确实很大)。之所以称之为大池,是因为它用于大块内存的分配,共享池不会处理这么大的内存块。
在Oracle 8.0引入大池之前,所有内存分配都在共享池中进行。如果你使用的特性要利用“大块的”内存分配(如共享服务器UGA内存分配),倘若都在共享池中分配就不太好。另外,与共享池管理内存的方式相比,处理(需要大量内存分配)会以不同的方式使用内存,所以这个问题变得更加复杂。共享池根据LRU来管理内存,这对于缓存和重用数据很合适。不过,大块内存分配则是得到一块内存后加以使用,然后就到此为止,没有必要缓存这个内存。我的理解是:其实是把原来属于共享池里面的一些特殊的内存拿出来进行不同的处理。因为这些内存用完之后就可以立即释放,而共享池的内存不存在释放问题,因为是大家共享的吗!

     大池专门用于以下情况:
共享服务器连接,用于在SGA中分配UGA区,因为一个用户断开之后,UGA就可以立即释放!
语句的并行执行,允许分配进程间的消息缓冲区,这些缓冲区用于协调并行查询服务器。一旦发送了缓冲消息就可以立即释放!
备份,在某些情况下用于RMAN磁盘I/O 缓冲区。因为写入磁盘之后,这些缓存可以立即释放!

  • 大小: 14.7 KB
  • 大小: 23.5 KB
分享到:
评论

相关推荐

    Oracle内存结构全面分析

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

    ORACLE 内存调整(SGA和PGA)

    SGA+PGA最好不要超过总内存的70%,内存详细调整方案,供学习。

    Oracle数据库内存结构SGA的区域信息

    SGA(system global area)系统全局区跟一些必须的后台进程合进来称为实例(Instance).说它是全局区是包含了全局变量和数据结构,是系统区是包含了进入整个Oracle ...本文将为大家介绍Oracle数据库内存结构SGA的区域信息。

    Oracle的内存结构和进程结构

    Oracle内存主要分为SGA、PGA、排序池、大池和Java池。 3. 系统全局区SGA: SGA是所有数据库实例共享的内存区域,包括数据缓冲区、日志缓冲区和共享池等组件。SGA的大小在数据库启动时设定,并在关闭时释放。尽管...

    对于oracle11g 各种进程进行详解,进程与内存结构的关系,SGA的讲解

    本文将深入解析Oracle 11g中的进程与内存结构,特别是系统全局区(SGA)。 首先,Oracle实例由SGA和后台进程两部分组成。SGA是数据库实例启动时在服务器内存中分配的一块共享内存区域,用于存储数据库数据和控制...

    减少Oracle内存占用

    #### 一、Oracle内存结构简介 Oracle数据库的内存结构主要由SGA和PGA两部分组成: 1. **SGA**(Shared Global Area):SGA是所有数据库进程共享的一块内存区域,它包含了多个子组件如数据缓冲区、重做日志缓冲区、...

    Oracle 10g内存结构

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

    Oracle 12c数据库体系结构图文详解手册

    Oracle 实例由内存结构(SGA)和 Oracle 后台进程组成的。内存结构描述的是 Oracle 数据库对内存的使用构成。Oracle 内存结构被总称为 SGA,主要包括数据库高速缓冲区(Database Buffer Cache)、重做日志缓冲区...

    oracle改sga导致数据库启动异常处理办法

    SGA 参数是 Oracle 数据库中最重要的参数之一,它控制着数据库的内存分配和性能。如果 SGA 参数设置不当,可能会导致数据库启动异常、性能下降或崩溃。 二、数据库启动异常的原因 当调整 SGA 参数后,数据库可能...

    oracle内存管理,深入浅出oracle内存管理,盖国强oracleppt

    4. **内存管理的变迁**:Oracle内存管理经历了从早期的静态分配到动态调整,再到自动共享内存管理(ASMM)和自动内存管理(AMM)的演变。AMM使得数据库能够自动管理SGA和PGA,简化了管理员的工作。 5. **Shared ...

    oracle内存全面分析

    本文将深入探讨Oracle内存结构,包括SGA(System Global Area)和PGA(Program Global Area),以及如何进行全面的内存分析。 一、Oracle内存架构 1. SGA(系统全局区) SGA是Oracle数据库运行时共享的一片内存...

    ORACLE内存结构与表空间知识

    ### ORACLE内存结构与表空间知识 #### 一、Oracle的服务方式 Oracle提供了三种不同的服务方式,每种方式都有其特定的应用场景和内存管理特点。 ##### 1. 专用服务器 (Dedicated Server) - **服务流程**:当...

    Oracle SGA

    Oracle SGA(System Global Area)是Oracle数据库中至关重要的组件,它是一个共享内存区域,用于存储数据库运行时的各种数据结构和信息。Oracle SGA的优化和分配方式对于数据库性能有着直接的影响。在Oracle 9i及...

    Oracle 9i 调整SGA性能

    SGA是Oracle数据库的核心组成部分,它是一个共享内存区域,用于存储数据库运行时的各种信息。主要包括以下几个关键组件: 1. 数据缓冲区缓存(Data Buffer Cache):这是存储表和索引块的地方,通过减少磁盘I/O来...

    Oracle内存分配与调整--大牛冯春培的一篇文章

    冯春培作为一位经验丰富的Oracle专家,他的这篇文章清晰而深入地介绍了Oracle内存管理的关键方面,特别是系统全局区(SGA)和进程全局区(PGA)的配置与优化。 #### 二、Oracle内存架构概览 ##### 2.1 SGA与PGA的区别 ...

    oracle体系结构、ocp笔记

    "Oracle体系结构与OCp笔记" ...本节笔记对Oracle体系结构进行了详细的讲解,涵盖了数据库、实例、Oracle网络架构和Oracle内存架构等方面的知识点,为读者提供了一个系统的Oracle体系结构知识框架。

    oracle-sga结构

    Oracle SGA(System Global Area)是Oracle数据库管理系统中的核心组成部分,它是一个共享内存区域,用于存储数据库运行时所需的各种数据和信息。理解SGA的结构对于优化数据库性能和日常维护至关重要。 SGA主要包含...

    oracle sga设置

    在Oracle数据库系统中,SGA(System Global Area)是所有用户进程共享的一块内存区域,它为Oracle实例提供了一个公共的数据和控制信息存储区。SGA的合理配置对于数据库性能至关重要。 #### 二、SGA 的组成部分及...

    Oracle 内存分配与调整

    Oracle内存结构主要分为两大部分:SGA(System Global Area)和PGA(Program Global Area)。SGA是数据库进程共享的一块内存区域,而PGA则是每个单独数据库进程的私有内存空间。 1. SGA(系统全局区) - 数据缓冲...

Global site tag (gtag.js) - Google Analytics