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

SGA_TARGET大于SGA_MAX_SIZE的真实案例

阅读更多

   今天在给库户数据库健康检查的时候,发现个很奇怪的问题,SGA_TARGET参数的值竟然大于SGA_MAX_SIZE参数的值。

NAME                                 TYPE        VALUE

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

sga_max_size                         big integer 1984M

sga_target                           big integer 2000M

大家应该都知道SGA_MAX_SIZEORACLE可用的最大SGASGA_TARGETORACLE自动管理的SGASGA_TARGET可以小于等于SGA_MAX_TARGET,但不能大于SGA_MAX_SIZE,即使可以大于SGA_MAX_SIZE,也是没有意义的,所以这个现象应该是不会出现的才对,我做了些实验,也没有模拟出来。

SQL> show parameter sga_

NAME                   TYPE                 VALUE

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

sga_max_size           big integer          300M

sga_target             big integer          300M

    我的数据库现在SGA_MAX_SIZESGA_TARGET参数的值都是300M,现在将SGA_TARGET的值改为350M,如果直接修改肯定会报错。

SQL> alter system set sga_target=350M;

alter system set sga_target=350M

*

1 行出现错误:

ORA-02097: 无法修改参数, 因为指定的值无效

ORA-00823: 指定的 sga_target 的值大于 sga_max_size

    如果指定SCOPE=SPFILE,重启数据库后,如果是10g的数据库,SGA_MAX_TARGET参数的值也会被更改为350M,如果是11g的数据库,会报ORA-00823错误,下面是10g的数据库修改SGA_TARGET参数情况。

SQL> show parameter sga_

NAME                                 TYPE        VALUE

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

sga_max_size                         big integer 300M

sga_target                           big integer 300M

SQL> select * from v$version;

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE    10.2.0.1.0      Production

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 – Production

SQL> alter system set sga_target=350M scope=spfile;

System altered.

SQL> startup force

ORACLE instance started.

Total System Global Area  368263168 bytes

Fixed Size                  1374668 bytes

Variable Size             239076916 bytes

Database Buffers          121634816 bytes

Redo Buffers                6176768 bytes

Database mounted.

Database opened.

SQL> show parameter sga_

NAME                                 TYPE        VALUE

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

sga_max_size                         big integer 350M

sga_target                           big integer 350M

    下面是11g数据库修改SGA_TARGET参数情况。

SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for 32-bit Windows: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> alter system set sga_target=350M scope=spfile;

系统已更改。

SQL> startup force;

ORA-00823: Specified value of sga_target greater than sga_max_size

    可是客户的数据库为什么SGA_TARGET的值会大于SGA_MAX_SIZE呢?这应该是和ORACLEgranule(粒度)有关系,granuleORACLE内存中的一片连续区域,是连续虚拟内存分配的单位,粒度是9i新引入的参数,其大小取决于SGA_MAX_SIZE参数所定义的SGA总的大小,9i的数据库,linux环境下,SGA_MAX_SIZE<128MB的时候,一个granule4MSGA_MAX_SIZE>128MB的时候,一个granule16M32位的Windows环境下,SGA_MAX_SIZE<128MB的时候,一个granule4MSGA_MAX_SIZE>128MB的时候,一个granule8M10g的数据库,linux环境下,SGA_MAX_SIZE<1g的时候,一个granule4MSGA_MAX_SIZE>1g的时候,一个granule16M32位的Windows环境,SGA_MAX_SIZE<1g的时候,一个granule4MSGA_MAX_SIZE>1g的时候,一个granule16Mgranule受隐含参数“_ksmg_granule_size控制,建议不要修改,ORACLE在分配内存的时候,是以granule为单位比如,即使手工设置的shared pool大小不是granule的整数倍,ORACLE会自动设置为granule的整数倍,例如:

