龙空技术网

龙空技术网

「oracle参数」深入解析SGA_MAX_SIZE与SGA_TARGET 区别和作用

波波说运维 516

前言:

此时我们对“oracle 调整sga”大概比较重视,姐妹们都需要剖析一些“oracle 调整sga”的相关知识。那么小编也在网上收集了一些对于“oracle 调整sga””的相关知识,希望各位老铁们能喜欢,朋友们一起来了解一下吧!

SGA概述

Oracle的SGA包括以下几个部分,可以通过show sga命令或者是通过查看v$sga视图来查看SGA的大概组成:

 SQL> show sgaTotal System Global Area 1048576000 bytesFixed Size 1223392 bytesVariable Size 847250720 bytesDatabase Buffers 192937984 bytesRedo Buffers 7163904 bytes17:42:05 SQL> select * from v$sga;NAME VALUE------------------------------ -------------Fixed Size 1223392.00Variable Size 847250720.00Database Buffers 192937984.00Redo Buffers 7163904.00

从上面可以大致的看到sga包括一个固定区,一个可变区,一个数据库缓存和一个redo缓存。这些是比较笼统的信息,具体的SGA是由以下几个部分组成的:

- 数据缓冲(Buffer Cache)

- 共享池(Shared Pool)

- 大池(Large Pool)

- Java池(Java Pool)

- 流池(Streams Pool --- 10g以后才有)

- 重做日志缓冲(Redo Log Buffer)

- 其他buffer caches(如KEEP, RECYCLE, and other block sizes cache等)

- Fixed SGA and other internal allocations。

其中,Shared Pool、Java Pool、Large Pool和Streams Pool这几块内存区的大小是相应系统参数设置而改变的,所以有通称为可变SGA(Variable SGA)。最后一个fixed sga部分,一般是在实例启动以后就固定在sga中了,是不会发生变化的,这个部分的区域一般小于100k。

理解了SGA的组成以后,下面就来解释一下有关设置SGA大小的两个参数SGA_MAX_SIZE和SGA_TARGET的含义。

SGA_MAX_SIZE

这个参数顾名思义,它用来控制SGA使用虚拟内存的最大大小,这里的虚拟内存的含义可能会有所模糊,先可以这样理解,就是Oracle所能在内存中给SGA分配的最大大小。

解释一下这里“虚拟内存”的含义,确切的应该这样说:实际内存和虚拟内存。我们知道当OS中实际内存不够使用的时候,OS就会去使用虚拟内存。oracle是运行与os之上的一个系统软件,它也是一个程序,它所请求os给它多少内存用来作为其sga(比方说Oracle申请500M内存用作SGA,即SGA_MAX_SIZE=500M),os一般是不会在oracle启动的时候就给它全部的实际内存,而可能只给200M。随着程序的运行,Oracle不断的需要内存,而假设计算机的所有实际内存只有500M,那么很肯定的是OS不可能把全部500M实际内存分配给oracle的sga,可能也最多就给了350M,剩下的150M使用虚拟内存。Oracle的SGA达到500M的时候(即达到SGA_MAX_SIZE指定的大小),实际上这个sga由350M实际内存和150M的虚拟内存组成,如果这个时候Oracle想继续申请内存给SGA使用,那么OS是不会再给其分配内存,因为它已经达到了SGA_MAX_SIZE的最大值。这个例子,虽然比较极端,即使OS实际上比方说有1G内存,Oracle的SGA也未必全部由实际内存组成,可能是由400M实际内存和100M的虚拟内存组成,这是由操作系统的内存管理策略决定的。此时,很显然有个问题,假设我的机器物理内存(实际内存)足够多,如何让Oracle所申请的SGA内存全部在物理内存中呢,因为假设使用了虚拟内存,必定会带来额外的PAGE IN/PAGE OUT的I/O操作,这是很不合算的。这个问题其实就是在物理内存中固定SGA的问题,这要涉及到另外两个参数LOCK_SGA和PRE_PAGE_SGA以及具体操作系统是否支持内存锁定的问题了,对此在这不予讨论。

总之:当实例启动后,各个内存区只分配实例所需要的最小大小,在随后的运行过程中,再根据需要扩展他们的大小,而他们的总和大小受到了SGA_MAX_SIZE的限制。

根据前面的SGA的组成介绍,我们很容易得到一个计算SGA的实际值的公式,如下:

SGA实际大小 = DB_CACHE_SIZE

+ DB_KEEP_CACHE_SIZE

+ DB_RECYCLE_CACHE_SIZE

+ DB_nk_CACHE_SIZE

+ SHARED_POOL_SIZE

+ LARGE_POOL_SIZE

+ JAVA_POOL_SIZE

+ STREAMS_POOL_SIZE(10g中的新内存池)

+ LOG_BUFFERS+11K(Redo Log Buffer的保护页)

+ 1MB

+ 16M(SGA内部内存消耗,适合于9i及之前版本)

而SGA_MAX_SIZE就是它的各个部分内存区都达到定义的最大值的时候的大小之和。

修改SGA_MAX_SIZE的大小,必须要重新启动数据库实例。

这样就可能出现这样的一种情况,在spfile中,SGA各个内存区设置大小总和大于SGA_MAX_SIZE。这时,oracle会如下处理:当实例再次启动时,如果发现SGA各个内存总和大于SGA_MAX_SIZE,它会将SGA_MAX_SIZE的值修改为SGA各个内存区总和的值。

SGA_TARGET

