How To Use Automatic Shared Memory Management (ASMM) In Oracle10g

PURPOSE

The main goal of this document is to show you how to put in place the ASMM facility introduced with Oracle10g, how to configure it, and also some examples on how to monitor its activity.

SCOPE & APPLICATION

All the DBAs and users concerned with Database Administration activities.

The ASMM Facility, How to Configure it and Review its Effect

1. Concept

Starting with Oracle version 9.0.1, some SGA parameters have been defined as ‘Dynamic’ parameters. The “ALTER SYSTEM” command may be used to grow/shrink their current values.
The whole SGA size is limited by the SGA_MAX_SIZE parameter that is the defined upper bound. Each SGA parameter is allocated in terms of Granules that is the Allocation Unit. The Granule size
will depend on the SGA_MAX_SIZE value and hardware platform.

Depending on the 9i version, the following parameters have been defined as dynamic parameters:

9.0.1: Shared Pool and Default Buffer Cache
9.2.0: Shared Pool, Default Buffer Cache, Large Pool
When you grow/shrink the dynamic size of one of the above parameters, the freed memory won’t be reallocated to another dynamic component automatically. You must do it manually if needed.

In 10G version, the ASMM has been introduced to relieve DBAs from sizing some parts of the SGA by themselves.

When enabled, it lets Oracle decide of the right size for some components of the SGA:

SHARED POOL
LARGE POOL
JAVA POOL
DB CACHE (using the DB_BLOCK_SIZE value)
They are called auto-tuned parameters.

The main objectives to justify this new functionality are:

Distribute the available memory depending of the current Workload. The MMAN process will take some regular memory snapshots to evaluate the needs and thereby the dispatching of the usable memory.

Enhance the memory usage depending of the activity. Avoid the memory errors like ORA-4031.
To get more details about the ASMM concepts, you can read the Note 257643.1 Oracle Database 10g Automated SGA Memory Tuning .

2. Configuration

The ASMM is driven by one init parameter: SGA_TARGET.

When set to 0, the ASMM is disabled and you run with the old method, so you need to define the above auto-tuned parameters by yourself.
The default value for SGA_TARGET is 0 so ASMM disabled.

The conditions to enable the ASMM mechanism are:

STATISTICS_LEVEL=TYPICAL or ALL

SGA_TARGET > 0

When you use a value greater than 0, the ASMM is enabled and the memory will be spread between all components: auto-tuned and manual parameters.

The SGA_TARGET value will therefore define the memory size sharable between auto-tuned and manual parameters.

The manual parameters are:

DB__CACHE_SIZE
DB_nK_CACHE_SIZE (non default block size)

LOG_BUFFER
FIXED SGA
STREAMS_POOL_SIZE
Amonst these manual parameters, some of them are modifiable or fixed (defined at startup only):

Modifiable: DB__CACHE_SIZE, STREAMS_POOL_SIZE
Fixed: DB_nK_CACHE_SIZE, FIXED SGA, LOG_BUFFER

The SGA_TARGET will be limited by the SGA_MAX_SIZE value. The SGA_MAX_SIZE cannot be modified dynamically.

SQL> show parameter sga_max

NAME TYPE VALUE
———————————— ———– —–
sga_max_size big integer 300M

If you try to define a larger SGA_TARGET, you will get the following message:

SQL> alter system set sga_target=400M;
alter system set sga_target=400M
*
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

3. Some Examples

3.1 Manual to ASMM

This can be the case when you just upgraded your database from an older version.

The SGA_TARGET is non defined, so 0 by default.

SQL> show parameter sga

NAME TYPE VALUE
—————- ———– ——-
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 164M <<<<<< show parameter size

