oracle18c中sga_target,重启后SGA_TARGET=SGA_MAX_SIZE

今天在网上看到一篇帖子,发现这个问题原来是根据oracle版本不同有不同结果,原来oracle也在不停的调试中

但是大原则,肯定是SGA_TARGET<=SGA_MAX_SIZE

我将这篇文档中的关键部分 摘录下来,然后关键字黑体化

正好大家也参考一下

下面是引用的内容

SGA_TARGET参数带来了ASMM的新特性,但是它的含义和SGA_MAX_SIZE的一样,也表示SGA最大的大小,于是它也就有了一个限制,那就是它的大小不能大于SGA_MAX_SIZE的大小。请看:

18:29:32 SQL> show parameter sga

NAME                                 TYPE            VALUE

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

lock_sga                             boolean         FALSE

pre_page_sga                         boolean         FALSE

sga_max_size                         big integer     1000M

sga_target                           big integer     300M

18:29:36 SQL> alter system set sga_target=1100m;

alter system set sga_target=1100m

*

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

从上面这个例子的错误报告中,我们还可以发现一点那就是SGA_TARGET是可以在本实例内动态修改的,请看:

18:29:46 SQL> alter system set sga_target=500m;

System altered.

问题又出现了,既然SGA_TARGET除了带来这个ASMM新特性以及可动态修改以外,它的含义和SGA_MAX_SIZE是一样的,即表示Oracle所能使用的SGA的最大大小。那么这里就有两个最大,虽然有限制SGA_TARGET不能大于SGA_MAX_SIZE大小,可是并没有限制它比它小啊。因此,当SGA_TARGET小于SGA_MAX_SIZE的时候,这两个最大,Oracle该听谁的呢?前面的例子,我们知道SGA_TARGET=500M < SGA_MAX_SIZE=1000M,那么继续试验,请看:

18:31:04 SQL> startup force

ORACLE instance started.

Total System Global Area 1048576000 bytes

Fixed Size                  1223392 bytes

Variable Size             637535520 bytes

Database Buffers          402653184 bytes

Redo Buffers                7163904 bytes

Database mounted.

Database opened.

18:35:17 SQL> show parameter sga

NAME                                 TYPE            VALUE

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

lock_sga                             boolean         FALSE

pre_page_sga                         boolean         FALSE

sga_max_size                         big integer     1000M

sga_target                           big integer     500M

18:35:31 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

从这个版本来看,这里似乎并没有发生改变。那说明是什么问题呢?很显然,SGA_MAX_SIZE仍然表示SGA的大小的上限值,而SGA_TARGET是SGA的所有组件的大小的最大值之和,即当SGA_TARGET< SGA_MAX_SIZE的时候,oracle就会忽略SGA_MAX_SIZE的值,SGA_TARGET也就成了SGA的在此实例中的上限制,它能动态改变大小,但是不能够大于SGA_MAX_SIZE的值。

有人曾经做过试验,在某些版本中(可能在我的版本之后的版本),当SGA_TARGET < SGA_MAX_SIZE时,实例重启以后SGA_MAX_SIZE就变成SGA_TARGET的大小了。

那么这就说明SGA_TARGET的处理,在不同的版本中是不一样的。那么在最新的11g中是什么样子的呢?下面来看看,也让我们猜测一下oracle对SGA_TARGET的处理方向:

18:52:15 SQL> show parameter sga

NAME                                 TYPE        VALUE

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

lock_sga                             boolean     FALSE

pre_page_sga                         boolean     FALSE

sga_max_size                         big integer 276M

sga_target                           big integer 0

18:52:31 SQL> alter system set sga_target=200m;

System altered.

18:52:38 SQL> show parameter sga

NAME                                 TYPE        VALUE

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

lock_sga                             boolean     FALSE

pre_page_sga                         boolean     FALSE

sga_max_size                         big integer 276M

sga_target                           big integer 276M

18:52:43 SQL> alter system set sga_target=202M;

alter system set sga_target=202M

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-00827: could not shrink sga_target to specified value

18:53:11 SQL> alter system set sga_target=322M;

alter system set sga_target=322M

*

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

18:57:50 SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

PL/SQL Release 11.1.0.6.0 - Production

CORE    11.1.0.6.0      Production

TNS for Linux: Version 11.1.0.6.0 - Production

NLSRTL Version 11.1.0.6.0 - Production

从试验中很显然的看到,在11g中,这个SGA_TARGET只能设置是等于SGA_MAX_SIZE的大小了,设置比它小,oracle会自动帮你调整,设置比它大,那还是出错。现在可以自己想想,oracle对SGA_TARGET的大小处理在往正确的简单的方向前进中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值