Tuning delle prestazioni delle query sul database relazionale

Molti clienti riscontrano problemi di prestazioni con le applicazioni di data warehouse. In alcuni casi l'analisi delle query SQL generate da Oracle Analytics risulta complessa. In questo argomento vengono fornite alcune linee guida su come analizzare e ridurre al minimo i problemi di prestazioni che potrebbero derivare dalle query SQL generate da Oracle Analytics.

In questo argomento non vengono trattati i problemi di prestazioni dovuti a problemi con la rete, il browser o la visualizzazione del report.

Analizzare il log delle query per Oracle Analytics (è necessario il livello di log 3)

Per informazioni su come trovare questo log o comprenderne il contenuto, vedere Raccogliere e analizzare i log delle query.

  1. Confrontare il tempo trascorso dalla query in Oracle Analytics con il tempo trascorso nel database, ossia il tempo di risposta con la durata della query fisica. Normalmente, il tempo trascorso in Oracle Analytics non supera pochi secondi.
  2. Se il tempo di risposta è superiore a pochi secondi, analizzare i singoli passi eseguiti in Oracle Analytics per scoprire la causa (è necessario il livello di log 5).

Analizzare la query SQL fisica

  1. Controllare se tutte le tabelle incluse nella query sono necessarie. Cercare eventuali tabelle unite tramite join ma non incluse nella clausola SELECT e non applicare alcun filtro (filtri reali, non condizioni join).
  2. Identificare il numero di query fisiche e query secondarie generate. In particolare, determinare quante volte la query legge una tabella fact. In teoria, la query legge una sola tabella fact e una sola volta. Se sono presenti più tabelle fact, scoprirne il motivo e verificare se è possibile rimuoverne alcune.
  3. Verificare la presenza di colonne escluse, regole di aggregazione non additive (REPORT_AGGREGATE, count(distinct)...), passi di selezione, una query secondaria nel report, operatori di tipo insiemistico (UNION), totali, totali parziali, viste multiple e così via.
  4. Verificare se sono presenti outer join. Scoprire da dove hanno origine e se è possibile rimuoverne alcuni modificando la progettazione.

Analizzare il piano di esecuzione

Se l'ottimizzazione della query SQL non è sufficiente, analizzare il piano di esecuzione per trovare la causa principale del problema di prestazioni. Richiedere assistenza all'amministratore del database (DBA). A questo punto, i principali modi per migliorare le prestazioni sono quattro:
  1. Ridurre il volume di chiamate di input/output migliorando i percorsi di accesso ai dati (indici).
  2. Ridurre il volume di chiamate di input/output riducendo il volume di dati letti. Ad esempio, è possibile rivedere i filtri applicati o la struttura del modello dati (vedere la sezione successiva).
  3. Aumentare il parallelismo (numero di thread utilizzati per leggere tabelle di grandi dimensioni).
  4. Migliorare la velocità delle chiamate di input/output (miglioramenti alle infrastrutture, database in memoria e così via).

Rivedere e migliorare il modello dati per ridurre il volume di dati letti

  1. Creare tabelle aggregate.
  2. Utilizzare la frammentazione.

    Ad esempio, se gli utenti selezionano i dati principalmente per l'anno, il trimestre o il mese corrente, è possibile suddividere il fact in due tabelle: una per i dati correnti e una per quelli archiviati. Nel database Oracle è anche possibile utilizzare il partizionamento.

  3. Utilizzare la denormalizzazione per ridurre il numero di join.
  4. Suddividere le tabelle in modo da ridurre il numero di colonne.

    Il volume di dati letti non dipende solo dal numero di righe in ciascuna tabella. Il volume della tabella dipende anche dal numero e dalla dimensione delle colonne che contiene. Ad esempio, è possibile suddividere una tabella di grandi dimensioni con 500 colonne in due tabelle, una con le 50 colonne utilizzate più di frequente e l'altra con le rimanenti 450 colonne che vengono utilizzate raramente.

Molti problemi di prestazioni in Oracle Analytics derivano da una progettazione mediocre che causa la generazione di query SQL non ottimali. Se si modifica la progettazione, è possibile migliorare le query SQL generate da Oracle Analytics. Oltre che sulle prestazioni dei report, questa operazione può influire notevolmente anche sulla quantità di risorse utilizzate nel database.