NAME TYPE VALUE
———————————— ———– ——————-
bitmap_merge_area_size integer 1048576
create_bitmap_area_size integer 8388608
db_block_size integer 8192
db_cache_size big integer 24M <<<<<<<<<<<
db_keep_cache_size big integer 0
db_recovery_file_dest_size big integer 2G
db_recycle_cache_size big integer 0
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0
global_context_pool_size string
hash_area_size integer 131072
java_max_sessionspace_size integer 0
java_pool_size big integer 48M <<<<<<<<
large_pool_size big integer 8M <<<<<<<<<
max_dump_file_size string UNLIMITED
object_cache_max_size_percent integer 10
object_cache_optimal_size integer 102400
olap_page_pool_size big integer 0
parallel_execution_message_size integer 2148
sga_max_size big integer 164M
shared_pool_reserved_size big integer 4M
shared_pool_size big integer 80M <<<<<<<< show sga

Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145750508 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes

You decide to switch in ASMM mode:

SQL> alter system set sga_target=100M;

System altered.

SQL> show parameter sga

NAME TYPE VALUE
—————————– ———– —–
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 164M
sga_target big integer 164M

The SGA_TARGET has been adjusted silently to support the initial values for the auto-tuned parameters as listed in the V$SGA_DYNAMIC_COMPONENTS view.

SQL> select component, current_size, min_size, user_specified_size from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE
—————————— ———— ———- ——————-
shared pool 80 80 80
large pool 8 8 8
java pool 48 48 48
streams pool 0 0 0
DEFAULT buffer cache 24 24 24
KEEP buffer cache 0 0 0
RECYCLE buffer cache 0 0 0
DEFAULT 2K buffer cache 0 0 0
DEFAULT 4K buffer cache 0 0 0
DEFAULT 8K buffer cache 0 0 0
DEFAULT 16K buffer cache 0 0 0
DEFAULT 32K buffer cache 0 0 0
OSM Buffer Cache 0 0 24

13 rows selected.

This is a particular case when the SGA_MAX_SIZE parameter has been initialized by Oracle from the different init SGA parameters.
You don’t have any free memory available to grow the dynamic sizes.

SQL> select * from v$sga_dynamic_free_memory;

CURRENT_SIZE
————
0

If you have set the SGA_MAX_SIZE beyond the cumulative size of the different SGA parameters, let say to 300M:

SQL> alter system set sga_target=164M;

System altered.

SQL> show parameter sga

NAME TYPE VALUE
———————————— ———– ———–
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 300M
sga_target big integer 164M

SQL> select current_size/1024/1024 “CURRENT_SIZE” from v$sga_dynamic_free_memory;

CURRENT_SIZE
——————-
136

So you dispose now of 136M free for SGA expansion.

3.2 Increase/Reduce the SGA_TARGET

You have the means to change dynamically the size of the sga_target.

SQL> alter system set sga_target=200M;

System altered.

SQL> show parameter sga

NAME TYPE VALUE
———————————— ———– —–
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 300M
sga_target big integer 200M

SQL> select component, current_size/1024/1024 “CURRENT_SIZE”, min_size/1024/1024 “MIN_SIZE”, user_specified_size/1024/1024 “USER_SPECIFIED_SIZE” from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE
—————————— ———— ———- ——————-
shared pool 80 80 80
large pool 8 8 8
java pool 48 48 48
streams pool 0 0 0
DEFAULT buffer cache 60 24 24
KEEP buffer cache 0 0 0
RECYCLE buffer cache 0 0 0
DEFAULT 2K buffer cache 0 0 0
DEFAULT 4K buffer cache 0 0 0
DEFAULT 8K buffer cache 0 0 0
DEFAULT 16K buffer cache 0 0 0
DEFAULT 32K buffer cache 0 0 0
OSM Buffer Cache 0 0 24

We can see that the additional space has been used automatically. The DB_CACHE_SIZE has grown from 24M to 60M.

SGA SIZE = 80M+8M+48M+60M=196M so 4M are again reserved for the manual parameters.

We can also reduce the space reserved for auto-tuned parameters:

SQL> alter system set sga_target = 160M;
alter system set sga_target = 160M
*
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

The above example illustrates the fact that we cannot reduce the size below the sum of minimum values (MIN_SIZE): 80M+8M+48M+24M+4M (manual parameters)=164M.

