appl_memory: Parametro di configurazione della memoria dell'applicazione

Il parametro di configurazione appl_memory specifica la dimensione della serie di memoria dell'applicazione. La dimensione della memoria dell'applicazione viene contata rispetto a qualsiasi limite instance_memory attivo.

L'impostazione appl_memory deve essere sufficientemente grande per soddisfare i requisiti simultanei dei seguenti lotti di memoria:
  • Il pool di memoria heap condiviso del gruppo di applicazioni. Questo pool di memoria è un'area di lavoro globale per tutte le applicazioni e non è configurabile.
  • Il pool di memoria heap dell'applicazione. Questo pool di memoria è configurato per applicazione e può essere configurato utilizzando il parametro di configurazione applheapsz .
  • Il pool di memoria heap dell'istruzione. Questo pool di memoria è configurato per compilazione di istruzioni e può essere configurato utilizzando il parametro di configurazione stmtheap .
  • Il pool di memoria heap statistiche. Questo pool di memoria è configurato per l'operazione RUNSTATS e può essere configurato utilizzando il parametro di configurazione stat_heap_sz .
Tipo di configurazione
Database
Si applica a
  • Server database con client locali e remoti
  • Server database con client locali
  • Server database a partizione con client locali e remoti
Tipo di parametro
  • Configurabile online (richiede una connessione al database)
  • Configurabile in base al membro in un ambiente Db2® pureScale® e in ambienti di database con partizioni
Valore predefinito [ intervallo]
Automatico [128 - 4 294 967 295]
  • Su architetture a 32 bit, il valore predefinito è AUTOMATIC con un valore sottostante di 10000
  • Nelle architetture a 64 bit, il valore predefinito è AUTOMATIC con un valore sottostante di 40000
Unità di misura
pagine (4 KB)
Quando assegnato o sottoposto a commit
Su sistemi operativi Linux e UNIX
La dimensione iniziale viene assegnata all'attivazione del database. Viene allocata più memoria come richiesto.
Su sistemi operativi Windows
La memoria è assegnata come richiesto. Viene eseguito il commit di una quantità minima di memoria dell'applicazione all'attivazione del database. Viene eseguito il commit di più memoria come richiesto.
Quando liberato
Tutta la memoria dell'applicazione viene liberata quando un database viene disattivato. Tuttavia, parti di memoria assegnata o di cui è stato eseguito il commit vengono regolarmente rilasciate al sistema operativo quando queste parti di memoria non sono più in uso.

Sui sistemi operativi UNIX, dopo l'assegnazione della dimensione della memoria dell'applicazione iniziale durante l'attivazione del database, Db2 assegna ulteriore memoria in base alle esigenze per supportare i requisiti di memoria dinamica. L'assegnazione di memoria aggiuntiva è soggetta a qualsiasi limite di dimensione fissa specificato. Tutta la memoria dell'applicazione viene assegnata come memoria condivisa e viene conservata fino alla disattivazione del database. La memoria condivisa totale assegnata conta solo l'utilizzo della memoria virtuale. Mentre questa memoria virtuale non richiede il supporto della memoria reale, la memoria virtuale richiede il supporto dello spazio di swap o di paging su alcuni sistemi operativi. Per i dettagli sul supporto del sistema operativo, consultare la sezione Supporto del sistema operativo .

Sui sistemi operativi Windows, la memoria dell'applicazione viene assegnata come memoria privata. L'assegnazione della memoria dell'applicazione è soggetta a qualsiasi limite di dimensione fissa specificato. Le assegnazioni di memoria non più in uso potrebbero essere liberate dinamicamente o conservate per il riutilizzo. Tutte le assegnazioni di memoria in sospeso vengono liberate quando il database viene disattivato.

La memoria di cui è stato eseguito il commit è la memoria di cui il sistema operativo esegue il backup. La memoria assegnata viene sottoposta a commit come richiesto dai pool di memoria. La memoria sottoposta a commit non più richiesta dai lotti di memoria viene memorizzata nella cache per migliorare le prestazioni o rilasciata al sistema operativo. Se la dimensione della memoria dell'applicazione viene ridotta in modo dinamico, la memoria viene rilasciata o annullata. Tutta la memoria sottoposta a commit viene rilasciata quando il database viene disattivato.

Si consiglia di lasciare appl_memory impostato sul valore predefinito AUTOMATIC. Un'impostazione di memoria dell'applicazione fissa insufficiente determina vari errori di memoria esaurita restituiti alle applicazioni. L'impostazione di un valore di memoria fisso deve essere eseguita solo dopo un test approfondito per determinare i requisiti di picco. La memoria dell'applicazione non è ottimizzata da STMM (Self Tuning Memory Manager), ma STMM ottimizza database_memory, se database_memory è abilitata per l'ottimizzazione automatica, per compensare i requisiti di memoria dell'applicazione fluttuanti.

al Sistema Operativo SCE

Tabella 1. al Sistema Operativo SCE
Sistema Operativo Supporto disponibile
AIX Utilizza pagine medie (64K) per impostazione predefinita, che possono migliorare le prestazioni. Le pagine grandi (16MB) sono consentite anche su AIX .1
HP-UX La memoria condivisa assegnata richiede il supporto dallo swap virtuale.
Linux La memoria condivisa assegnata conta rispetto al limite di memoria condivisa virtuale (shmall).
< La memoria condivisa assegnata richiede il supporto dallo swap virtuale e viene contata rispetto ai limiti di memoria virtuale.
Windows Nessuna considerazione aggiuntiva per la piattaforma Windows.
Nota:
  1. L'utilizzo di pagine di grandi dimensioni (DB2_LARGE_PAGE_MEM) limita la possibilità di Db2 di rilasciare dinamicamente la memoria. Si consiglia di configurare un valore appl_memory fisso quando si utilizza una memoria di pagina di grandi dimensioni.

Monitoraggio

La serie di memoria dell'applicazione può essere monitorata tramite le routine MON_GET_MEMORY_SET e MON_GET_MEMORY_POOL . Ad esempio, il seguente comando:
db2 "select member, substr(db_name,1,10)as db_name, substr(memory_set_type,1,10) as set_type, 
memory_set_size, memory_set_committed, memory_set_used, memory_set_used_hwm 
from table(mon_get_memory_set('APPLICATION')"
Restituisce le seguenti informazioni:
MEMBER DB_NAME    SET_TYPE    MEMORY_SET_SIZE      MEMORY_SET_COMMITTED MEMORY_SET_USED      MEMORY_SET_USED_HWM 
------ ---------- ----------  -------------------- -------------------- -------------------- -------------------- 
     0 SAMPLE     APPLICATION               154927                68616                67829                68616 
     0 TEST       APPLICATION               238092               123404               123404               123404 

  2 record(s) selected. 

In questo caso, la serie di memoria dell'applicazione utilizza 154927KB di instance_memory(MEMORY_SET_SIZE) e 68616KB di system memory (MEMORY_SET_COMMITTED), di cui 67829KB (MEMORY_SET_USED) è assegnato ai pool di memoria.

È inoltre possibile monitorare la memoria del database utilizzando il programma di utilità db2pd :
 db2pd -db <database_name> -memsets -mempools, db2pd -dbptnmem