SQL> select name,bytes from v$sgainfo where name in('Shared Pool Size','Granule

Size');

NAME                                  BYTES

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

Shared Pool Size                  192937984

Granule Size                        4194304

         我的数据库granule大小为4Mshared pool184M,设置shared pool 185MORACLE将自动将shared pool 设置为188M

SQL> alter system set shared_pool_size=185M;

系统已更改。

SQL> show parameter shared_pool_size

NAME                     TYPE                 VALUE

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

shared_pool_size         big integer          188M

         我们的这个客户是64位的linuxORACLE10gR2数据库,SGA大于1984Mgranule16M

SQL> show parameter sga_

NAME                                 TYPE        VALUE

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

sga_max_size                         big integer 1984M

sga_target                           big integer 2000M

SQL> select name,bytes/1024/1024 from v$sgainfo where name=’ Granule Size';

NAME                                  BYTES

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

Granule Size                               16

    SGA_MAX_SIZE也是16M的整数倍,为什么SGA_TARGET会比SGA_MAX_SIZE大一个granule呢? 查看客户的参数文件,里面只有SGA_TARGET=2097152000,并没有SGA_MAX_SIZE参数的设置,按理说SGA_MAX_SIZE参数的值应该会自动设置和SGA_TARGET一样才对。而且AWR显示虽然SGA_TARGETSGA_MAX_SIZE大了一个granule,但这是没有意义的,数据库真实用到的SGA并你没有超过SGA_MAX_SIZE的限制。

 

    至于为什么客户的这个数据库SGA_TARGET回比SGA_MAX_SIZE的值大,我想可能是和ORACLE的内部算法有关系,或者,ORACLE算错数了!!!!

0
0
分享到:
评论

相关推荐

    SGA学习笔记

    ### SGA学习笔记 #### 一、System Global Area (SGA) 概述 系统全局区域(System Global Area, SGA)是Oracle...通过合理设置SGA_MAX_SIZE和SGA_TARGET等参数,并启用ASMM,可以显著提高数据库的响应速度和稳定性。

    更改ORACLE SGA的详细步骤

    注意:在 Oracle 11g 中,`sga_max_size` 不能大于 `memory_max_size`。 3. **重启数据库实例**: 修改参数后,需要立即关闭并重新启动数据库实例以应用更改: ``` shutdown immediate; start up; ``` 4. **...

    oracle sga设置

    通过合理设置SGA_MAX_SIZE、SGA_TARGET等参数,并根据业务需求调整各个池的大小,可以使Oracle数据库更好地适应不同的工作负载,从而提高整体性能。同时,建议定期监控SGA的使用情况,以便及时调整配置。

    oracle11G调整物理内存提示ORA-00845 MEMORY_TARGET

    "Oracle 11g调整物理内存提示...我们还讨论了 Oracle 11g 中的内存管理机制,包括 MEMORY_TARGET、MEMORY_MAX_TARGET 和 SGA_TARGET 三个参数的作用。通过正确地设置这些参数,可以提高 Oracle 数据库的性能和稳定性。

    Solaris的DISM–被忽略的重要特性

    在10g及以上的版本中,设置SGA_MAX_SIZE=SGA_TARGET,以及在11g版本中确保MEMORY_TARGET和MEMORY_MAX_TARGET未设置,这样才能确保数据库启动时不使用DISM。 文章还提供了一个案例,描述了在某省BOSS系统中发生的...

    oracle自动内存管理

    2. **`MEMORY_MAX_TARGET`**:该参数定义了数据库实例可以使用的最大物理内存上限,其值应大于或等于`MEMORY_TARGET`。当`MEMORY_MAX_TARGET`被设置时,Oracle将不会让内存使用量超过这个上限值,以防止过度消耗系统...

    oracle memory manage 1

    AMM主要通过两个参数来控制:`MEMORY_TARGET` 和 `MEMORY_MAX_TARGET`。 ### 了解`MEMORY_TARGET` `MEMORY_TARGET` 参数用于设置Oracle实例可以使用的最大内存总量。它包括共享池、数据缓冲区缓存、重做日志缓冲区...

    oracle 内存优化

    但需要注意,如果未设置SGA_MAX_SIZE或设置值小于SGA_TARGET,SGA_MAX_SIZE将默认等于SGA_TARGET。同时,SGA_TARGET的值不能超过SGA_MAX_SIZE,以防止内存过度分配。 PGA是每个服务进程的私有内存区域,包含了服务...

    oracle学习(内存参数设置)

    SGA_MAX_SIZE和SGA_TARGET是两个重要的参数,SGA_MAX_SIZE指定了SGA可以使用的最大内存大小,而SGA_TARGET指定了SGA可以使用的最大内存大小,并可以自动调节各个区域的大小,使之达到系统性能最佳状态的最合理大小。...

    oracle memory manage

    ALTER SYSTEM SET MEMORY_MAX_TARGET = nM SCOPE = SPFILE; ``` - 其中,`n` 的值应在上一步骤中确定。 - 注意:`SCOPE = SPFILE` 表示修改的是 spfile 文件,这样在下次启动数据库时会生效。 2. **重启数据库*...

    Oracle_SGA

    - **SGA_MAX_SIZE**:这是一个重要的参数,用于限定SGA的最大大小。它可以动态调整`buffer cache`、`shared pool`、`large pool`、`java pool`和`streams pool`等参数的大小,但不能让这些组件的总大小超过`SGA_MAX_...

    Actualtests_Oracle_1Z0-043

    - `SGA_MAX_SIZE = 2GB`:设置SGA的最大大小为2GB。 - `SGA_TARGET = 0`:禁用自动SGA管理。 - `SHARED_POOL_SIZE = 120MB`:设置共享池大小为120MB。 - `DB_CACHE_SIZE = 896MB`:设置数据库缓存大小为896MB。 ...

    Actual_Oracle 1Z0-043 V11.17.06.pdf

    其中提到的关键参数有 DB_BLOCK_SIZE、SGA_MAX_SIZE、SGA_TARGET、SHARED_POOL_SIZE、DB_CACHE_SIZE、STREAM_POOL_SIZE 和 LARGE_POOL_SIZE。正确理解这些参数的作用及它们之间的相互影响对于优化数据库性能至关重要...

    原创文档详细说明ORACLE10G参数文件PFILE与SPFILE

    `sga_target`用于自动管理SGA各个组件的大小,而`sga_max_size`限制了SGA的总大小。如果`sga_target`设置为0,意味着自动管理功能未启用,SGA大小由手动配置的各组件大小决定,如`db_cache_size`、`java_pool_size`...

    ORACLE-SGA.docx

    - `SGA_MAX_SIZE`:限制SGA的最大使用量,确保所有组件总和不超过这个值。 - `SHARED_POOL_SIZE`、`JAVA_POOL_SIZE`、`LARGE_POOL_SIZE`、`STREAMS_POOL_SIZE`、`DB_CACHE_SIZE`和`LOG_BUFFER`:分别控制相应内存池...

    linux下的Oracle数据库安装,卸载和静默安装

    sga_max_size=500M job_queue_processes=10 undo_management=auto undo_tablespace=undotbs audit_file_dest=$ORACLE_BASE/admin/orcl/adump background_dump_dest=$ORACLE_BASE/admin/orcl/bdump core_dump_dest=$...

Global site tag (gtag.js) - Google Analytics