Oracle will decide where to allocate the added space depending on the needs for each auto-tuned components based on the MMAN survey:

SQL> alter system set sga_target=300M;

System altered.

select component, current_size/1024/1024 “CURRENT_SIZE”, min_size/1024/1024 “MIN_SIZE”, user_sp
ecified_size/1024/1024 “USER_SPECIFIED_SIZE” from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE
—————————————————————- ———— ———- ———–
shared pool &nbs ; 80 80 80
large pool 8 8 8
java pool 48 48 48
streams pool 0 0 0
DEFAULT buffer cache 160 24 24 <<<<< show sga

Total System Global Area 314572800 bytes
Fixed Size 788692 bytes
Variable Size 145749804 bytes
Database Buffers 167772160 bytes
Redo Buffers 262144 bytes

SQL> alter system set streams_pool_size=10M;

System altered.

select component, current_size/1024/1024 “CURRENT_SIZE”, min_size/1024/1024 “MIN_SIZE”,
user_specified_size/1024/1024 “USER_SPECIFIED_SIZE”, last_oper_type “TYPE” from v$sga_dynamic_components;

SQL> /

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE TYPE
—————————— ———— ———- ——————- ——–
shared pool 80 80 80 STATIC
large pool 8 8 8 STATIC
java pool 48 48 48 STATIC
streams pool 12 0 12 GROW <<<<<<<<<<<
DEFAULT buffer cache 148 24 24 SHRINK <<<< select component, granule_size/1024/1024 “GRANULE_SIZE(Mb)” from v$sga_dynamic_components;

COMPONENT GRANULE_SIZE(Mb)
—————————— —————-
shared pool 4
large pool 4
java pool 4
streams pool 4
DEFAULT buffer cache 4
KEEP buffer cache 4
RECYCLE buffer cache 4
DEFAULT 2K buffer cache 4
DEFAULT 4K buffer cache 4
DEFAULT 8K buffer cache 4
DEFAULT 16K buffer cache 4
DEFAULT 32K buffer cache 4
OSM Buffer Cache 4

You can find the history of the resize operations in the V$SGA_RESIZE_OPS view:

SQL> select component, oper_type, oper_mode, initial_size/1024/1024 “INITIAL”, TARGET_SIZE/1024/1024
“TARGET”, FINAL_SIZE/1024/1024 “FINAL”, status from v$sga_resize_ops;

COMPONENT OPER_TYPE OPER_MODE INITIAL TARGET FINAL STATUS
—————————— ————- ——— ———- ———- ———- ———
DEFAULT buffer cache SHRINK MANUAL 160 148 148 COMPLETE
streams pool GROW MANUAL 0 12 12 COMPLETE

If you decide to decrease the sga_target, you will influence only the auto-tuned sizes, the manual parameters will stay untouched.

SQL> alter system set sga_target=200M;

SQL> select component, current_size/1024/1024 “CURRENT_SIZE”, min_size/1024/1024 “MIN_SIZE”,
user_specified_size/1024/1024 “USER_SPECIFIED_SIZE”, last_oper_type “TYPE” from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE TYPE
—————————— ———— ———- ——————- ————-
shared pool 80 80 80 STATIC
large pool 8 8 8 STATIC
java pool 48 48 48 STATIC
streams pool 12 0 12 GROW
DEFAULT buffer cache 48 24 24 SHRINK
KEEP buffer cache 0 0 0 STATIC
RECYCLE buffer cache 0 0 0 STATIC
DEFAULT 2K buffer cache 0 0 0 STATIC
DEFAULT 4K buffer cache 0 0 0 STATIC
DEFAULT 8K buffer cache 0 0 0 STATIC
DEFAULT 16K buffer cache 0 0 0 STATIC
DEFAULT 32K buffer cache 0 0 0 STATIC
OSM Buffer Cache 0 0 24 STATIC

