Usa Database In-Memory con Autonomous Database

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

Informazioni sulla memoria del database

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 impiegano 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-Memory è la funzione chiave di Database In-Memory. L'area di memorizzazione delle colonne In-Memory si trova nell'area In-Memory, che è una parte facoltativa dell'area SGA (System Global Area). Se abilitata per In-Memory, le tabelle, le partizioni, le partizioni secondarie e le viste materializzate vengono popolate in un formato a colonne nell'area di memorizzazione 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 delle colonne In-Memory cresce in modo dinamico nel tempo per accogliere gli oggetti INMEMORY più caldi. È possibile utilizzare la clausola della tabella PRIORITY o disporre di scansioni continue delle tabelle per garantire che l'area di memorizzazione colonne In-Memory si ingrandisca abbastanza per il carico di lavoro. Per ulteriori informazioni, vedere Dimensione 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 materializzate

Per ulteriori informazioni, vedere Abilitazione di 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

    • Almeno 16 ECPU

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

Abilitazione degli oggetti per la popolazione in memoria

È possibile abilitare e disabilitare gli oggetti per la popolazione nell'area di memorizzazione colonne In-Memory.

Solo gli oggetti con la clausola INMEMORY possono essere inseriti nell'area di memorizzazione colonne In-Memory. 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, ovvero non sono idonei per la popolazione nell'area di memorizzazione colonne In-Memory.

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

L'impostazione dell'attributo INMEMORY su un oggetto implica che l'oggetto sia un candidato per la popolazione nell'area di memorizzazione colonne In-Memory. 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 colonne In-Memory. 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 colonne In-Memory.

  • 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 colonne In-Memory.

  • 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 colonne In-Memory.

  • NONE: gli oggetti vengono popolati solo dopo la prima scansione, se lo spazio è disponibile nell'area di memorizzazione colonne In-Memory. 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 di 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;

Questo esempio imposta 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.

Per ulteriori informazioni, 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 popolati nell'area di memorizzazione colonne In-Memory. 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 colonne In-Memory, l'oggetto viene rimosso solo quando 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 memoria:

  • Il database non inserisce automaticamente gli oggetti in memoria con l'impostazione PRIORITY di NONE. Tuttavia, è possibile popolare manualmente questi oggetti nell'area di memorizzazione colonne In-Memory. Per ulteriori informazioni, vedere Inserimento manuale dell'area di memorizzazione colonne IM e DBMS_INMEMORY.POPULATE Procedure.

  • Devono essere presenti scansioni continue delle tabelle per garantire che l'area di memorizzazione colonne In-Memory cresca automaticamente abbastanza per il carico di lavoro. Se un oggetto viene popolato parzialmente, la scansione della tabella 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 fino al 50% dell'SGA può essere utilizzato da In-Memory.

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

Gli oggetti nell'area di memorizzazione colonne In-Memory vengono gestiti in modo dinamico da Automatic In-Memory (AIM). Per impostazione predefinita, la memoria in entrata automatica è abilitata per Autonomous Database.

AIM utilizza statistiche interne per determinare la frequenza di accesso agli oggetti e alle colonne in memoria. Se l'area di memorizzazione colonne In-Memory è piena e altri segmenti ad accesso più frequente beneficerebbero della popolazione nell'area di memorizzazione colonne In-Memory, l'area di memorizzazione colonne In-Memory rimuove i segmenti inattivi.

Per garantire che il data set di lavoro sia sempre popolato, AIM rimuove 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ò arrivare 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.

  • Usando la procedura DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE per modificare la dimensione massima della memoria in entrata. È 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;
    /
    In questo esempio la dimensione massima in memoria viene modificata al 60% della dimensione SGA.

Per ulteriori informazioni, vedere SET_SGA_PERCENTAGE Procedure.

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-Memory per Autonomous Database modificando la dimensione massima in-memory su 0.

Ad esempio:

BEGIN
    DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(0);
END;
/

In questo esempio il valore della dimensione massima in memoria viene modificato su zero (0) e viene disabilitato Database In-Memory per l'istanza.

Per ulteriori informazioni, vedere SET_SGA_PERCENTAGE Procedure.