Gestione della memoria AMM ASMM

AMM = Automatic Memomry Management, introdotto dalla 11g,  gestisce in automatico lo spazio totale di memoria di SGA e PGA.
E’ abilitato, di default in fase di installazione,  una volta impostato il parametro memory_target (e memory_max_target).
E’ consigliato da Oracle anche se la best practise prevede di abilitare la ASMM.
Vuol dire che i componenti di memoria della Sga non sono settati manualmente, ma sono in automatico impostati a zero i parametri db_cache_size e shared_pool_size.

I parametri memory_target possono essere configurati in fase di installazione del db tramite DBCA. memory_target è un parametro dinamico mentre memory_max_target è statico.

SQL> show parameter memory;
NAME                     TYPE          VALUE
---------------------------------- -----------
memory_max_target        big integer   5056M
memory_target            big integer   4288M

Di default la memoria SGA è impostato al 60% mentre la PGA al 40% della memoria totale quando l’istanza è in  start.

select * from V$MEMORY_TARGET_ADVICE;

Se non restituisce alcun record vuol dire che AMM è disabilitato.

Con AMM abilitato,  la memoria SGA è allocata creando files sotto /dev/shm.
Con AMM l'intera memoria SGA viene allocata creando file in /dev/shm. Quando Oracle Database alloca SGA in questo modo, le HugePages non sono riservate. È necessario disabilitare AMM su Oracle Database 11g per utilizzare HugePages.
Se AMM è abilitato e anche le  Linux hugepages sono abilitate, AMM sovrascriverà l'utilizzo delle Linux hugepages.

select *
from v$parameter
where name in ( 'memory_target', 'memory_max_target','sga_target','sga_max_size' ,
'db_cache_size','shared_pool_size','large_pool_size','java_pool_size','streams_pool_size')


enable AMM
 |---> enable Memory Size Advisor
 |---> enable ASMM (Automatic Shared Memory Management)
 |---> not available PGA Advisor

Se ASMM è abilitato ma no AMM allora SGA Size Advisor è disponibile.
Se AMM è disabilitato allora è possibile abilitare PGA Advisor.

memory_target(MT)
sga_target(ST)                                             E S I T O
------------------------------------------------------------------------------------------------------------

MT=0            AMM è disabilitato     
ST=0               ASMM è disabilitato     Specificare i  valori dei pool

MT=0              AMM è disabilitato     
ST>0               ASMM abilitato            I pool saranno automaticamente dimensionati.
                                                     La memoria SGA e PGA è gestita separatamente.

MT>0              AMM è abilitato          Gestione automatica della SGA e PGA
ST=0               ASMM è disabilitato 

MT>0              AMM è abilitato           Gestione automatica della SGA e PGA
ST>0               ASM è abilitato          e la SGA ha un valore minimo definito da ST


ATTENZIONE
ogni volta che si modificano questi parametri assicurarsi di fare una copa del spfile o pfile



Se abilitato ASMM e si vuole cambiare la SGA e la PGA

SQL> show parameter spfile

NAME     TYPE      VALUE
---------------------------------
spfile string


Se VALUE è Null vuol dire che è stato utilizzato pfile.
Quando si usa spfile il risultato è il seguente:

SQL> show parameter spfile;

NAME      TYPE                   VALUE
------------------------------------ ----------- -----
spfile string /u01/app/oracle/product/18/db_1/dbs/spfileorcl.ora

Creare il file spfile vedere post  Create-pfile-from-spfile

Se abilitato ASMM e si vuole cambiare la sga e la pga
SQL> alter system set sga_target=2G scope=spfile;
SQL> alter system set PGA_AGGREGATE_TARGET = 1G scope=spfile;

I nuovi parametri del spfile sono visibili dalla seguente vista ma saranno effettivi solo al riavvio del db.
SQL> select name,value,sid  from v$spparameter where name like 'pga%';
pga_aggregate_target
------------------------
1073741824

SQ> select name,value,sid  from v$spparameter where name like 'sga%';
sga_target
-------------------
2147483648

Valori attuali
SQL> show parameter sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 4768M
sga_target                           big integer 4768M

SQL> show parameter pga_aggregate_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------
pga_aggregate_target                 big integer 1588M

SQL> Shutdown 
SQL> Startup;



Come si abilita AMM?
1.a)  Se il si sta utilizzando il file init.ora è sufficiente modificarlo inserendo i parametri
memory_max_target=5242880000
memory_target=4454350848
2.a)  Effettuare stop e start del db.

oppure

1.b)  Se si utilizza spfile.ora invece effettuare il comando
    alter system set memory_target=4454350848 scope=spfile;
    alter system set memory_max_target=5242880000 scope=spfile;
2.b)  Effettuare il restart del db

Se non impostato memory_max_target questo assume il valore di memory_target
Se invece è impostato il valore max ma no il memory_target allora questo assume il valore 0.


Come si abilita ASMM cioè abilitare il controllo automatico della SGA?
1) impostare memory_target = 0 per disabilitare AMM
2) impostare un valore del parametro dinamico sga_target che può aumentare fino al valore  sga_max_target (statico). Può essere cambiato con 
SQL> alter system set sga_target=9G scope=spfile;

Il parametro di inizializzazione statistics_level deve essere impostato a TYPICAL o ALL.


Per visualizzare la dimensione delle componenti di memoria SGA e PGA.
select name,value /(1024*1024) as Dimensione_MB, isdefault, description
from v$PARAMETER
where name in ( 'sga_max_size' , 'pga_aggregate_target');