The lowest limit for sga_target has become now: SUM(MIN_SIZE) for all auto-tuned parameters + CURRENT_SIZE(streams_pool) + 4M = 176M
If you try to override this limit, you will get the ORA-00827 error code.

3.3 Increase/Reduce the auto-tuned parameters

You can also decide to change the default distribution chosen by the MMAN process.

SQL> alter system set shared_pool_size=100M;

System altered.

SQL>select component, current_size/1024/1024 “CURRENT_SIZE”, min_size/1024/1024 ”
user_specified_size/1024/1024 “USER_SPECIFIED_SIZE”, last_oper_type “TYPE” from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE TYPE
—————————— ———— ———- ——————- ——-
shared pool 100 80 100 GROW <<<<< alter system set shared_pool_size=180M;
alter system set shared_pool_size=180M
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-04033: Insufficient memory to grow pool

The memory size increase for an auto-tuned parameter will be dependent on:

SGA_TARGET (200M in this case).
MIN_SIZE for the other auto-tuned parameters
CURRENT_SIZE for the manual parameters resized manually
SIZE already allocated for fixed parameters (4M)

The formula will be: SGA_TARGET – ((SUM(MIN_SIZE for other auto-tuned parameters) + (CURRENT_SIZE for manual parameters) + (size allocated for fixed parameters))

so Memory available for increase: 200M – ((8M + 48M + 24M)) + (12M) + (4M)) = 104M

SQL> alter system set shared_pool_size=104M

System altered.

SQL> select component, current_size/1024/1024 “CURRENT_SIZE”, min_size/1024/1024 “MIN_SIZE”,
user_specified_size/1024/1024 “USER_SPECIFIED_SIZE”, last_oper_type “TYPE” from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE TYPE
—————————— ———— ———- ——————- ————-
shared pool 104 80 104 GROW <<<<<<<<<<< alter system set shared_pool_size=80M;

System altered.

SQL> select component, current_size/1024/1024 “CURRENT_SIZE”, min_size/1024/1024 “MIN_SIZE”,
user_specified_size/1024/1024 “USER_SPECIFIED_SIZE”, last_oper_type “TYPE” from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE TYPE
—————————— ———— ———- ——————- ————-
shared pool 104 80 80 GROW
large pool 8 8 8 STATIC
java pool 48 48 48 STATIC
streams pool 12 0 12 GROW
DEFAULT buffer cache 24 24 24 SHRINK
KEEP buffer cache 0 0 0 STATIC
RECYCLE buffer cache 0 0 0 STATIC
DEFAULT 2K buffer cache 0 0 0 STATIC
DEFAULT 4K buffer cache 0 0 0 STATIC
DEFAULT 8K buffer cache 0 0 0 STATIC
DEFAULT 16K buffer cache 0 0 0 STATIC
DEFAULT 32K buffer cache 0 0 0 STATIC
OSM Buffer Cache 0 0 24 STATIC

Only the USER_SPECIFIED_SIZE shows the shrink operation. However the 20M will be available by the ASMM process if needed to be redistributed..

Finally you can check the history of resize operations like below:

SQL> select component, oper_type, oper_mode, initial_size/1024/1024 “INITIAL”, TARGET_SIZE/1024/1024
“TARGET”, FINAL_SIZE/1024/1024 “FINAL”, status, TO_CHAR(end_time, ‘DD/MM/YYYY HH:MI:SS’) “DATE” order by end_time;

COMPONENT OPER_TYPE OPER_MODE INITIAL TARGET FINAL STATUS DATE
————————- ————- ——— ———- ———- ———- ——— ——-
DEFAULT buffer cache SHRINK MANUAL 160 148 148 COMPLETE 18/01/2005 10:56:27
streams pool GROW MANUAL 0 12 12 COMPLETE 18/01/2005 10:56:27
DEFAULT buffer cache SHRINK DEFERRED 148 48 48 COMPLETE 18/01/2005 11:29:47
DEFAULT buffer cache SHRINK MANUAL 48 28 28 COMPLETE 18/01/2005 11:48:20
shared pool GROW MANUAL 80 100 100 COMPLETE 18/01/2005 11:48:20
DEFAULT buffer cache SHRINK MANUAL 28 24 24 COMPLETE 18/01/2005 12:17:34
shared pool GROW MANUAL 100 104 104 COMPLETE 18/01/2005 12:17:34

