Farai 3 tipi di accordatura, 1 reattiva e 2 proattiva.
reattivo
All'improvviso, alcune query iniziano a causare problemi. Potrebbe essere a causa di un bug o di una funzionalità dell'applicazione, di una tabella che supera le aspettative, di un picco di traffico o di come "creativo" lo Strumento per ottimizzare le query. Potrebbe trattarsi di un affare di merda nel bel mezzo della notte, o potrebbe essere in risposta a una lentezza del sistema di natura non critica. In entrambi i casi, il carattere distintivo dell'accordatura reattiva è che hai già un problema . Inutile dire che vuoi fare il meno possibile. Il che ci porta a ...
Proattivi
Tipo 1: manutenzione ordinaria
In una sorta di programma, ogni pochi mesi o settimane a seconda della frequenza con cui lo schema cambia e della velocità con cui i dati crescono, è necessario rivedere l'output degli strumenti di analisi delle prestazioni del database (ad esempio report AWR per Oracle DBA). Sei alla ricerca di problemi incipiente, ovvero cose che sono in procinto di richiedere una messa a punto reattiva, così come la frutta bassa, elementi che non sono suscettibili di causare presto problemi ma che possono migliorare con un piccolo sforzo nella speranza di prevenire lontano -future. Quanto tempo dovresti dedicare a questo dipenderà da quanto tempo hai e da cos'altro potresti spenderlo, ma l'importo ottimale non è mai zero. Tuttavia, puoi facilmente ridurre l'importo che devi spendere facendo più di ...
Tipo 2: design corretto
L'ammonizione di Knuth contro "l'ottimizzazione prematura" è ampiamente nota e debitamente rispettata. Ma deve essere usata la definizione corretta di "prematuro". Alcuni sviluppatori di applicazioni, quando è autorizzato a scrivere le proprie query, hanno la tendenza ad adottare la prima query su cui si basano che è logicamente corretta e non prestano alcuna attenzione alle prestazioni, al presente o al futuro. Oppure possono testare un set di dati di sviluppo che semplicemente non è rappresentativo dell'ambiente di produzione (suggerimento: non farlo! Gli sviluppatori dovrebbero sempre avere accesso a dati realistici per i test). Il punto è che il momento giusto per ottimizzare una query è quando viene distribuita per la prima volta, non quando viene visualizzata in un elenco di SQL con prestazioni scarse e sicuramente non quando causa un problema critico.
Quindi cosa si qualificherebbe come ottimizzazione prematura in terra DBA? In cima alla mia lista sarebbe sacrificare la normalizzazione senza una necessità dimostrata. Sicuro che potresti mantenere una somma su una riga padre anziché calcolarla in fase di esecuzione dalle righe figlio, ma ne hai davvero bisogno? Se sei Twitter o Amazon, la de-normalizzazione strategica e il pre-calcolo possono essere i tuoi migliori amici. Se stai progettando un piccolo database di contabilità per 5 utenti, la struttura adeguata per facilitare l'integrità dei dati deve essere la massima priorità. Anche altre ottimizzazioni premature sono una questione di priorità. Non passare ore a modificare una query che viene eseguita una volta al giorno e impiega 10 secondi, anche se pensi di poterlo tagliare a 0,1 secondi. Forse hai un rapporto che viene eseguito per 6 ore al giorno, ma esplora la pianificazione come processo batch prima di investire tempo nella messa a punto. Non investire in un'istanza di reporting replicata in tempo reale separata se il carico di produzione non supera mai il 10% (supponendo che sia possibile gestire la sicurezza).
Testando dati realistici, ipotizzando con precisione modelli di crescita e di traffico (oltre alle quote per i picchi) e applicando la tua conoscenza delle stranezze dell'ottimizzatore della tua piattaforma, puoi distribuire query che funzionano (quasi) in modo ottimale non solo ora, ma in futuro e in condizioni tutt'altro che ideali. Quando si applicano le tecniche appropriate, è possibile prevedere e ottimizzare accuratamente le prestazioni della query (nel senso che ogni componente è veloce quanto deve essere).
(E mentre ci sei, impara le statistiche! )