When we talking about memory management in Oracle, we are refering to SGA and PGA. The management methold including below.

  • automatic mangement

    • Enable automatic memory management
    • monitor and tune automatic memory management
  • manual management
    • Automatic shared memory management - for the SGA
    • Manual shared memory management - for the SGA
    • Automatic PGA memory management - for the instance PGA
    • Manual PGA memory management - for the instance PGA

automatic management

In oracle 11g r2, the SGA and PGA are managed together. So to enable the automatic memory management, you can just set the a target memory size initialization parameter (MEMORY_TARGET) and optionally a maximum memory size initialization parameter (MEMORY_MAX_TARGET).The total memory that the instance uses remains relatively constant, based on the value of MEMORY_TARGET,(Here it said the memory will be remain relatively constant. Is it possible that the memory--the sum of PGA and SGA will exceed the current setting of memory_target? ) and the instance automatically distributes memory between the system global area (SGA) and the instance program global area (instance PGA). As memory requirements change, the instance dynamically redistributes memory between the SGA and instance PGA.

MEMORY_TARGET initialization parameter is dynamic, you can change MEMORY_TARGET at any time without restarting the database.MEMORY_MAX_TARGET, which is not dynamic, serves as an upper limit so that you cannot accidentally set MEMORY_TARGET too high, and so that enough memory is set aside for the database instance in case you do want to increase total instance memory in the future. Because certain SGA components either cannot easily shrink or must remain at a minimum size, the instance also prevents you from setting MEMORY_TARGET too low.

enable automatic memory management

If you didnt enable automatic memory management during the database creation time, you can enable it at any time. This will include a shutdown and restart of the database.

1. connect to database by sys

2. compute the mininum value for memory_target.

Determine the current sizes of SGA_TARGET and PGA_AGGREGATE_TARGET by entering the following SQL*Plus command:

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 0
memory_target big integer 0
parallel_servers_target integer 16
pga_aggregate_target big integer 90M
sga_target big integer 272M

Run the following query to determine the maximum instance PGA allocated since the database was started:

select value from v$pgastat where name='maximum PGA allocated';

Compute the maximum value(Here using the max(pga_aggrgate_target,maximum PGA allocated). So it means the PGA allocated can exceed the pga_aggregate_target? Then how about the sga_target and SGA allocated? Memory_target and memory totally allocated?)

memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)

3.  For the MEMORY_MAX_TARGET initialization parameter, decide on a maximum amount of memory that you would want to allocate to the database for the foreseeable future. That is, determine the maximum value for the sum of the SGA and instance PGA sizes. This number can be larger than or the same as the MEMORY_TARGET value that you chose in the previous step.

4. Now do the following.

If you are using text initialization parameter file. Then you can manually edit the file as below.

memory_max_target = nM
memory_target = mM

Then restart the database.

If you are using server parameter file. Then you can set the memory_max_target first.

ALTER SYSTEM SET MEMORY_MAX_TARGET = nM SCOPE = SPFILE;

This parameter is not dynamic so you have to specify the scope = spfile.

Then restart your database. After the database is up.

ALTER SYSTEM SET MEMORY_TARGET = nM;
ALTER SYSTEM SET SGA_TARGET = 0;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;

Here you need to know that the preceding steps instruct you to set SGA_TARGET and PGA_AGGREGATE_TARGET to zero so that the sizes of the SGA and instance PGA are tuned up and down as required, without restrictions. You can omit the statements that set these parameter values to zero and leave either or both of the values as positive numbers. In this case, the values act as minimum values for the sizes of the SGA or instance PGA.

Monitor and tune automatic memory management

The dynamic performance view V$MEMORY_DYNAMIC_COMPONENTS shows the current sizes of all dynamically tuned memory components, including the total sizes of the SGA and instance PGA.

The view V$MEMORY_TARGET_ADVICE provides tuning advice for the MEMORY_TARGET initialization parameter.

SQL>  select * from v$memory_target_advice order by memory_size;

MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR    VERSION
----------- ------------------ ------------ ------------------- ----------
180 .5 458 1.344 0
270 .75 367 1.0761 0
360 1 341 1 0
450 1.25 335 .9817 0
540 1.5 335 .9817 0
630 1.75 335 .9817 0
720 2 335 .9817 0

The row with the MEMORY_SIZE_FACTOR of 1 shows the current size of memory, as set by the MEMORY_TARGET initialization parameter, and the amount of DB time required to complete the current workload. In previous and subsequent rows, the results show several alternative MEMORY_TARGET sizes. For each alternative size, the database shows the size factor (the multiple of the current size), and the estimated DB time to complete the current workload if theMEMORY_TARGET parameter were changed to the alternative size. Notice that for a total memory size smaller than the current MEMORY_TARGET size, estimated DB time increases. Notice also that in this example, there is nothing to be gained by increasing total memory size beyond 450MB. However, this situation might change if a complete workload has not yet been run.

manual memory management

Automatic shared memory management

This paragraph including below topics.

  • About Automatic Shared Memory Management

  • Components and Granules in the SGA

  • Setting Maximum SGA Size

  • Setting SGA Target Size

About Automatic Shared Memory Management

Automatic Shared Memory Management simplifies SGA memory management. You specify the total amount of SGA memory available to an instance using theSGA_TARGET initialization parameter and Oracle Database automatically distributes this memory among the various SGA components to ensure the most effective memory utilization.

Components and Granules in the SGA

We already know that Automatic SGA management means the SGA components can be resized automatically based on requirements. The memory unites used in the allocation and deallocation is called Granules here.The granule size is determined by the amount of SGA memory requested when the instance starts. Specifically, the granule size is based on the value of the SGA_MAX_SIZE initialization parameter.

