`
fsclh
  • 浏览: 35911 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Oracle10g 管理系统全局区(SGA)

阅读更多

   有几个影响SGA内存分配数量的参数,除了SGA_MAX_SIZE ,其他都是动态参数,也就是说在数据库运行期间可以使用ALTER SYSTEM 语句动态修改的参数.SGA的大小是动态的,通过修改这些参数可以是SGA增长或收缩. 
SGA组件和SGA内存颗粒
        由许多内存组件组成,他们是用于满足特定内存分配请求的内存池.例如共享池(用于缓冲磁盘数据块),所有的SAG以一个最小的内存单元颗粒分配和回收内存空间,Oracle在系统内部追踪SAG的内存单元的分配和使用情况.
        SGA的内存分配是通过颗粒进行分配的,颗粒大小由SGA的大小决定.一般来将,在大多数平台,如果SGA小于等于1G,那么颗粒大小为4MB,如果大于1G,颗粒的大小为16MB,不同的是在32位Windows平台下,SGA大于1G时,颗粒大小位8MB而非16MB,详细信息,查看操作系统文档.
        可以通过V$SGAINFO 系统试图查看由某个实例使用的颗粒大小.同样的大小用于所有SGA的动态组件.
        如果指定的SGA组件的大小不是颗粒大小的整数倍,那么Oracle将会四舍五入求整而得到其整数倍值,赋给SGA内存组件.而不是你所指定的大小.例如如果颗粒大小为4MB,你给 DB_CACHE_SIZE 参数设定为10MB,那么实际分配的内存将会是12MB.

限制SGA的大小
        SGA_MAX_SIZE 参数指定SGA在实例的生命期内的最大数.动态修改这些参数影响的Buffer cache,shared pool,large pool,java pool,和streams pool的大小,和SGA的总大小.但是不能超过SGA_MAX_SIZE 参数所设定的值.
   如果没有指定,那么默认把所有初始化参数中指定的内存组件的和作为期缺省值.

使用自动共享内存管理
        通过使用SGA_TARGET参数来启用自动共享内存管理.以前手动分配的类似java_pool,large_pool这样的共享内存组件将被自动管理,另外,你必须确保STATISTICS_LEVEL初始化参数设置为TYPICAL(默认值)或ALL.
   SGA_TARGET初始化参数反映了SGA的大小.

表2-3 自动分配大小的SGA组件和相应的参数

SGA 组件                                                                             初始化参数
固定的SGA和其他Oracle数据库实例需要的内部分配  不可用
共享池                                                                                  SHARED_POOL_SIZE
大型池                                                                                  LARGE_POOL_SIZE
Java池                                                                                 JAVA_POOL_SIZE
缓冲区高数缓存                                                                 DB_CACHE_SIZE

表2-4 手动分配大小的使用SGA_TARGET空间的SGA组件

SGA 组件                                                 初始化参数
日志缓冲区                                              LOG_BUFFER
The keep and recycle buffer caches DB_KEEP_CACHE_SIZE
                                                                 DB_RECYCLE_CACHE_SIZE
 
非标准缓冲区高数缓存块大小             DB_nK_CACHE_SIZE
流池                                                         STREAMS_POOL_SIZE


在手动管理模式下执行如下SQL查询得到SGA_TARGET的值.

SELECT (
   (SELECT SUM(value) FROM V$SGA) -
   (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)
   ) "SGA_TARGET"
FROM DUAL;
       然后你可以删除由Oracle自动管理的共享内存相应的初始化参数.
       例如,当前你在手动管理模式下由如下配置,并且SGA_MAX_SIZE 设置为 1200M:

SHARED_POOL_SIZE = 200M
DB_CACHE_SIZE = 500M
LARGE_POOL_SIZE=200M

       对其动态性能视图的查询结果如下

SHARED_POOL_SIZE = 200M
DB_CACHE_SIZE = 500M
LARGE_POOL_SIZE=200M

     对其相应的动态性能视图查询结果如下:

SELECT SUM(value) FROM V$SGA = 1200M
SELECT CURRENT_VALUE FROM V$SGA_DYNAMIC_FREE_MEMORY = 208M

        你可以替换手动分配大小的参数 ( SHARED_POOL_SIZE, DB_CACHE_SIZE, LARGE_POOL_SIZE ) 来发挥自动共享内存管理的优点.

SGA_TARGET=992M

992M 是1200M 减去208M得到的.

By default, when you set a value for SGA_TARGET, the value of the parameters corresponding to all the automatically sized SGA components is set to zero. However, you can still exercise some control over the size of the automatically sized components by specifying minimum values for the parameters corresponding to these components. Doing so can be useful if you know that an application cannot function properly without a minimum amount of memory in specific components. You specify the minimum amount of SGA space for a component by setting a value for its corresponding 初始化参数. Here is an example configuration:

SGA_TARGET = 256M
SHARED_POOL_SIZE = 32M
DB_CACHE_SIZE = 100M

In this example, the shared pool and the default buffer pool will not be sized smaller than the specified values (32 M and 100M, respectively). The remaining 124M (256 minus 132) is available for use by all the manually and automatically sized components.
The actual distribution of values among the SGA components might look like this:

Actual shared pool size = 64M
Actual buffer cache size = 128M
Actual Java pool size = 60M
Actual large pool size = 4M

         此参数值决定了SGA的最小分配空间.V$SGA_DYNAMIC_COMPONENTS 显示当前SGA组件的实际大小.你还可以用企业管理器内存配置页查看当前SGA组件的实际值.

SGA参数的动态修改
       你可以用ALTER SYSTEM SQL 语句动态修改SGA_TARGET参数和控制SGA内存组件的其他参数的值.在下面的段落种有描述
SGA_TARGET初始化参数的动态修改
       SGA_TARGET参数值可以增加到SGA_MAX_SIZE 参数所指定的值,也可以减少,如果减少SGA_TARGET的值,系统将调整共享内存的大小,并且释放内存.你可以减少SGA_TARGET的大小直到达到SGA内存组件的最小值为止.Oracle Database determines the minimum allowable value for SGA_TARGET taking into account several factors, including values set for the automatically sized components, manually sized components that use SGA_TARGET space, and number of CPUs.
       

        当SGA_TARGET被修改时,消耗的物理内存取决于操作系统.在有些UNIX平台上不支持动态共享内存.由SGA使用的物理内存的大小等于SGA_MAX_SIZE 参数设置的值.在这样的平台上设置SGA_TARGET参数小于SGA_MAX_SIZE参数的值没有实际的好处.在这些平台上不推荐设置SGA_MAX_SIZE参数.
      在其他平台上,比如Solaris和Windows消耗的物理内存等于SGA_TARGET参数设置的值.
      当SGA_TARGET参数调整大小时,受影响的仅仅时那些被自动管理的SGA内存组件,并且在初始化参数中没有为其设置最小值.手动管理的SGA内存组件不受影响.
     例如,假设你的环境由如下配置:    
SGA_MAX_SIZE = 1024M
SGA_TARGET = 512M
DB_8K_CACHE_SIZE = 128M

         在这个例子中, SGA_TARGET 可以动态的调整的1024M,也可以减小到Buffer Cache,Java Pool,Shared Pool,Large Pool中的一个或多个SGA内存组件减小到最小值.精确的值取决于环境因素,比如CPU数,但是DB_8K_CACHE_SIZE 的值会一直保持128M大小.
         当SGA_TARGE减小时, 如果自动管理的SGA内存组件已经设置了最小值,那么这些组件将不会再减小了.看看下面的参数.


SGA_MAX_SIZE = 1024M
SGA_TARGET = 512M
DB_CACHE_SIZE = 96M
DB_8K_CACHE_SIZE = 128M再

在这个例子中,如果SGA_TARGET减小,DB_8K_CACHE_SIZE 始终固定在128M大小,另外DB_CACHE_SIZE 不会小于96M大小.所以SGA_TARGET能减小的数量是有限的.

对自动管理组件修改参数

        如果没有设置SGA_TARGET初始化参数,那么自动SGA管理的功能是被禁用了的.因此,其初始化参数的含义与早期的版本相同.但是,当启用自动共享内存管理功能时,给被自动管理的SGA组件设置值,那么这个值被任务是该参数的下限.可以动态修改相应的参数值.
修改手动调整大小的参数
        手动调整大小的参数也可以动态的修改.但不是指定的最小值,而是精确值.
手工共享内存管理
        数如果你决定不使用自动共享内存管理,那么你必须手动配置SGA的每个组件.这节提供了关于设置那些控制每个SGA组件大小的初始化参数.
设置缓冲区高速缓存初始化参数
        缓冲区高速缓初始化参数决定了缓冲区高速缓SGA内存组件的大小.你可以用他们来指定不同数据库块大小的缓存数.是动态初始化参数.如果你打算在数据库中使用多种块大小,你必须设置DB_CACHE_SIZE初始化参数和至少一个DB_nK_CACHE_SIZE初始化参数.Oracle数据库分配一个合适的默认值给B_CACHE_SIZE参数,但是DB_nK_CACHE_SIZE的默认值为0,并且没有额外的高速缓存被分配.缓冲区的大小影响性能.更大的缓存大小将减少对磁盘的读写数,需要更多的内存,减少内存分页和交换.
DB_CACHE_SIZE 初始化参数
        DB_CACHE_SIZE 初始化参数取代了DB_BLOCK_BUFFERS 初始化参数,DB_BLOCK_BUFFERS使用于早期的版本中. DB_CACHE_SIZE 参数以字节单位指定标准块大小的缓冲区高速缓存的大小.因此,给 DB_CACHE_SIZE指定一个值, you would determine the number of buffers that you need and multiple that value times the block size specified in DB_BLOCK_SIZE.

为了兼容早期版本的数据库, DB_BLOCK_BUFFERS 参数仍然可以使用,但是它保留一个静态的参数,并且不能与其他动态大小调整的参数组合使用
DB_nK_CACHE_SIZE 初始化参数

非标准块的缓冲区块大小和数量由如下的初始化参数指定:
DB_2K_CACHE_SIZE
DB_4K_CACHE_SIZE
DB_8K_CACHE_SIZE
DB_16K_CACHE_SIZE
DB_32K_CACHE_SIZE

每个参数给相应的块大小指定缓冲区高速缓存的大小.例如:
DB_BLOCK_SIZE=4096
DB_CACHE_SIZE=12M
DB_2K_CACHE_SIZE=8M
DB_8K_CACHE_SIZE=4M

         在这个例子中,指定标准数据库块大小的参数值是4K.标准块大小的缓冲区高速缓存的大小为12M.
另外,2K和8K的高速缓存大小分别配置为8M和4M.

注意:
        不能使用DB_nK_CACHE_SIZE 参数来调整标准块的大小.例如,如果DB_BLOCK_SIZE设置为2K,
设置DB_2K_CACHE_SIZE. 等于2K是无效的.标准缓存的块大小总是由DB_CACHE_SIZE决定的. 
指定共享池大小
SHARED_POOL_SIZE 初始化参数是一个动态参数使你能够指定或调整SGA组件的共享池大小.
Oracle 数据库选择一个合适的默认值. 共享池的配置在<<Oracle Database Performance Tuning Guide>>中讨论.
指定大型池大小
LARGE_POOL_SIZE 初始化参数是一个动态参数使你能够指定或调整SGA组件的大型池大小.
大型池是一个可选的SGA组件.如果你想创建大型池,你必须指定LARGE_POOL_SIZE 初始化参数.
配置大型池的讨论在<<Oracle Database Performance Tuning Guide>>中.
指定Java池大小
JAVA_POOL_SIZE 初始化参数是一个动态参数使你能够指定或调整SGA组件的Java池大小.
Oracle 数据库选择一个合适的默认值. Java池的配置在<<Oracle Database Java Developer's Guide>>中讨论了.
指定流池大小
STREAMS_POOL_SIZE 初始化参数是一个动态参数使你能够指定或调整SGA组件的流池的大小.
如果STREAMS_POOL_SIZE被设置为0,那么Oracle流产品 将使用共享池来满足SGA内存的需求.
流池的配置在<<Oracle Streams Concepts and Administration>>中讨论了.

查看关于SGA的信息
下面的视图提供了关于SGA组件和他们的动态大小的信息:

      视图                                          描述

V$SGA                                    显示关于SGA的摘要信息.
V$SGAINFO                              显示关于SGA的大小信息,包括不同SGA组件的大小信息,内存颗粒大小,和自由内存空间.
V$SGASTAT                             显示SGA的详细信息.
V$SGA_DYNAMIC_COMPONENTS  显示SGA组件的信息.此视图摘要了从实例启动以来所有SGA大小调整操作信息.
V$SGA_DYNAMIC_FREE_MEMORY 显示为将来调整SGA大小可用的自由内存空间.
V$SGA_RESIZE_OPS Displays      关于最近400条碗橱大额SGA大小调整操作的信息.
V$SGA_CURRENT_RESIZE_OPS    显示当前进行中的关于SGA大小调整的操作信息.一个调整操作是SGA组件的动态增大或减小.

-------------------------------------------------------------------

在Oracle10g中,不必再如从前一样用下列各个参数分别指定SGA的每个部分的大小.也就是说不需要首先评估SGA各组件的大小,并且在init<SID>.ora初始参数文件中分组件指定.(当然某些组件如果不不使用是可以不指定的.比如java_pool_size).
shared_pool_size
java_pool_size
large_pool_size
db_cache_size

在10g中可用一个新参数SGA_TARGET来设定实列所需的SGA最大值,并替代以上参数.
假设,将SGA_TARGET设置为152M,则表明SGA最大为152M. 所有SGA组件如shared pool, buffer cache,large pool, java pool都需从其中分配. Oracle会自动为各组件指定初始值,并在运行过程中动态地调整各组件的
大小.毋须人工干预.


这样,只要设置了SGA_TARGET, 就毋须显式地定义shared pool,buffer pool,large pool和java pool的大小.

例如:定义SGA_TARGET=152M(block size为8k).
SQL> show parameter db_block_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192

SQL> show parameter sga_target

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 152M
Oracle会自动将内存分配给各组件:
SQL> show sga

Total System Global Area 159383552 bytes
Fixed Size 1218268 bytes
Variable Size 67111204 bytes
Database Buffers 88080384 bytes
Redo Buffers 2973696 bytes

使用sga_target参数有几点需要注意:
1. 当使用sga_target时, 若未设置sga_max_size,或设置了小于sga_target,则sga_max_size将等于sga_target.
SQL> show parameter sga

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 152M
sga_target big integer 152M

2. 当sga_target是可动态调整的,但其值不能大于sga_max_size.
SQL> alter system set sga_target=160M; alter system set sga_target=160M * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-00823: Specified value of sga_target greater than sga_max_size

 

分享到:
评论

相关推荐

    Oracle11g从入门到精通

    在《Oracle11g从入门到精通》中将对Oracle的众多概念进行介绍,并介绍其在实际应用中的使用,例如段、盘区、数据块、表空间、系统全局区(SGA)和程序全局区(PGA)、分区、回退段、重做日志,联机日志、归档日志、...

    oracle10g课堂练习II(1)

    Oracle Database 10 g :为网格计算设计的数据库 1-7 数据库体系结构:概述 1-8 Oracle 内存结构 1-9 Oracle 进程 1-11 概述 Oracle 实例管理 1-12 物理数据库结构 1-14 Oracle Managed Files (OMF) 1-16 ...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    第10章 RAC管理 10.1 Clusterware磁盘文件管理 10.1.1管理表决磁盘文件 10.1.2管理OCR文件 10.1.3表决磁盘和OCR的恢复案例 10.1.4管理OLR文件 10.1.5重建表决磁盘和OCR文件 10.1.6重新配置Grid ...

    Oracle11g数据库入门第4章

    进程全局区(Process Global Area,PGA) 用户全局区(User Global Area,UGA) 系统全局区(System Global Area,SGA) 固定SGA 重做缓冲区 块缓冲区缓存 共享池 大池 Java池 自动SGA内存管理 自动内存管理 小结

    Oracle 10g 开发与管理

    1.Vendition:销售管理系统(11个表)(略) 32 2. School:学生成绩管理系统(6个表) 32 四. SQL SELECT语句 34 1.Select语句的格式 34 2.Select … From … ——选择列(投影) 35 3.Where子句——选择行(选择)...

    Oracle 认证学习笔记

    2、系统全局区(system global area):在数据库服务器上启动一数据库时的一块共享内存区(简称sga)。它被看作是oracle数据库的一个大缓冲池,这里的数据可以被oracle的各个进程共用。 3、实例(instance):sga和...

    Oracle中自动共享内存管理特性深入分析

    一个 Oracle 例程的系统全局区域 (SGA) 包含几个内存区域(包括缓冲高速缓存、共享池、Java 池、大型池和重做日志缓冲)。这些池在操作系统的内存空间中占据了固定的内存数;它们的大小由 DBA 在初始化参数文件中...

    oracle 内存分配和调优 总结

    oracle 的内存可以按照共享和私有的角度分为系统全局区和进程全局区,也就是 SGA和 PGA(process global area or private global area)。

    ORACLE数据库优化设计方案

    二、充分利用系统全局区域SGA(SYSTEM GLOBAL AREA) 三、规范与反规范设计数据库 四、合理设计和管理表 五、索引Index的优化设计 六、多CPU和并行查询PQO(Parallel Query Option)方式的利用 七、实施系统资源管理...

    oracle数据库的优化

    优化系统全局区(SGA) 9 优化数据库缓冲区高速缓存: 错误!未定义书签。 优化共享池: 错误!未定义书签。 优化数据字典高速缓存: 14 优化游标: 15 注释:以上增加SGA分配的调整以SGA不被换出实存为限,否则SGA...

    培训讲义:Oracle 数据库体系结构

    每一次在数据库服务器上启动一数据库时,称为系统全局区(SYSTEM GLOBAL AREA)的一内存区(简称SGA)被分配,有一个或多个ORACLE进程被启动。该SGA 和 ORACLE进程的结合称为一个ORACLE数据库实例。一个实例的SGA和...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    4.2 系统全局区 133 4.2.1 固定SGA 137 4.2.2 重做缓冲区 137 4.2.3 块缓冲区缓存 138 4.2.4 共享池 145 4.2.5 大池 148 4.2.6 Java池 149 4.2.7 流池 150 4.2.8 自动SGA内存管理 150 4.3 小结 151 第5章 ...

    oracle 优化培训资料

    每次启动例程时,会分配系统全局区 (SGA) 并启动 Oracle 后台进程。后台进程代表调用进程执行各种功能。它们把为每个用户运行的多个 Oracle 程序所处理的功能统一起来。后台进程执行输入/输出 (I/O),并监视其它 ...

    ORACLE中的数据库、服务名、实例概要

    实例 就是管理相关库的内存结构的名字(由SGA(系统全局区)、PGA(程序全局区)、服务器进程、用户进程、后台进程等组成) 内存结构=SGA(系统全局区)+PGA(程序全局区) instance(实例)=SGA(系统全局区)+PGA(程序...

    Oracle自学(学习)材料 (共18章 偏理论一点)

    1 Oracle 结构组件 目标 1-2 基本结构概述 1-3 Oracle 服务器 1-4 Oracle 实例 1-5 建立连接和创建会话 1-6 Oracle 数据库 1-7 物理结构 1-8 内存结构 1-9 系统全局区(SGA) 1-10 共享池 1-12 库缓存 1-13 数据字典...

    oracle数据库dba管理手册

    1.5.1 系统全局区 15 1.5.2 环境区 17 1.5.3 程序全局区 17 1.6 后台进程 18 1.7 外部结构 20 1.7.1 重做日志 20 1.7.2 控制文件 21 1.7.3 跟踪文件与警告日志 21 1.8 基本数据库的实现 21 1.8.1 备份/恢复功能 22 ...

    oracle数据库优化

    优化系统全局区(SGA) 8 优化数据库缓冲区高速缓存: 错误!未定义书签。 优化共享池: 错误!未定义书签。 优化数据字典高速缓存: 13 优化游标: 13 注释:以上增加SGA分配的调整以SGA不被换出实存为限,否则SGA...

    Oracle优化53解

    这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。 因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ...

Global site tag (gtag.js) - Google Analytics