Usa database in memoria con Autonomous Database

La funzione Database In-Memory disponibile su Autonomous Database può migliorare in modo significativo le prestazioni per gli analytics in tempo reale e i carichi di lavoro misti.

Informazioni su Database In-Memory

Oracle Database In-Memory (Database In-Memory) è una suite di funzioni che migliora notevolmente le prestazioni per gli analytics in tempo reale e i carichi di lavoro misti.

La funzione Database In-Memory è utile quando:
  • Hai abilitato la funzione In-Memory per il tuo database in locale e ora stai eseguendo la migrazione dal database in locale ad Autonomous Database.

  • Le query nel database utilizzano la maggior parte del tempo di esecuzione per la scansione e il filtro dei dati, nonché per l'esecuzione di join e aggregazioni group-by.

  • È necessario migliorare il tempo di risposta delle query di natura analitica.

L'area di memorizzazione colonne in memoria è la funzione chiave di Database In-Memory. L'area di memorizzazione delle colonne In memoria si trova nell'area In memoria, che è una parte facoltativa dell'area SGA (System Global Area). Quando l'opzione è abilitata per In-Memory, le tabelle, le partizioni, le partizioni secondarie e le viste materializzate vengono popolate in formato colonna nell'area di memorizzazione delle colonne In-Memory. Questo formato a colonne è ottimizzato per scansioni molto veloci, che possono consentire alle query analitiche di eseguire ordini di grandezza più velocemente rispetto alle query basate sul formato di riga. Per ulteriori informazioni, vedere Oracle Database In-Memory.

L'area di memorizzazione colonne In-Memory cresce dinamicamente nel tempo per accogliere gli oggetti INMEMORY più caldi. È possibile utilizzare la clausola tabella PRIORITY o eseguire scansioni continue delle tabelle per garantire che l'area di memorizzazione delle colonne In-Memory cresca in modo sufficiente per il carico di lavoro. Per ulteriori informazioni, vedere Dimensionamento dell'area di memorizzazione colonne in memoria.

È possibile utilizzare la clausola INMEMORY nelle istruzioni DDL per abilitare In-Memory per i seguenti oggetti:
  • Tabelle (comprese le tabelle esterne)

  • Partizioni o partizioni secondarie

  • Viste materiali

Per ulteriori informazioni, vedere Abilitazione degli oggetti per la popolazione in memoria.

Per abilitare Database In-Memory, tenere presente quanto riportato di seguito.

  • Database In-Memory è disponibile solo per un'istanza di Autonomous Database con:

    • Il modello di computazione ECPU

    • Un minimo di 16 ECPU

  • Se si riavvia il database, gli oggetti abilitati per INMEMORY richiedono un nuovo popolamento nell'area di memorizzazione delle colonne In memoria. A seconda dell'impostazione di priorità, il ripopolamento può avvenire automaticamente o al primo accesso. Se stai monitorando le prestazioni, noterai prestazioni più lente fino a quando l'oggetto non viene ripopolato.

Abilitazione di oggetti per la popolazione in memoria

È possibile abilitare e disabilitare gli oggetti per il popolamento nell'area di memorizzazione colonne In memoria.

Solo gli oggetti con la clausola INMEMORY possono essere inseriti nell'area di memorizzazione delle colonne In memoria. Utilizzare le istruzioni DDL CREATE TABLE o ALTER TABLE per applicare la clausola INMEMORY.

Per impostazione predefinita, gli oggetti vengono creati con l'attributo NO INMEMORY, il che significa che non sono idonei per essere inseriti nell'area di memorizzazione delle colonne In memoria.

L'abilitazione di un oggetto come INMEMORY specifica che un oggetto può potenzialmente risiedere nell'area di memorizzazione delle colonne In memoria. La popolazione In-Memory è un passo separato che si verifica quando il database legge i dati esistenti in formato di riga, li trasforma in formato di colonna e li memorizza nell'area di memorizzazione delle colonne In-Memory. Per impostazione predefinita, tutte le colonne di un oggetto con l'attributo INMEMORY vengono inserite nell'area di memorizzazione delle colonne In memoria.