在Oracle 10g中引入了一个非常重要的参数:SGA_TARGET,这也是Oracle 10g的一个新特性。

在10g之前,SGA的各个内存区的大小都需要通过各自的参数指定,并且都无法超过参数指定大小的值,尽管他们之和可能并没有达到SGA的最大限制。此外,一旦分配后,各个区的内存只能给本区使用,相互之间是不能共享的。拿SGA中两个最重要的内存区Buffer Cache和Shared Pool来说,它们两个对实例的性能影响最大,但是就有这样的矛盾存在:在内存资源有限的情况下,某些时候数据被cache的需求非常大,为了提高buffer hit,就需要增加Buffer Cache,但由于SGA有限,只能从其他区“抢”过来——如缩小Shared Pool,增加Buffer Cache;而有时又有大块的PLSQL代码被解析驻入内存中,导致Shared Pool不足,甚至出现4031错误,又需要扩大Shared Pool,这时可能又需要人为干预,从Buffer Cache中将内存夺回来。

有了这个新的特性后,SGA中的这种内存矛盾就迎刃而解了。这一特性被称为自动共享内存管理(Automatic Shared Memory Management ASMM),控制这一特性的,就仅仅是这个参数SGA_TARGE。设置这个参数后,你就不需要为每个内存区来指定大小了。SGA_TARGET指定了SGA可以使用的最大内存大小,而SGA中各个内存的大小由Oracle自行控制,不需要人为指定。Oracle可以随时调节各个区域的大小,使之达到系统性能最佳状态的个最合理大小,并且控制他们之和在SGA_TARGET指定的值之内。一旦给SGA_TARGET指定值后(默认为0,即没有启动ASMM),就自动启动了ASMM特性。

当启用Oracle的ASMM新特性以后,也不是SGA的所有区的大小都开始动态起来,只有以下的这些区的内存大小动态共享起来:

* Buffer cache (DB_CACHE_SIZE)* Shared pool (SHARED_POOL_SIZE)* Large pool (LARGE_POOL_SIZE)* Java pool (JAVA_POOL_SIZE)* Streams pool (STREAMS_POOL_SIZE)

而SGA中的其他区域的内存大小仍然是固定不共享的。

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

SQL> show parameter sgaNAME TYPE VALUE------------------------------------ --------------- ------------------------------lock_sga boolean FALSEpre_page_sga boolean FALSEsga_max_size big integer 1000Msga_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 invalidORA-00823: Specified value of sga_target greater than sga_max_size

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

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,那么继续试验,请看:

从这个版本来看,这里似乎并没有发生改变。那说明是什么问题呢?很显然,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中,这个SGA_TARGET只能设置是等于SGA_MAX_SIZE的大小了,设置比它小,oracle会自动帮你调整,设置比它大,那还是出错。现在可以自己想想,oracle对SGA_TARGET的大小处理在往正确的简单的方向前进中。

SGA_TARGET带来一个重要的好处就是,能使SGA的利用率达到最佳,从而节省内存成本。因为ASMM启动后,Oracle会自动根据需要调整各个区域的大小,大大减少了某些区域内存紧张,而某些区域又有内存空闲的矛盾情况出现。

觉得有用的走波关注哦!

标签: # oracle 调整sga

上一篇 Python数据分析(四)Pandas统计分析基础

下一篇 SQL基础知识——ALTER TABLE

热门标签

最新文章

  • 1980-2020年之间前10大连接器公司的市场份额

    线束世界 09-23
  • 唐三和小舞只生了2个娃,却称唐舞桐为小七,这小名有特殊意义

    您家汪叽已上羡 09-23
  • 苹果Mac电脑自动更新引发用户吐槽,关闭自动更新设置也不顶用

    驱动中国 09-23
  • Axure产品原型设计-图片验证码

    人人都是产品经理 09-23
  • Axure教程:简单开关按钮的实现

    人人都是产品经理 09-23

猜您喜欢

  • nmcli方法配置bond以及子接口

    nmcli方法配置bond以及子接口

    IT匠 05-27
  • 2022-python-27 for in举例

    2022-python-27 for in举例

    O33的精神世界 05-27
  • Vue.js 项目实践——创建记忆卡片游戏

    Vue.js 项目实践——创建记忆卡片游戏

    Echa攻城狮 05-27
  • 「首席架构师推荐」一系列很棒的的浏览器端JavaScript库资源

    「首席架构师推荐」一系列很棒的的浏览器端JavaScript库资源

    超级架构师 05-27
  • JavaScript 高级入门 对象 (Object) 对象 实例

    JavaScript 高级入门 对象 (Object) 对象 实例

    小焱2018 05-27

天下网标王阜阳市网站seo优化同行网站优化策略二级网站可以做优化吗麦积区网站seo优化排名优化网站软件立择火3星顶尖照明网站优化黄山网站整站优化套餐淮北网站优化公司哪里有濮阳网站优化推广哪家好怎么知道网站是否优化利川网站排名优化新网站整站优化方案网站积分优化系统靠谱吗网站优化平台百度发包优化网站佛山网站优化排名公司网站优化 月付费网站优化去哪学习SEO优化网站教程网站优化排名在线三只松鼠网站优化策略沈阳靠谱的电商网站优化长乐市百度网站优化新建网站优化从哪里来品牌网站优化代理项目泉州网站seo优化排名公司沛县优化网站排名智能网站优化哪家便宜宁波网站se0优化漯河网站优化推广香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化