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

Opzioni di ottimizzazione delle prestazioni del database SQL di Azure

Il database SQL di Azure è l'offerta Database-as-a-Service di Microsoft che offre un'enorme quantità di flessibilità e sicurezza e, come parte della Platform-as-a-Service di Microsoft, può sfruttare funzionalità aggiuntive. Poiché il database SQL di Azure è nell'ambito del database, ci sono alcune grandi differenze quando si tratta di ottimizzazione delle prestazioni.

Ottimizzazione dell'istanza

Molti elementi a livello di istanza utilizzati per la configurazione su installazioni complete sono vietati. Alcuni di questi elementi includono:

  • Impostazione della memoria minima e massima del server
  • Abilitazione dell'ottimizzazione per carichi di lavoro ad hoc
  • Modifica della soglia di costo per il parallelismo
  • Modifica del grado massimo di parallelismo a livello di istanza
  • Ottimizzazione di tempdb con più file di dati
  • Traccia i flag

Non essere troppo arrabbiato per alcuni di questi. L'istruzione ALTER DATABASE SCOPED CONFIGURATION consente alcune impostazioni di configurazione a livello di singolo database. Questo è stato introdotto con il database SQL di Azure e in SQL Server a partire da SQL Server 2016. Alcune di queste impostazioni includono:

  • Cancella la cache delle procedure
  • Impostazione del MAXDOP su un valore diverso da zero
  • Imposta il modello di stima della cardinalità di Query Optimizer
  • Abilita o disabilita gli hotfix per l'ottimizzazione delle query
  • Abilita o disabilita lo sniffing dei parametri
  • Abilita o disabilita la cache delle identità
  • Abilita o disabilita uno stub del piano compilato da archiviare nella cache quando un batch viene compilato per la prima volta.
  • Abilita o disabilita la raccolta di statistiche di esecuzione per i moduli T-SQL compilati in modo nativo.
  • Abilita o disabilita le opzioni online per impostazione predefinita per le istruzioni DDL che supportano la sintassi ONLINE=ON/OFF.
  • Abilita o disabilita le opzioni ripristinabili per impostazione predefinita per le istruzioni DDL che supportano la sintassi RESUMABLE=ON/OFF.
  • Abilita o disabilita la funzionalità di rilascio automatico delle tabelle temporanee globali

Come puoi vedere dall'elenco delle configurazioni con ambito, hai molto controllo e precisione per la messa a punto di comportamenti specifici per i singoli database. Per alcuni clienti, le limitazioni, ad esempio il controllo a livello di istanza, possono avere un impatto negativo, mentre altri lo vedranno come un vantaggio.

Per le aziende che dispongono di un database per cliente, che necessita di un isolamento completo, è integrato nel database SQL di Azure. Per coloro che necessitano delle funzionalità a livello di istanza di SQL Server ma desiderano sfruttare l'offerta PaaS di Microsoft, è disponibile l'istanza gestita SQL di Azure, che ha l'ambito dell'istanza. L'obiettivo è avere una compatibilità della superficie del 100% con SQL Server; quindi, puoi impostare la memoria minima e massima del server, abilitare l'ottimizzazione per carichi di lavoro ad hoc e modificare sia MAXDOP che la soglia di costo per il parallelismo. Tempdb su un'istanza gestita dispone già di più file, ma puoi aggiungerne altri e aumentare le dimensioni predefinite. In molti modi, sembra davvero l'installazione completa di SQL Server.

Ottimizzazione delle query

Un'altra differenza tra il database SQL di Azure e SQL Server è che Query Store è abilitato per impostazione predefinita nel database SQL di Azure. È possibile disattivare Query Store, ma in seguito limitare gli strumenti di prestazioni intelligenti nel portale di Azure che lo usano. Query Store è una funzionalità che fornisce informazioni dettagliate sulle prestazioni delle query e sulla scelta del piano. Query Store acquisisce anche una cronologia di query, piani e statistiche di runtime in modo che tu possa rivedere cosa sta succedendo. Vuoi sapere quale query ha il tempo di ricompilazione, il tempo di esecuzione, il conteggio di esecuzione, l'utilizzo della CPU, l'utilizzo della memoria, le letture/scritture più fisiche e altro ancora? Query Store ha queste informazioni. Per SQL Server, è necessario abilitare questa funzionalità per database. Se non conosci Query Store, la mia collega Erin Stellato ha un corso di tre ore su Pluralsight che ti aiuterà a iniziare.

La categoria degli strumenti per le prestazioni intelligenti ha quattro caratteristiche. In primo luogo, la panoramica delle prestazioni fornisce un riepilogo delle prestazioni complessive del database elencando le prime 5 query in base al consumo di CPU, eventuali consigli da ottimizzazione automatica, attività di ottimizzazione e impostazioni di ottimizzazione automatica correnti. Questa pagina di destinazione ti offre un rapido sguardo alle tue prestazioni.

In secondo luogo, l'opzione dei consigli sulle prestazioni elencherà tutti i consigli attuali per la creazione di indici o se gli indici devono essere eliminati. Se sono state completate azioni recenti, vedrai anche la cronologia.

