Oracle
 sql >> Database >  >> RDS >> Oracle

Ottimizzazione SQL

Non molto tempo fa, ho dato un tutorial su Explain Plan al nostro personale di sviluppo delle applicazioni. Una domanda che è emersa è stata:come posso decidere quali istruzioni SQL devono essere messe a punto? Uso alcuni approcci diversi e trovo candidati per l'ottimizzazione SQL da diverse angolazioni.

  1. Eseguo regolarmente revisioni del codice sulle istruzioni SQL che colpiscono il nostro database. Sfrutto la mia esperienza per esaminare rapidamente un'istruzione SQL nuova o modificata in modo significativo per decidere se è necessario indagare ulteriormente sull'SQL. Ad esempio, se una query su una tabella esegue la ricerca su una colonna PK o Unique, posso essere abbastanza sicuro che funzionerà velocemente. Se l'istruzione SQL mi sembra sospetta, la eseguirò tramite Explain Plan e/o cronometra l'istruzione per assicurarmi che venga eseguita a sufficienza.
  2. Ho ricevuto dall'Enterprise Manager di Oracle un avviso per la contesa di risorse nel nostro sistema di database di test. Eventuali istruzioni SQL che mi sono perse durante la revisione del codice possono essere trovate a volte qui. Se ricevo un avviso di contesa di risorse, salterò e vedrò se una o due istruzioni SQL stanno causando un problema. Questa è la mia ultima possibilità di catturare le istruzioni SQL prima che arrivino alla produzione.
  3. Sfrutto Ignite per Oracle. Questo prodotto è di Confio, ma Confio ora fa parte di Solarwinds. Normalmente, non collego i prodotti del fornitore, ma in questo caso farò un'eccezione. La cosa che mi piace di Ignite è che mi invia un rapporto via email ogni lunedì. Il rapporto contiene i primi N trasgressori in base al tempo di attesa. Mi ci vogliono pochi secondi per guardare questo rapporto. Cerco le barre grandi nel rapporto. Nella schermata di esempio qui sotto, puoi vedere una barra blu che attira immediatamente la tua attenzione. Il numero a destra è un valore id e se fai clic su di esso, puoi ottenere il testo SQL. Questo è un ottimo modo per identificare le istruzioni SQL che necessitano di ottimizzazione. È super veloce e super facile.

Come puoi vedere, cerco di trovare SQL problematico mentre vengono sviluppati, quando sono nel nostro sistema di test e anche dopo che hanno raggiunto la produzione.