I componenti di memoria della SGA vengono automaticamente gestiti
  • Default pool of database buffer cache db_cache_size
  • shared_pool_size
  • large_pool_size
  • java_pool_size
  • streams_pool_size

Questi parametri possono essere impostati ad un valore diverso da 0 che viene considerato come la dimensione minima.

Se si abilita ASMM viene abilitato di default Automatic PGA Memory Management.

Come si disabilitare ASMM ?
impostare sga_target = 0. 
Di conseguenza occorre impostare manualmente le dimensioni dei pool perchè non cambiano più dinamicamente.




Esempio di AMM disabilitato (memory_max_target =0 ) e ASMM disabiliato (sga_target = 0)

DA EM 12c andare sotto Prestazioni > Home Advisor














Memory Advisor























Esempio AMM disabilitato (memory_max_target=0) e ASMM abilitato (sga_target <> 0)































Esempio AMM abilitato (memory_max_target <> 0) e ASMM abilitato (sga_target <> 0)





























PPer visualizzare le dimensioni delle componenti di memoria quando è abilitato AMM

SQL> column component  FORMAT A30
SQL> select component, min_size, max_size
           from V$MEMORY_DYNAMIC_COMPONENTS;

Storico delle dimensioni delle componenti di memoria

select * from V$MEMORY_RESIZE_OPS;

Risalire al valore SGA_TARGET che è la somma di tutte le dimensioni delle componenti della SGA (in MB)
Attenzione: si tratta di una vista dinamica
select ( (select sum(value) from V$SGA )- ( select current_size from V$SGA_DYNAMIC_FREE_MEMORY))/(1024*1024) "SGA_TARGET"from dual;
Componenti e dimensioni della SGA
SELECT COMPONENT, CURRENT_SIZE, MIN_SIZE, MAX_SIZE from V$SGA_DYNAMIC_COMPONENTS;
Area allocata PGA
SELECT name, value  --/(1024*1024) FROM V$PGASTAT where  name in ('maximum PGA allocated','total PGA allocated');




Per passare da Manual Shared Memory Management a ASMM
1) risalire al valore SGA_TARGET che è la somma di tutte le dimensioni delle componenti della SGA
select ( (select sum(value) from V$SGA )- ( select current_size from V$SGA_DYNAMIC_FREE_MEMORY)) "SGA_TARGET"
from dual;
2) impostare il valore del parametro SGA_TARGET
AlTER SYSTEM set SGA_TARGET = <value> [ SCOPE ={SPFILE | MEMORY | BOTH} ]
<value> è il risultato dello step 1 o un valore tra la somma di tutte
4) impostare a 0 il valore della dimensione automatica delle componenti della SGA così che ASMM ricalcola in automatico la memoria per ciascuna componente, modificando il file PFILE o con il comando ALTER SYSTEM …

db_cache_size, shared_pool_size, large_pool_size, java_pool_size,  streams_pool_size
3) Il parametro di inizializzazione statistics_level deve essere impostato a TYPICAL o ALL.
4) restart instance



Per passare da AMM  a ASMM
1) Disabilitare AMM.
AlTER SYSTEM set MEMORY_TARGET = 0 scope=spfile;
Successivamente Oracle imposterà in automatico il valore SGA_TARGET in base al valore attuale della allocazione di memoria della SGA
2) impostare a 0 il valore della dimensione automatica delle componenti della SGA così che ASMM ricalcola in automatico la memoria per ciascun componente
3) restart instance



Per abilitare Manual Shared Memory Management
1) impostare a 0 i parametri di inizializzazione sga_target e memory_target
2) configurare a mano il valore della dimensione delle componenti della SGA tale che la loro somma sia inferiore a sga_max_size.

Per abilitare Automatic PGA Memory Management
1) impostare pga_aggregate_target tra 100MB e 256GB. L'istanza Oracle in automatico gestisce le componenti di memoria e genera le statistiche 
2) impostare statistics_level a TYPICAL o ALL

Per disabilitare la Automatic PGA Memory Management
1) impostare pga_aggregate_target = 0
2) impostare i valori di SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE, CREATE_BITMAP_AREA_SIZE
2) restart della istanza.

Questa query mostra come la cache hit-ratio migliora con la dimensione della pga_aggregate_target
SELECT PGA_TARGET_FOR_ESTIMATE/1024/1024 "target mb",
 ESTD_PGA_CACHE_HIT_PERCENTAGE "cache_hit%"
 FROM V$PGA_TARGET_ADVICE

 target mb       cache_hit%
---------- -------------------
        64               93
       128              93
       256              93
       384             100
       512             100
614,399414       100
716,799805       100
819,199219       100
921,599609       100
      1024            100
      1536            100
      2048            100

Per avere un buon PGA hit-ratio impostare pga_aggregate_target a 512M.

Ricorda:
La prima volta che un user process del database Oracle richiede un particolare dato, lo cerca prima nel database buffer cache. Se il processo trova i dati già nella cache (si parla di cache hit), può leggere i dati direttamente dalla memoria. Se il processo non riesce a trovare i dati nella cache (a cache miss), deve prima copiare i data block da un data file su disco in un buffer nella cache e poi ha accesso ai dati. 

L'accesso ai dati tramite un cache hit è più rapido dell'accesso ai dati attraverso una miss cache.







Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database