In terzo luogo, Query Performance Insight è il luogo in cui puoi trovare una visione più approfondita del consumo di risorse visualizzando le prime 5 query per CPU, I/O dati o I/O log. Le prime 5 query sono codificate a colori in modo da poter visualizzare rapidamente la percentuale del consumo complessivo. È possibile fare clic sull'id della query per ottenere maggiori dettagli, incluso il testo SQL. C'è anche una scheda delle query di lunga durata. Mi piace molto che Microsoft abbia incluso una funzionalità come questa nel portale di Azure a costo zero. Fornisce valore fornendo ai clienti un portale per vedere le principali query offensive. Quello che trovo impegnativo qui è avere un modo per vedere una linea di base generale per il confronto di giorno per giorno, settimana per settimana e mese precedente. Tuttavia, per una rapida analisi e panoramica, Query Performance Insight è utile.

L'ultima caratteristica di questa categoria è la sintonizzazione automatica. Qui è dove puoi configurare il piano di forza, creare l'indice e rilasciare le impostazioni dell'indice. Puoi forzarne l'attivazione, la disattivazione o scegliere di ereditare dal server. Il piano forzato consente ad Azure di scegliere quello che secondo lui sarebbe il migliore dei piani di esecuzione per le query regredite. Questa funzionalità esiste anche in SQL Server 2017 Enterprise Edition come correzione automatica del piano. Alcuni DBA si innervosiscono quando sentono parlare delle funzionalità di ottimizzazione automatica, poiché temono che possano sostituire la necessità di DBA in futuro. Mi piace sempre porre la domanda:"Quanto tempo ogni giorno dedichi all'ottimizzazione proattiva delle query?". La risposta travolgente è che le persone possono effettivamente dedicare pochissimo tempo all'ottimizzazione proattiva e la maggior parte risponde che l'unica volta in cui si "sintonizzano" davvero è dopo il rilascio di un codice o quando gli utenti iniziano a lamentarsi.

Oltre agli strumenti integrati e al valore dell'utilizzo di Query Store, anche i DMV sono prontamente disponibili. Glenn Berry ha un'intera raccolta di script solo per il database SQL di Azure che puoi utilizzare. Un particolare DMV che voglio chiamare è sys.dm_os_wait_stats. Questo verrà estratto dal livello del server, quindi se vuoi davvero guardare le statistiche di attesa per il livello del database, dovrai invece usare sys.dm_db_wait_stats.

Hardware – Ridimensionamento

Un'altra area da considerare quando si esaminano le prestazioni con il database SQL di Azure è l'hardware sottostante. Il prezzo del database SQL di Azure viene calcolato in base alle unità di transazione del database (DTU) e ai vCore. Le DTU sono una misura combinata di CPU, memoria e I/O e sono disponibili in tre livelli; Base, Standard e Premium. Basic è solo 5 DTU, Standard varia da 10-3.000 DTU e Premium varia da 125-4.000 DTU. Per i livelli basati su vCore abbiamo General Purpose e Business Critical che vanno da 1 a 80 vCore.

Nel modello DTU, Basic dovrebbe essere considerato per lo sviluppo e il test. Ha solo una conservazione del backup di 7 giorni, quindi non lo considererei praticabile per i dati di produzione. Standard va bene per una richiesta di CPU bassa, media e alta con una richiesta di I/O da moderata a bassa. Il livello Basic e Standard offre 2,5 IOPS per DTU con 5 ms (lettura), 10 ms (scrittura). Il livello Premium è per una richiesta di CPU medio-alta e un I/O elevato, offrendo 48 IOPS per DTU con 2 ms (lettura/scrittura). Il livello Premium ha uno spazio di archiviazione di ordini di grandezza più veloce rispetto allo standard. Nel modello vCore, hai processori Gen4 che offrono 7 GB di RAM per core fisico e processori Gen 5 che offrono 5,1 GB di RAM per core logico. Dal punto di vista dell'I/O, General Purpose offre 500 IOPS per vCore con un massimo di 7.000 IOPS. Business Critical offre 5.000 IOPS per core con un massimo di 200.000.

Riepilogo

Il database SQL di Azure è ottimo per quei sistemi che richiedono l'isolamento del database mentre Istanza gestita di SQL di Azure è ottimo per quegli ambienti in cui è necessaria la compatibilità a livello di istanza (supporto per query tra database). Quando è necessario ottimizzare il database SQL di Azure, è necessario eseguire operazioni a livello di database poiché le opzioni a livello di istanza sono off limits, quindi le impostazioni di configurazione con ambito database sono le opzioni di ottimizzazione. Con la risoluzione dei problemi delle query con prestazioni scadenti, hai alcuni strumenti integrati che aiutano, incluso Query Store, e la maggior parte dei tuoi normali script di ottimizzazione funzionerà. Potresti scoprire che hai ancora bisogno di altro, come linee di base, più dati storici e la possibilità di creare condizioni di avviso per aiutarti a gestire i tuoi carichi di lavoro. È qui che possono aiutare potenti soluzioni di monitoraggio come SentryOne DB Sentry.

Quando tutto il resto fallisce o il tuo carico di lavoro è semplicemente aumentato oltre le tue attuali risorse hardware, scala a un livello superiore.