L'impostazione dell'attributo INMEMORY su un oggetto implica che l'oggetto sia un candidato per la popolazione nell'area di memorizzazione delle colonne In memoria. L'oggetto non viene popolato immediatamente nell'area di memorizzazione colonne In memoria. Tuttavia, è possibile utilizzare la clausola PRIORITY con l'attributo INMEMORY per controllare la priorità della popolazione nell'area di memorizzazione delle colonne In memoria. La clausola PRIORITY può essere specificata con i seguenti valori:

  • CRITICAL: l'oggetto viene popolato immediatamente dopo l'apertura del database.

  • HIGH : l'oggetto viene popolato dopo che tutti gli oggetti CRITICAL sono stati popolati, se lo spazio rimane disponibile nell'area di memorizzazione delle colonne In memoria.

  • MEDIUM: l'oggetto viene popolato dopo che tutti gli oggetti CRITICAL e HIGH sono stati popolati e lo spazio rimane disponibile nell'area di memorizzazione delle colonne In memoria.

  • LOW: l'oggetto viene popolato dopo che tutti gli oggetti CRITICAL, HIGH e MEDIUM sono stati popolati, se lo spazio rimane disponibile nell'area di memorizzazione delle colonne In memoria.

  • NONE: gli oggetti vengono popolati solo dopo la prima scansione, se lo spazio è disponibile nell'area di memorizzazione delle colonne In memoria. La priorità NONE è la priorità predefinita.

Esempio di creazione di una tabella con l'attributo INMEMORY:

CREATE TABLE im_emp (
    id  NUMBER,  name VARCHAR2(20),  
    depno NUMBER,  sal   NUMBER,  
    mgr   NUMBER,  
    loc   VARCHAR2(20)) 
    INMEMORY;
In questo esempio viene creata la tabella im_emp con l'attributo INMEMORY. Nell'esempio viene utilizzata la priorità predefinita NONE per la clausola INMEMORY, ovvero la tabella viene popolata solo dopo la prima scansione.

Esempio di utilizzo della clausola PRIORITY con l'attributo INMEMORY:

CREATE TABLE im_emp_1 (
    id  NUMBER,  name VARCHAR2(20),  
    depno NUMBER,  sal   NUMBER,  
    mgr   NUMBER,  
    loc   VARCHAR2(20)) 
    INMEMORY PRIORITY CRITICAL;

Esempio di impostazione dell'attributo INMEMORY per una tabella esistente:

ALTER TABLE employees INMEMORY;

In questo esempio viene impostato l'attributo INMEMORY per la tabella employees.

È inoltre possibile modificare una tabella per impostare l'attributo INMEMORY solo per un subset di colonne nella tabella. Ad esempio:

ALTER TABLE im_emp_tb INMEMORY NO INMEMORY(depno);
Questo esempio imposta l'attributo INMEMORY per im_emp_tb, ma esclude la colonna depno.

Vedere INMEMORY_TABLE_CLAUSE.

Dopo aver abilitato INMEMORY per una tabella, è possibile eseguire una query sulla vista V$IM_SEGMENTS per determinare se i dati della tabella vengono inseriti nell'area di memorizzazione delle colonne In memoria. Ad esempio:
SELECT SEGMENT_NAME, POPULATE_STATUS 
FROM   V$IM_SEGMENTS 
WHERE  SEGMENT_NAME = 'IM_EMP';

Per ulteriori informazioni, vedere V$IM_SEGMENTS.

Dopo che l'oggetto è stato popolato nell'area di memorizzazione delle colonne In memoria, l'oggetto viene rimosso solo quando l'oggetto viene eliminato o spostato oppure l'oggetto viene aggiornato con l'attributo NO INMEMORY. Ad esempio:
ALTER TABLE im_emp NO INMEMORY;

