Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché l'ottimizzazione delle prestazioni SQL è l'abilità di gestione del database più importante da avere

Perché l'ottimizzazione delle prestazioni SQL è così importante per la gestione del database?

Perché può farti risparmiare molto tempo. Abbi pazienza e vedrai come.

Ottimizzazione delle prestazioni SQL e gestione del database:collegamento dei punti

La maggior parte dei professionisti del database trascorre il proprio tempo a tenere le luci accese. Investono la maggior parte dei loro sforzi nel garantire tempi di attività tenendo d'occhio risorse come memoria, storage e throughput di rete. Questa è una parte importante della gestione dei database, ma man mano che sempre più aziende spostano i propri database su risorse cloud quasi illimitate come AWS e Azure, altri aspetti sono diventati più importanti.

L'ottimizzazione delle prestazioni SQL è uno di questi aspetti. Una volta che le luci sono state mantenute accese in modo sicuro e si è passati alla gerarchia delle esigenze nella gestione del database, la prossima cosa che si desidera sono prestazioni migliori e ciò richiede un'ottimizzazione.

Prime domande da porre durante l'ottimizzazione delle prestazioni in SQL

Prima o poi, molti professionisti del database si trovano di fronte a un SQL Server che non hanno creato. Non ci sono molte guide pratiche per quella situazione. L'ottimizzazione delle prestazioni SQL è un esercizio per approfondire, capire cosa c'è che non va e quindi risolverlo in modo iterativo.

Nelle prime correzioni, potresti non toccare nemmeno le istruzioni SQL. Alcuni professionisti del database iniziano a livello di utente/sessione. Vanno dove gli utenti sono infelici, ascoltano come suonano le loro lamentele e pongono domande.

  • Quali schermate o pagine richiedono troppo tempo per essere visualizzate?
  • L'applicazione è più lenta quando creano un nuovo ticket o ne aprono uno esistente?
  • Ci vuole molto tempo per salvare un record?
  • Quanto è "molto tempo?"

Una volta che hanno queste risposte, vanno a vedere cosa lo sta causando nel database.

È meglio che sedersi il primo giorno e decidere di affrontare qualcosa come la frammentazione, che potrebbe non interessare affatto gli utenti. Il punto è iniziare con ciò che interessa agli utenti.

Pensa anche al livello di istanza/database. Nel mondo Microsoft, ad esempio, i lavori di SQL Server Agent sono un buon punto di partenza. Si tratta di una serie di azioni che di solito definiscono un'attività amministrativa di cui è possibile monitorare l'esito positivo o negativo. Sono pensati per essere convenienti, ma come molte cose nella gestione dei database, tendono ad accumularsi quando le persone dimenticano come hanno avuto origine e cosa fanno.

Potresti trovare più lavori che fanno la stessa cosa, come eseguire versioni diverse di uno script di indicizzazione o, peggio ancora, lavorare l'uno contro l'altro. Esamina i lavori già configurati alla luce di due domande:"Che cosa fa questo lavoro?" e, soprattutto, "Se smetto quel lavoro, accadrà qualcosa di brutto?"

Quali fattori dovresti cercare?

Una volta raggiunto il livello di ottimizzazione delle prestazioni SQL, prende spunti per il comportamento da diversi fattori. Come descritto durante il nostro webcast Ask the Experts:Database Performance Roundtable, puoi dedicare meno tempo all'ottimizzazione dell'SQL stesso se trovi e interpreti correttamente fattori come questi:

  • Blocco —  Se il server si blocca, è come una bomba a orologeria. Supponiamo che uno script avvii una transazione e non la chiuda; ciò potrebbe portare a un file di registro che cresce e cresce fino all'esaurimento dello spazio. Il blocco è una cattiva notizia per le prestazioni, quindi cercalo subito.
  • Agenti —  A proposito dei processi di SQL Server Agent, è noto che gli amministratori avvolgono inavvertitamente attività che riducono le prestazioni nei processi. Possono eseguire transazioni o ricostruire indici in un lavoro o ridurre il database in una transazione. In un caso del genere, prendere in considerazione la disabilitazione temporanea dell'agente per chiudere tutti i lavori associati. È una tecnica aggressiva, ma se migliora le prestazioni, saprai perché.
  • Statistiche di attesa —  Chiediti:"Cosa sta aspettando il server in questo momento?" Metriche come l'aspettativa di vita della pagina e la lunghezza della coda del disco hanno alcune risposte, ma offrono solo una visione ristretta. Le statistiche di attesa ti mostrano tutto attraverso la lente dei tipi di attesa e delle categorie di attesa, permettendoti di concentrarti sui cinque eventi di attesa che consumano più tempo. sp_BlitzFirst di Brent Ozar è una procedura archiviata affidabile per scoprire cosa stanno aspettando le tue query SQL Server in questo momento. Quindi, quando vuoi studiare i modelli a lungo termine nelle statistiche di attesa per il tuo server, cerca uno strumento di monitoraggio delle prestazioni.
  • Attività dell'amministratore —  Questo è anche noto come "errore pilota", perché alcuni problemi di prestazioni derivano da ciò che stai facendo tu stesso. Supponiamo che tu stia eseguendo contemporaneamente SQL Server Activity Monitor e SQL Server Profiler , cercando di apprendere Query Store. Non puoi superare l'effetto osservatore; quando tieni traccia di tutto in questo modo, stai solo chiedendo che il database rallenti.
  • Indici —  Per qualcosa che dovrebbe essere benefico, gli indici possono sicuramente darti un dolore al collo. In effetti, meritano più di un solo proiettile. Continua a leggere.

