Solaris 11 Oracle RAC 12 Tuning SGA

Pubblicato da Alessandro Caredda il

Nell’articolo Solaris 11 Oracle RAC 12 Tuning SGA, descrivo una situazione di tuning che ho dovuto affrontare per un cliente.

Il tuning è stato applicato su un database Oracle RAC 12.1 a 2 nodi Oracle Solaris 11, da qui sono partiti i miei studi che ho deciso di condividere.

Dalla versione 10g del database Oracle, le aree di memoria vengono gestite in maniera automatica.

Questo avviene attraverso 2 principali architetture:

ASMM Automatic Shared Memory Management, che prevedeve la gestione automatica delle aree interne alla SGA (DB_CACHE_SIZE, SHARED_POOL_SIZE, JAVA_POOL_SIZE, LARGE_POOL_SIZE, ecc..) applicabile attraverso la popolazione dei parametri sga_target, sga_max_size e pga_aggregate_target nell’spfile.

Dalla versione 11:
AMM Automatic Memory Management, che prevede la gestione dinamica della SGA e della PGA, applicabile attraverso i parametri memory_target e memory_max_target nel spfile.

Quest’ultima funzionalità, sul totale di memoria che viene assegnata al parametro memory_target, utilizza il 60% per la SGA e il 40% per la PGA e questo, in database di grandi dimensioni, non permetterebbe il completo utilizzo della RAM assegnata.

Proprio per questo motivo l’architettura AMM è sconsigliata per database con SGA di grandi dimensioni.

Inoltre, quando il parametro memory_max_target per l’architettura AMM o il parametro sga_max_size per l’architettura ASMM sono maggiori rispetto ai relativi parametri memory_target e sga_target, è possibile estendere la SGA a caldo fino alla size massima impostata.

Per utilizzare questa funzionalità, l’OS Solaris deve avere abilitata la funzionalità OSM Optimized Shared Memory, il quale permette la resize dinamica senza dover riavviare l’istanza.

Per controllare se l’OMS è abilitato occorre eseguire il seguente comando:

ipcs -dm

L’OSM è abilitato se sulla colonna ALLOC è presente un numero intero.
Se dovesse essere presente un – vuol dire che non l’OSM non è attivo.

OSM vs DISM vs ISM

Come indicato nel documento Administering Oracle Database on Oracle Solaris, Oracle Database automaticamente usa OSM se lo trova disponibile.

Se OSM non è disponibile, Oracle Database utilizza automaticamente o DISM Dynamic Intimate Shared Memory o ISM Intimate Shared Memory in base a come viene impostato il parametro SGA_MAX_SIZE.

Di seguito i criteri di abilitazione:

Oracle Database utilizza DISM se è disponibile sul sistema e se il valore del parametro SGA_MAX_SIZE è maggiore della dimensione del parametro SGA_TARGET. Ciò consente a Oracle Database di bloccare solo la quantità di memoria fisica utilizzata.

Oracle Database utilizza ISM se il valore del parametro SGA_MAX_SIZE è uguale o inferiore alla dimensione del parametro SGA_TARGET.

Quindi per accertarci quale funzione di gestione memoria condivisa sia utilizzata, possiamo individuarla con il comando pmap del processo smon del database.

Individuiamo il PID del processo di backgruond del database SMON con il seguente comando:

ps -ef |grep smon

Con pmap verifichiamo il PID dell’SMON con il seguente comando (sostituire <PID> con il PID ricavato dal precedente comando):

pmap –xs | grep ism

Apprese queste informazioni decido di utilizzare l’architettura ASMM utilizzando OSM.

Inoltre per estendere i parametri di memoria, occorre controllare il parametro project.max-shm-memory, che sia superiore alla dimensione massima dei parametri di SGA e PGA, in tutti i nodi che compongono il RAC.
Se il valore dovesse essere inferiore, la fase di allocazione dei parametri fallirebbe con l’errore ORA-27125.

Una volta verificati i valori dell’OS e individuata l’architettura da applicare, passiamo all’estensione della SGA.

Solaris 11 Oracle RAC 12 Tuning SGA

Nel mio caso avevo in utilizzo l’architettura AMM, ma devo portare la SGA a 20G e PGA 5G, quindi per ottimizzare l’utilizzo della memoria ho deciso di utilizzare i parametri ASMM, quindi configuro i parametri sga_target=20G, sga_max_size=25G e pga_aggregate_target=6G.

Prima di effettuare qualsiasi modifica, salvare il pfile di tutte le istanze del RAC.

create pfile='/tmp/pfile.ora' from spfile;

Una volta salvato il pfile, procediamo con la disabilitazione dell’AMM Automatic Memory Management con i seguenti comandi:

alter system reset memory_max_target scope=spfile SID='*';
alter system reset memory_target scope=spfile SID='*';

Abilitiamo ASMM Automatic Storage Memory Management

alter system set SGA_MAX_SIZE=25G scope=spfile SID='*';
alter system set SGA_TARGET=20G scope=spfile SID='*';
alter system set PGA_AGGREGATE_TARGET=6G scope=spfile SID='*';
alter system set pga_aggregate_limit=10g scope=spfile SID='*';

Una volta configurati i parametri, riavvio le istanze con il seguente comando:

srvctl stop database -d TEST -o immediate
srvctl start database -d TEST

E il gioco è fatto.

Se incontrate problemi potete consultare il tutorial Tuning SGA Oracle database, dove viene indicato lo startup e ripistino del spfile, dal pfile salvato in precedenza.

Se volete approfondire con i tutorial ufficiali Oracle dedicati all’argomento di seguito riporto i vari articoli:

Administering Oracle Database on Oracle Solaris
Tuning Oracle Database
Requirements for Installing Oracle Database 12.1 on Solaris 11 SPARC/ x86-64 (Doc ID 1525614.1)
Kernel setup for Solaris 10 and Solaris 11 using project files (Doc ID 429191.1)
Dynamic SGA Tuning of Oracle Database on Oracle Solaris with DISM

Per visionare i miei tutorial Oracle clicca qui!
A questo LINK, invece, troverai le query SQL.

Resta aggiornato sulle nostre attività entrando a far parte della nostra community:
Facebook
Youtube
Linkedin


0 commenti

Lascia un commento

Segnaposto per l'avatar