Per ulteriori informazioni, vedere Funzionamento della popolazione in memoria.

Note per l'abilitazione degli oggetti per la popolazione In-Memory:

  • Il database non inserisce automaticamente negli oggetti in memoria l'impostazione PRIORITY di NONE. Tuttavia, è possibile inserire manualmente questi oggetti nell'area di memorizzazione colonne In memoria. Per ulteriori informazioni, vedere Popolamento manuale dell'area di memorizzazione colonne IM e Procedura DBMS_INMEMORY.POPULATE.

  • È necessario eseguire scansioni continue delle tabelle per garantire che l'area di memorizzazione delle colonne In-Memory cresca automaticamente in modo sufficiente per il carico di lavoro. Se un oggetto viene popolato parzialmente, la scansione delle tabelle può utilizzare sia In-Memory che Exadata Smart Scan.

Dimensionamento dell'area di memorizzazione colonne in memoria

Quando l'istanza di Autonomous Database dispone di 16 o più ECPU, la funzione Database In-Memory è abilitata per impostazione predefinita e può essere utilizzata da In-Memory fino al 50% dell'area SGA.

La memoria per l'area in memoria non è riservata in anticipo e la dimensione iniziale dell'area in memoria è 0. L'Area In-Memory cresce gradualmente ogni volta che c'è spazio insufficiente per la popolazione In-Memory.

Gli oggetti nell'area di memorizzazione delle colonne in memoria vengono gestiti in modo dinamico dall'AIM (Automatic In-Memory). La funzione In-Memory automatica è abilitata per impostazione predefinita per Autonomous Database.

AIM utilizza le statistiche interne per determinare la frequenza di accesso agli oggetti e alle colonne In-Memory. Se l'area di memorizzazione delle colonne In memoria è piena e altri segmenti ad accesso più frequente trarrebbero vantaggio dalla popolazione nell'area di memorizzazione delle colonne In memoria, l'area di memorizzazione delle colonne In memoria evita i segmenti inattivi.

Per garantire che il data set di lavoro sia sempre popolato, AIM evita automaticamente i segmenti freddi (a cui non si accede di frequente). Per ulteriori informazioni, vedere Automazione della gestione degli oggetti in memoria.

La dimensione massima in memoria predefinita per Autonomous Database può essere fino al 50% della dimensione SGA. Tuttavia, puoi modificare la dimensione massima in memoria per Autonomous Database:
  • Modificando il conteggio ECPU per l'Autonomous Database.

  • Per modificare la dimensione massima in memoria, utilizzare la procedura DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE. È possibile specificare un valore compreso nell'intervallo tra 0 e 70. Se si specifica un valore pari a zero (0), il database in memoria viene disabilitato. Ad esempio:
    BEGIN
        DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(60);
    END;
    /
    Questo esempio modifica la dimensione massima in memoria al 60% della dimensione SGA.

Per ulteriori informazioni, vedere SET_SGA_PERCENTAGE Procedura.

Eseguire una query sulla vista V$INMEMORY_AREA per recuperare le informazioni sull'allocazione dello spazio all'interno dell'area In-Memory. Ad esempio:

SELECT * FROM V$INMEMORY_AREA;
Per ulteriori informazioni, vedere V$INMEMORY_AREA.

Disabilitazione dell'area di memorizzazione colonne in memoria

È possibile disabilitare l'area di memorizzazione colonne in memoria per Autonomous Database modificando la dimensione massima in memoria su 0.

Ad esempio:

BEGIN
    DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(0);
END;
/

Questo esempio modifica il valore massimo della dimensione in memoria su zero (0) e disabilita Database In-Memory per l'istanza.

Per ulteriori informazioni, vedere SET_SGA_PERCENTAGE Procedura.