oracle OCP认证学习日志(3)

1.4 实例内存结构

      Oracle实例由称为系统全局区(SGA)的共享内存块以及大量的后台进程构成。SGA至少包含三种数据结构:

      a.数据库缓冲区缓存

      b.日志缓冲区

       c.共享池

       还可能包含·

       d.大池

       e.JAVA池

        f.流池

       用户会话还需要服务器端的内存。此内存不共享,也称为程序全局区或PGA。每个会话都有自己专用的PGA。对这些结构的大小的管理大多是可自动完成的,DBA也可以自己进行控制。通常最好的做法是使用自动管理。



1.4.1数据库缓冲区缓存

        数据库缓冲区缓存是Oracle用来执行SQL的工作区域。在更新数据时,用户的会话不直接更新上的数据。包含关键数据的数据块首先复制到数据库缓冲区缓存。更改应用于数据库缓冲区缓存中这些数据块的副本。此后,块将在缓存中保留一段时间,直到共占有的缓冲区需要缓存另一个块为止。

       在查询数据时,数据也

       要经过缓存。会话计算出哪些块包含关键的行,并将它们复制到数据库,缓冲区缓存。此后,相关行传输到会话的PGA作进一步处理。与上面一样,此后块会在数据库缓冲区缓存中保留一段时间。理想状况下,包含频繁访问的数据的所有块将位于数据库缓冲区缓存中,从而最大程序地减少磁盘I\O的需要。

数据库缓冲区缓存的大小会对性能产生至关重要的影响。缓存应足够大,以便缓存所有频繁访问的块,但也不能太大。就绝大多数的数据库而言,数百MB到数GB的缓存可以满足正常运行的要求,如果低于这个范围,就很少有应用程序能够正常运行,但是也很少有应用程序需要数百GB的缓存。

可以动态调整数据库缓冲区缓存的大小,也可以对其进行自动管理。


       1.4.2日志缓冲区

      日志缓冲区是小型的,用于短期存储将写入到磁盘上的重做日志的变更向量的临时区域。“变更向量”是应用于某些对象的修改,执行DML语句会生成应用于数据的变更向量。会话将重做记录写入内存中的日志缓冲区。这样的速度将远比定入磁盘快。当会话发出COMMIT语句时,会实时执行日志缓冲写操作。写操作由日志写入器后台进程完成。

      与其他内存结构相比,日志缓冲区较小,因为它是一个非常短暂的存储区域。在Oracle 体系结构中,将日志缓冲区转储到磁盘是基本瓶颈之一。DML的速度不能超过LGWR将变更向量转储到联机重做日志文件的速度。

       如果重做生成是限制数据库性能的因素,唯一的选项是使用RAC,在RAC数据库中,每个实例都有自己的日志缓冲区和自己的LGWR。这是将重做数据并行写入磁盘的唯一方法。

       日志缓冲区的大小固定不变,在启动实例时被设置为固定值。无法对其进行自动管理。

      1.4.3 共享池

      共享池是最复杂的SGA结构。它分为许多子结构,这些子结构由ORACLE服务器内部管理。现仅分析四个共享池组件:

     a.库缓存

      b.数据字典缓存

      c.PL\SQL区

       d.SQL查询和PL\SQL函数结果缓存

     共享池中的所有结构是自动管理的。在共享池的总体大小范围内,各个结构的大小将因针对实例的活动模式而异。

    1 库缓存

      库缓存是内在区域,按其已分析的格式存储最近执行的代码。通过将代码缓存在共享池,可以在不重新分析的情况下重用,极大地提高性能。在设计完好的应用程序中,可能只分析一次语句,而后将其执行数百万次。这会节省下大量时间。

         2 数据字典缓存

      数据字典缓存有时称为“行缓存”。无论您爱用哪个术语,都不影响其含义,它存储最近使用的对象定义:表、索引、用户和其他无数据宣言的描述。通过将此类定义放在SGA的内存中,以便使所有会话可以直接访问它们,而不是被迫从磁盘上的数据字典中重复读取它们,从而提高分析性能。

       3 PL\SQL区

       存储PL\SQL对象是过程、函数、打包的过程、打包的函数、对象类型定义和触发器。它们全都像源代码那样存储在数据字典中,也使用已编译的格式。当会话调用存储的PL\SQL对象时,它必须从数据字典读取。为了避免重复读取,将对象缓存到共享池的PL\SQL区。

        PL\SQL可以从用户进程发生,而不存储在数据字典中。这称为匿名PL\SQL,匿名PL\SQL不能被缓存和重用,但必须动态编译。与存储的OL\SQL相比,其性能表现始终较差,应该鼓励开发人员将所有匿名PL\SQL转换为存储的PL\SQL转换为存储的PL\SQL。

      4 设定共享池的大小

     确定最优容量是一个性能调整问题,但可以这样讲:大多数数据库都需要一个数百MB的共享池,有些应用程序需要1GB以上的共享池,但很少有应用程序能够在共享池小于100M时充分运行。

共享池的大小是动态的,可以手动调整,也可以对其进行自动管理。


1.4.4  大池

      大池是一个可选区域,如果创建了大池,则那些在不创建大池的情况下使用共享池内存的不同进程半自动使用大池。大池的一个主要用途是供共享的服务器进程使用。

     大池的大小可以动态调整,而且可以自动管理

1.4.5 JAVA池

      只有当应用程序需要在数据库中运行JAVA存储过程时,才需要JAVA池:此池作实例化JAVA对象所需的堆空间。

1.4.6流池

       流池供Oracle流使用。这是一个高级工具。

     JAVA池和流池的大小是动态的,而且可以自动管理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值