3.4 ASMM to Manual

You can revert the ASMM mechanism at any time by setting the SGA_TARGET value to 0.

In this case the current_size will be used by default as shown below:

SQL> alter system set sga_target=0;

System altered.

SQL> select component, current_size/1024/1024 “CURRENT_SIZE”, min_size/1024/1024 “MIN_SIZE”,
user_specified_size/1024/1024 “USER_SPECIFIED_SIZE”, last_oper_type “TYPE” from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE TYPE
————————- ———— ———- ——————- ————-
shared pool 104 80 104 GROW <<<< select component, current_size/1024/1024 “CURRENT_SIZE”, min_size/1024/1024 “MIN_SIZE”,
user_specified_size/1024/1024 “USER_SPECIFIED_SIZE”, last_oper_type “TYPE” from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE USER_SPECIFIED_SIZE TYPE
————————- ———— ———- ——————- ————-
shared pool 104 104 104 STATIC
large pool 8 8 8 STATIC
java pool 48 48 48 STATIC
streams pool 12 12 12 STATIC
DEFAULT buffer cache 24 24 24 STATIC
KEEP buffer cache 0 0 0 STATIC
RECYCLE buffer cache 0 0 0 STATIC
DEFAULT 2K buffer cache 0 0 0 STATIC
DEFAULT 4K buffer cache 0 0 0 STATIC
DEFAULT 8K buffer cache 0 0 0 STATIC
DEFAULT 16K buffer cache 0 0 0 STATIC
DEFAULT 32K buffer cache 0 0 0 STATIC
OSM Buffer Cache 0 0 24 STATIC

It is strongly advised to use an spfile with your your instance as you will record any changes applied.

4. Conclusion

In previous Oracle versions, finding the right values for SGA parameters was an important part of Instance Tuning.

With ASMM, you don’t have anymore to size by yourself some of the most important SGA parameters. The right values are automatically chosen based on the Instance profile.

RELATED DOCUMENTS

Performance Tuning Guide 10G Release 1 Part No B10752-01
Administrator’s Guide 10G Release 1 Part No B10739-01
Note 257643.1 Oracle Database 10g Automated SGA Memory Tuning
Note 270065.1 Use Automatic SGA Management

.

Bookmarks Admin Profile Feedback Sign Out Help

Copyright © 2006, Oracle. All rights reserved. Legal Notices and Terms of Use | Privacy Statement

Anúncios

Sobre Alexandre Pires

ORACLE OCS Goldengate Specialist, OCE RAC 10g R2, OCP 12C, 11g, 10g , 9i e 8i - Mais de 25 anos de experiência na área de TI. Participei de projetos na G&P alocado na TOK STOK, EDINFOR alocado na TV CIDADE "NET", 3CON Alocado no PÃO DE AÇUCAR, DISCOVER alocado na VIVO, BANCO IBI e TIVIT, SPC BRASIL, UOLDIVEO alocado no CARREFOUR e atualmente na ORACLE ACS atendendo os seguintes projetos: VIVO, CLARO, TIM, CIELO, CAIXA SEGUROS, MAPFRE, PORTO SEGURO, SULAMERICA, BRADESCO SEGUROS, BANCO BRADESCO, BASA, SANTANDER, CNJ, TSE, ELETROPAULO, EDP, SKY, NATURA, ODEBRESHT, NISSEI, SICREDI, CELEPAR, TAM, TIVIT, IBM, SMILES, CELEPAR, SERPRO,OKI,BANCO PAN, etc
Esse post foi publicado em ASSM, PARAMETROS, PLSQL TUNING, SGA e marcado . Guardar link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s