Setting maxium SGA size

The SGA_MAX_SIZE initialization parameter specifies the maximum size of the System Global Area for the lifetime of the instance(So it means that the SGA size will never exceed the SGA_MAX_SIZE? Unlike the PGA_AGGREGATE_SIZE may be exceeded?). You can dynamically alter the initialization parameters affecting the size of the buffer caches, shared pool, large pool, Java pool, and streams pool but only to the extent that the sum of these sizes and the sizes of the other components of the SGA (fixed SGA, variable SGA, and redo log buffers) does not exceed the value specified bySGA_MAX_SIZE.

If you do not specify SGA_MAX_SIZE, then Oracle Database selects a default value that is the sum of all components specified or defaulted at initialization time. If you do specify SGA_MAX_SIZE, and at the time the database is initialized the value is less than the sum of the memory allocated for all components, either explicitly in the parameter file or by default, then the database ignores the setting for SGA_MAX_SIZE and chooses a correct value for this parameter.

Seting SGA_TARGET

One important thing you should know. The STATISTICS_LEVEL initialization parameter must be set to TYPICAL (the default) or ALL for automatic shared memory management to function.

When you set SGA target, some components can be automatically based on the sga_target. Listed below

The shared pool        SHARED_POOL_SIZE
The large pool LARGE_POOL_SIZE
The Java pool JAVA_POOL_SIZE
The buffer cache DB_CACHE_SIZE
The Streams pool STREAMS_POOL_SIZE

Some components need to be manually set, if they are set, they will take some space from the SGA_TARGET and the rest space will be allocated to the components above.

The log buffer                        LOG_BUFFER
The keep and recycle buffer caches DB_KEEP_CACHE_SIZE/DB_RECYCLE_CACHE_SIZE
Nonstandard block size buffer caches DB_nK_CACHE_SIZE

After setting the SGA_TARGET you can choose to set the componenet corresponding parameter to zero or not. If you set these parameters to zero, they are fully automatica management. If you set those values to non-zero values, these values will be the mininum value for these component

Monitoring and Tuning SGA Target Size

The V$SGAINFO view provides information on the current tuned sizes of various SGA components.

The V$SGA_TARGET_ADVICE view provides information that helps you decide on a value for SGA_TARGET.

SQL> select * from v$sga_target_advice order by sga_size;

  SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
. 1.6578
. 1.2552 1.25 .
1.5 .
1.75 .
.

Manual shared memory management

Do not need to care

Automatic PGA management

By default, Oracle Database automatically and globally manages the total amount of memory dedicated to the instance PGA. You can control this amount by setting the initialization parameter PGA_AGGREGATE_TARGET. Oracle Database then tries to ensure that the total amount of PGA memory allocated across all database server processes and background processes never(Here said never. Actually it could exceed. So very interesting here. What is the point for this parameter? ) exceeds this target.

With automatic PGA memory management, sizing of SQL work areas for all dedicated server sessions is automatic and all *_AREA_SIZE initialization parameters are ignored for these sessions. At any given time, the total amount of PGA memory available to active work areas on the instance is automatically derived from the parameter PGA_AGGREGATE_TARGET. This amount is set to the value of PGA_AGGREGATE_TARGET minus the PGA memory allocated for other purposes (for example, session memory). The resulting PGA memory is then allotted to individual active work areas based on their specific memory requirements.

There are dynamic performance views that provide PGA memory use statistics. Most of these statistics are enabled when PGA_AGGREGATE_TARGET is set.

  • Statistics on allocation and use of work area memory can be viewed in the following dynamic performance views:

V$SYSSTAT
V$SESSTAT
V$PGASTAT
V$SQL_WORKAREA
V$SQL_WORKAREA_ACTIVE
  • The following three columns in the V$PROCESS view report the PGA memory allocated and used by an Oracle Database process:

PGA_USED_MEM
PGA_ALLOC_MEM
PGA_MAX_MEM

Manual PGA management

Don`t need to care.

最新文章

  1. Appium+python的一个简单完整的用例
  2. Windows中创建桌面快捷方式
  3. android自定义控件(5)-实现ViewPager效果
  4. PHP之数据类型
  5. [问题2014S05] 解答
  6. UI设计的分类
  7. 重构第2天:方法搬移(Move Method)
  8. ajax(ajax开发与入门)
  9. 转:CPU与内存的那些事
  10. ASDL + WN725N 配置无线AP
  11. vim: 搭建vim看代码的环境
  12. 【JAVASCRIPT】React学习-巧用 props 的 children 属性实现内容填充
  13. The based of tuning
  14. Python/MySQL(三、pymysql使用)
  15. flask+apscheduler+redis实现定时任务持久化
  16. 并发系列2:Java并发的基石,volatile关键字、synchronized关键字、乐观锁CAS操作
  17. 爬虫之 beautifusoup4
  18. Java微信二次开发(五)
  19. Linux学习之挂载光盘和U盘(六)
  20. Getting started with Processing 第十三章——延伸(1)

热门文章

  1. ACM_求f(n)
  2. 301 Remove Invalid Parentheses 删除无效的括号
  3. 国内使用pip / pip with GFW / pip 镜像
  4. HTTP的报文格式、GET和POST格式解析
  5. 树莓派zero_w设置中文(已成功)
  6. 华硕(ASUS)X554LP笔记本在64位win7下无线网络连接问题
  7. 主从 binlog_format 设置关系
  8. Fiddler 修改响应内容
  9. Python-Day07-图形用户界面和游戏开发
  10. CPU总线