Ottimizzare le prestazioni SQL significa esaminare attentamente gli indici

In gran parte, l'ottimizzazione delle prestazioni SQL si riduce all'ottimizzazione dell'indice. Fortunatamente, se lo padroneggi per la gestione del database in locale, le tue competenze sono facilmente trasferibili alla gestione del database nel cloud.

L'ottimizzazione degli indici sta acquisendo importanza a causa della varietà in evoluzione di indici: cluster, non cluster, univoci, filtrati, columnstore, hash, ottimizzati per la memoria non cluster, XML, spaziali e full-text, solo per citarne alcuni. Ma una cosa che non è mai cambiata è la prima colonna dell'indice, che guida le decisioni sull'indice prese dal motore di database.

Molti fornitori vendono e distribuiscono applicazioni con molti indici ben intenzionati che finiscono per non essere mai utilizzati o, peggio ancora, in realtà ostacolano le prestazioni. Se esamini gli script di indicizzazione inutilizzati o gli script di consumo di indici in alcuni prodotti software, troverai un eccesso di indici su una chiave esterna. Se il prodotto utilizza, ad esempio, 20 chiavi esterne, i fornitori possono spedire fino a 20 indici, più dieci indici a colonna singola, più altri dieci indici su un indice cluster univoco e così via.

Ogni volta che hai la possibilità, il modo migliore per avvicinarti all'architettura del database consiste nell'iniziare con un indice cluster che ritieni rappresenti al meglio la tabella. Quindi, lascia che il sistema funzioni da solo per un po'. Se e come hai bisogno di più indici, creali. L'aggiunta di indici è un esercizio per scambiare prestazioni migliori qui con problemi come riempire lo spazio su disco e bloccarsi lì. Diventa difficile vedere come ogni indice aggiuntivo influisca sul sistema in generale.

Del resto, prendi in considerazione l'eliminazione degli indici, come una persona allergica eliminerebbe i gruppi alimentari, per vedere come cambiano le prestazioni. Prova a eliminare tutti gli indici sulla tua istanza di sviluppo e vedi quali influiscono sulle tue prime cinque query.

Ottimizzazione delle prestazioni in SQL Server:strumenti in dotazione

Nota che non sei solo in questo sforzo. SQL Server include funzionalità progettate per migliorare le prestazioni.

Le guide del piano ti consentono di modificare il modo in cui SQL Server esegue una determinata query e, anche se non si tratta di una pura ottimizzazione delle prestazioni di SQL, influisce sulle prestazioni. Molte applicazioni contengono query SQL scritte da un fornitore esterno e, anche se tali query causano scarse prestazioni, alcuni professionisti del database sono comprensibilmente riluttanti a modificarle. Con le guide del piano puoi allegare un suggerimento per la query o un piano fisso alla query e influenzarne l'esecuzione.

Tuttavia, lo svantaggio delle guide dei piani è che, sebbene non cambino nel tempo, l'ambiente che li circonda lo fa. Come una tabella di marcia stampata, potrebbero funzionare bene a breve termine e diventare obsoleti in breve tempo, quindi se hai intenzione di fare affidamento su di essi, faresti meglio a rivisitarli di tanto in tanto.

Correlata alle guide del piano è Query Store, una funzionalità di SQL Server che ti aiuta a identificare e ottimizzare le query che consumano la maggior parte delle risorse nel tuo sistema. Query Store non è abilitato per impostazione predefinita per i nuovi database SQL Server e Azure Synapse Analytics (SQL DW). Ma è abilitato per impostazione predefinita nei nuovi database SQL di Azure.

In generale, non è difficile abilitare Query Store, ma non tutti gli SQL Server ne hanno bisogno sin dall'inizio. Alcuni amministratori non conoscono Query Store e altri lo sanno ma non si sono ancora presi il tempo di esplorarlo adeguatamente; è meglio lasciarlo disabilitato. Successivamente, quando avranno compreso come funziona Query Store, potranno utilizzarlo per trovare le differenze di prestazioni causate dalle modifiche al piano di query.

Infine, Database Engine Tuning Advisor analizza i carichi di lavoro e consiglia indici o strategie di partizionamento per migliorare le prestazioni delle query. Eseguire Tuning Advisor sul tuo database è una buona idea; basta non eseguirlo troppo presto. Assicurati che il tuo database contenga dati sufficienti in modo che i consigli sugli indici siano validi. Quando crei la tua applicazione per la prima volta, potresti avere solo un migliaio di righe in ogni tabella. I consigli di Tuning Advisor sono più utili una volta che il database è cresciuto.

Mostrami i soldi

Come accennato all'inizio, l'ottimizzazione delle prestazioni SQL è importante per la gestione del database perché può farti risparmiare denaro. Come?

Soprattutto nel cloud, dove il ridimensionamento tramite carta di credito è molto diffuso, i team IT stanno scoprendo quanto può essere davvero costoso lo spazio di archiviazione mensile. Inoltre, stanno iniziando a capire che eseguire query scritte male e lasciare che AWS e Azure gestiscano i propri indici aumenta i costi di cloud computing. Query lente e indici errati ti costano denaro.

L'ottimizzazione delle prestazioni di SQL riguarda il corretto funzionamento di tutte queste cose. In questo modo, indipendentemente dal fatto che tu rimanga nel mondo degli OpEx on-premise o che effettui la migrazione al mondo CapEx del cloud, mantieni il controllo sulle tue spese.


No