Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

Memory Management of Oracle

2025-02-22 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Database >

Share

Shulou(Shulou.com)05/31 Report--

This article focuses on "memory management of Oracle". Interested friends may wish to have a look at it. The method introduced in this paper is simple, fast and practical. Now let the editor to take you to learn "Oracle memory management" bar!

Oracle memory management mode

Oracle11g new parameters MEMORY_MAX_TARGET and MEMORY_TARGET for automatic management PGA and SGA are called automated memory management (Automatic Memory Management,AMM).

MEMORY_MAX_TARGET: the maximum value that MEMORY_TARGET can set. Non-dynamically adjustable.

MEMORY_TARGET: the maximum memory value that Oracle can use on the operating system. Dynamic parameter, MEMORY_TARGET is the sum of PAG and SGA. A memory_target of 0 is manual management, and a non-0 value is automatic management.

If memory_target is specified and memory_max_target is not specified, memory_max_target and memory_target are equal in size after restart

If memory_max_target is specified and memory_target is not specified, memory_target is 0 after restart

When setting memory_max_target

< memory_target 时,则重启后报错(ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET) sga_max_size : sga_max_size 是sga的最大值 。 sga_target : sga_target 是自动和手段管理; sga_target 为0 是手动管理,非0 是自动管理 oracle 11g 引入参数mymory_max_target 和memory_target 就是oracle的新特性自动内存管理,AMM 的引入, 组合出来有 5 种内存管理形式.如下: 自动内存管理(AMM): memory_target=非0,是自动内存管理 ,如果初始化参数 LOCK_SGA = true ,则 AMM 是不可用的。 自动共享内存管理(ASMM): 在memory_target=0 and sga_target=非0 是自动内存管理 手工共享内存管理: memory_target=0 and sga_target=0 指定 share_pool_size 、db_cache_size 等 sga 参数 自动 PGA 管理: memory_target=0 and workarea_size_policy=auto and PGA_AGGREGATE_TARGET=值 手动 PGA 管理: memory_target=0 and workarea_size_policy=manal 然后指定 SORT_AREA_SIZE 等 PGA 参数,一般不使用手动管理PGA; ========================================================================= racle的内存分为两个部分。一个是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调整记录。 ========================================================================= Oracle 9i引入pga_aggregate_target,可以自动对PGA进行调整; Oracle 10g引入sga_target,可以自动对SGA进行调整; Oracle 11g则对这两部分进行综合,引入memory_target,可以自动调整所有的内存,这就是新引入的自动内存管理特性。 自动内存管理是用两个初始化参数进行配置的: MEMORY_TARGET:动态控制SGA和PGA时,Oracle总共可以使用的共享内存大小,这个参数是动态的,因此提供给Oracle的内存总量是可以动态增大,也可以动态减小的。它不能超过MEMORY_MAX_TARGET参数设置的大小。默认值是0。 MEMORY_MAX_TARGET:这个参数定义了MEMORY_TARGET最大可以达到而不用重启实例的值,如果没有设置MEMORY_MAX_TARGET值,默认等于MEMORY_TARGET的值。使用动态内存管理时,SGA_TARGET和PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让Oracle完全控制内存管理,这两个参数应该设置为0。 memory_max_target是一个非动态参数,不能在memory范围动态改变,只能通过指明 scope=spfile这个条件来达到数据库在下次启动后让改变生效的目的。但是memory_target这个参数是可以动态调节的...也就是说不需要重新启动DB,就可以让其生效。 MEMORY_MAX_TARGET 是设定Oracle能占OS多大的内存空间;SGA_MAX_SIZE是Oracle SGA 区最大能占多大内存空间. 、 10g 的sga_max_size 是动态分配 Shared Pool Size,database buffer cache,large pool,java pool,redo log buffer 大小的,是根据Oracle 运行状况来重新分配SGA 各内存块的大小。PGA在10g中需要单独设定。 11g MEMORY_MAX_TARGET 参数包含SGA和PGA两部分。 在手动创建数据库时,只需要在创建数据库之前设置合适的MEMORY_TARGET和MEMORY_MAX_TARGET初始化参数。 下面来看看在11g 中Memory_target 设置和不设置对SGA/PGA 的影响: A :如果 Memory_target 设置为非 0 值 (下面有四种情况来对 SGA 和 PGA 的大小进行分配) 1 : sga_target 和 pga_aggregate_target 已经设置大小如果 Oracle 中已经设置了参数 sga_target 和 pga_aggregate_target ,则这两个参数将各自被分配为 最小值最为它们的目标值。 Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET ,大小和memory_max_size 一致。 2 : sga_target 设置大小, pga_aggregate_target 没有设置大小 那么 pga_aggregate_target 初始化值 =memory_target-sga_target 3 : sga_target 没有设置大小, pga_aggregate_target 设置大小 那么 sga_target 初始化值 =memory_target-pga_aggregate_target 4 : sga_target 和 pga_aggregate_target 都没有设置大小 Oracle 11g中对这种 sga_target 和 pga_aggregate_target 都没有设定大小的情况下, Oracle 将对这两个值没有最小值和默认值。 Oracle 将根据数据库 运行状况进行分配大小。 但在数据库启动是会有一个固定比例来分配: sga_target =memory_target *60% pga_aggregate_target=memory_target *40% B :如果 Memory_target 没有设置或 =0 (在 11g 中默认为 0 ) 11g中默认为 0 则初始状态下取消了 Memory_target 的作用,完全和 10g 在内存管理上一致,完全向下兼容。 (也有三种情况来对 SGA 和 PGA 的大小进行分配) 1 : SGA_TARGET 设置值,则自动调节 SGA 中的 shared pool,buffer cache,redo log buffer,java pool,larger pool等内存空间的大小。 PGA 则依赖 pga_aggregate_target 的大小。 sga 和 pga 不能自动增长和自动缩小。 2 : SGA_target 和 PGA_AGGREGATE_TARGET 都没有设置 SGA 中的各组件大小都要明确设定,不能自动调整各组建大小。 PGA 不能自动增长和收缩。 3 : MEMORY_MAX_TARGET 设置 而 MEMORY_TARGET =0 这种情况先和 10g 一样,不做说明 在11g 中可以使用下面看各组件的值 SQL>

Show parameter target

NAME TYPE VALUE

-

Archive_lag_target integer 0

Db_flashback_retention_target integer 1440

Fast_start_io_target integer 0

Fast_start_mttr_target integer 0

Memory_max_target big integer 1024M

Memory_target big integer 1024M

Pga_aggregate_target big integer 0

Sga_target big integer 0

If you need to monitor the state of Memory_target, you can use the following three dynamic attempts:

V$MEMORY_DYNAMIC_COMPONENTS

V$MEMORY_RESIZE_OPS

V$memory_target_advice

Use the following Command to resize:

SQL > ALTER SYSTEM SET MEMORY_MAX_TARGET = 1024m SCOPE = SPFILE

SQL > ALTER SYSTEM SET MEMORY_TARGET = 1024m SCOPE = SPFILE

SQL > ALTER SYSTEM SET SGA_TARGET = 0 SCOPE = SPFILE

SQL > ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0 SCOPE = SPFILE

At this point, I believe that you have a deeper understanding of "Oracle memory management", might as well come to the actual operation! Here is the website, more related content can enter the relevant channels to inquire, follow us, continue to learn!

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Database

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report