Introduzione a Sql Tuning
- Le istruzioni SQL vengono scritte per recuperare /fetch dati dal database. Vogliamo che la nostra istruzione sql funzioni velocemente (sql tuning) e fornisca i risultati in secondi.
- Un sql di progettazione scadente potrebbe rallentare l'intera operazione del database e interrompere l'intera operazione. È molto più difficile scrivere un SQL efficiente che scrivere un SQL funzionalmente corretto. sql performance tuning può migliorare significativamente la salute e le prestazioni di un sistema.
- La chiave per ottimizzare SQL è ridurre al minimo i dati a cui accede per fornire il risultato. Possiamo ridurre al minimo i dati a cui accede per fornire il risultato attraverso un percorso di ricerca ottimale.
Un semplice esempio potrebbe essere
select * from dept where emp=10
- Ora questa query dovrà cercare nell'intero reparto della tabella per trovare i dati in cui emp=10. Quindi deve accedere al tavolo completo
- Ora, se creiamo la colonna index to emp, può semplicemente accedere all'indice e ottenere il risultato. Quindi qui accede a meno dati
12 passaggi per eseguire l'ottimizzazione di Sql in Oracle
Qui i suggerimenti generali per l'ottimizzazione delle prestazioni di sql
(1) Innanzitutto è necessario disporre di tutti gli strumenti necessari per l'ottimizzazione di sql. È necessario disporre di buone informazioni su traccia, formattazione della traccia, piano di spiegazione, lettura del piano di spiegazione in Oracle.
Buona conoscenza dei vari metodi di join disponibili in Oracle e come utilizzarli in modo efficiente
(2) Leggere meno dati ed essere efficienti in termini di I/O.
Più dati leggi per l'istruzione sql, più latch deve acquisire e rallenta le prestazioni. quindi deve eseguire sempre meno letture logiche
Scrivere un'istruzione sql ragionevole dove filtri appropriati . Controlla il numero di righe nelle varie tabelle coinvolte e scopri il metodo migliore per creare l'istruzione sql
(2) Utilizzare buoni indici Oracle
Gli indici B-Tree e gli indici Bitmap possono essere utilizzati per aumentare le prestazioni delle query se i dati restituiti sono inferiori al 10%. Ma dobbiamo fare attenzione durante la creazione dell'indice poiché deve essere mantenuto anche per le operazioni di inserimento, aggiornamento ed eliminazione. Quindi la creazione di un indice crea un sovraccarico su molte cose. Quindi dobbiamo esaminare attentamente l'effetto della creazione dell'indice.
(3) Evita sql che disabilita l'utilizzo di index
SQL che disabilita gli indici
(a)Functions ( to_char(), to_date(), ecc. )
Correzione:sposta la funzione sul lato "variabile costante/bind"
(b) Type Casting
In SQL
dove emp_no =10 (emp_no è un varchar2)
In PL/SQL
dove emp_no =v_emp_num (v_emp_num è un numero)
Modificatori
e id + 0 =111
e date + 1 =sysdate (prova date =sysdate – 1)
Correzione:cambialo per evitarlo
(4) Utilizzare sempre la variabile bind nell'applicazione. Se non si utilizza la variabile bind in Oracle , sql verrà analizzato ogni volta e influirà sulle prestazioni del database. Se contiene la variabile bind, sql verrà memorizzato nella cache e l'ulteriore esecuzione non richiederà l'analisi e quindi le prestazioni complessive del sistema sono migliorate
(5) UNIONE vs OR. Utilizzare UNION per le query con due percorsi di esecuzione chiari; ognuno restituisce un numero abbastanza piccolo di righe. Non utilizzare union per le query che potrebbero restituire un numero elevato di righe poiché tutte le righe devono essere ordinate e la maggior parte di esse verrà eliminata. OR tende a disabilitare l'indice
(6) Utilizza le statistiche accurate dell'ottimizzatore sulla tabella per ottenere il piano ottimale.
(7) Se si utilizza la funzione sull'espressione nella condizione, verificare se esiste un indice basato sulla funzione su quella colonna. Se non è presente l'indice non verrà utilizzato
(8) Usa esiste vs in e Non esiste vs non in per subquery correlate
(9) Evita pratiche di codifica inadeguate
Alcuni suggerimenti
(a) Evita l'unione cartesiana . Assicurati che tutte le tabelle richieste nelle query siano necessarie e collegate tra loro
(b) Usa Decode per evitare viaggi multipli nel database
(c) Cerca di evitare l'unione esterna
(d ) A volte scomporre la logica in piccole parti rende il lavoro più veloce
(10) Se si tenta di utilizzare la vista complessa, verificare se è possibile utilizzare invece le tabelle di base poiché la vista tende a peggiorare le prestazioni
(11) Usa UNION ALL Vs UNION se sai che i dati recuperati non avranno righe duplicate
( 12) Utilizzare i suggerimenti per ottimizzare il piano di esecuzione. A volte il suggerimento può essere utilizzato per modificare il piano di esecuzione per la query in modo da prendere il percorso più ottimale. buone prestazioni ogni volta
I suggerimenti più comuni sono
/*+ LEADING (alias tabella) */ specifica la tabella in base alla quale iniziare a partecipare
/*+ FIRST_ROWS */ ottimo per l'on-line screens – favorisce NESTED LOOPS
/*+ INDEX ( table alias.index name) */ specifica l'indice che si desidera utilizzare. Nota:se l'indice viene eliminato e ricreato e il nome cambia, l'hint non è più valido.
/*+ USE_NL (table alias1 table alias 2)*/ chiede all'ottimizzatore di utilizzare il Nested Loop Join per le due tabelle specificate
Evita suggerimenti per l'ottimizzazione non necessari e usali con cura
Questi sono alcuni dei suggerimenti per evitare problemi ed eseguire l'ottimizzazione di sql. Sql tuning è un grande Oceano e puoi imparare le cose solo praticando. In bocca al lupo!!
Legge anche
https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm