23 settembre 2009

Oracle SQL Performance Tuning - aumentale!

Quando ci troviamo dinanzi ad un sistema informatico composto da più tecnologie organizzate in diversi sotto-sistemi è importante capire dove e come agire per aumentarne le performance.


Ogni sistema informatico è composto principalmente da due parti, back-end e front-end, la prima spesso composta da database (ad esempio Oracle) mentre la seconda da qualche interfaccia che presenta i dati all'utente e gli permette di interagire col sistema stesso (ad esempio interfacce web).


Il tempo di risposta del sistema ad ogni input dell'utente è un dato da non sottovalutare quando si sviluppa un software in quanto, oltre che dall'efficienza e dall'efficacia delle operazioni che il software ci permette di fare, non meno importante è il tempo con cui il sistema ci permette di farle. Per intendersi, nessuno spenderebbe anche soltanto un euro per un cellulare che, nonostante offra una conversazione audio perfetta ed sia fornito di uno schermo touch-screen di ultima generazione, impiegasse ad esempio 5 minuti per far partire una telefonata (ma nemmeno 1 minuto, nemmeno 30 secondi!): anche in questo caso il tempo di risposta del cellulare, in base all'input dell'utente di far partire una chiamata, è fondamentale affinchè l'utente sia soddisfatto e compiaciuto del proprio terminale.


Il front-end utilizza delle query per interrogare il database, ovvero il back-end. L'ottimizzazione delle query è un passo fondamentale per ottimizzare il sistema informativo e migliorarne notevolmente le prestazioni.

Ecco una piccola scaletta di accortezze da poter seguire per fare un po' di tuning di query SQL:
  1. mettere nelle join la tabella con meno cardinalità a sinistra;
  2. creare indici appositi sui campi che sono chiavi esterne, sui quali si fanno join;
  3. utilizzare, se necessario, degli hint nelle query, anche per forzare l’utilizzo di indici custom che potrebbero, altrimenti, erroneamente non essere usati;
  4. utilizzare l’explain plan per eliminare loop e table full scan;
  5. intercettare le query effettivamente eseguite dal sistema attraverso strumenti appositi (come ad esempio il browser session di Toad) e poter performare ciò che realmente viene lanciato dall'utente.
Quest'ultimo trucchetto può essere utile nel caso che qualche software (utilizzato generalmente lato front-end) modifichi le query lanciate dalle operazioni compiute dall'utente apportando dei piccoli, ma talvolta spiacevoli, arrangiamenti. A causa di questi "arrangiamenti", le query che effettivamente vengono lanciate potrebbero non essere quelle che ci aspettiamo ed è utile intercettarle a run-time (sebbene talvolta possa essere complesso!) per togliersi questo dubbio ed eventualmente ovviare a tale situazione per esempio utilizzando qualche functional index.

Nessun commento:

Posta un commento