cqlinx 发表于 2018-9-26 11:10:06

Oracle 内存一 手动内存管理,自动内存管理

  oracle的内存分为两个部分。一个是SGA(system global area),一个是PGA(program global area)。所谓的内存管理,就是对这两部分区域进行管理。oracle的内存管理经理了如下发展:
  oracle 9i   PGA自动管理,SGA手动管理
  oracle10g PGA自动管理,SGA自动管理
  oracle11g PGA,SGA统一自动管理
  先看9i时期的PGA自动管理,SGA手动管理
  这时期PGA管理有两个选择,手动和自动。
  手动时,设置WORKAREA_SIZE_POLICY为MANUAL, 设置各种*_AREA_SIZE的值比如SORT_AREA_SIZE_HASH_AREA_SIZE就可以实现手动PGA管理。
  自动时,设置WORKAREA_SIZE_POLICY为AUTO,设置PGA_AGGREAGATE_TARGET的值,则为自动PGA管理。
  这时期SGA的管理只可以手动管理,但是相比之前有了进步,可以动态的管理。
  再看10g时期的PGA自动管理,SGA自动管理
  这时期PGA和9i一样,都可以手动和自动。
  这时期的SGA则有了进步,可以手动管理,也增加了自动管理的选择。
  设置SGA_TARGET,就可以实现自动SGA管理。
  现在看11g时期的PGA,SGA统一自动管理
  这时期的内存管理向前兼容。
  PGA可以手动,自动管理
  SGAK也可以手动,自动管理
  但是有了一个更方便的特性,就是把PGA,SGA的自动整合到一起,通过MEMORY_TARGET来管理。这时有了两个参数MEMORY_TARGET,MEMORY_MAX_TARGET.有了这两个参数,就可以把PGA,SGA作为一个整体管理。
  有一些要注意的地方是
  1.如果设置了MEMORY_TARGET的同时还设置了SGA_TARGET,PGA_TARGET 怎么办呢?这时候,SGA_TARGET和PGA_TARGET的值如果小于MEMORY_TARGET,那么oracle就会把他们作为SGA,和PGA的最小值,如果他们比MEMORY_TARGET还大,那么oracle就会报错。
  2.PGA是跟每一个oracle server 进程相关的,所以WORKAREA_SIZE_POLICY应该是可以设置在session级别,也可以设置在system级别。
  3. 几个视图比较有用,V$MEMORY_DYNAMIC_COMPONENTS会展示动态调整的内存组件大小。 V$MEMORY_RESIZE_OPS展示了最近的800条SGA调整记录。

页: [1]
查看完整版本: Oracle 内存一 手动内存管理,自动内存管理