Monitorare le prestazioni del database

Completato

Una parte importante delle tecniche di risoluzione dei problemi che è possibile usare per la risoluzione dei problemi relativi alle prestazioni del database rimane invariata in Azure SQL.

Tutti gli strumenti usati in genere per il monitoraggio e la risoluzione dei problemi SQL Server sono applicabili anche alle SQL Server in esecuzione nella macchina virtuale di Azure, inclusi strumenti come Monitor prestazioni. Tuttavia, a causa della natura della piattaforma distribuita come servizio (PaaS), il database SQL di Azure e Istanza gestita di SQL di Azure offrono un set di strumenti diverso. Verranno ora esaminati gli strumenti specifici per le offerte PaaS di Azure e le relative funzionalità.

Confrontare i risultati delle prestazioni con la baseline

Il processo di definizione di una baseline inizia in genere ben prima della migrazione effettiva del database. Ciò implica la raccolta di un set completo di misurazioni dei dati che riflettono le prestazioni standard del database nell'ambiente originale. Queste misurazioni possono includere, a titolo esemplificativo, l'uso della CPU, i tempi di risposta, i tassi di transazione e i tassi di errore.

Tale baseline funge da punto di riferimento rispetto al quale è possibile confrontare le prestazioni del database migrato. Tuttavia, la valutazione o il confronto di questi dati di base con le metriche delle prestazioni del database migrato vengono eseguite solo dopo il completamento della migrazione.

Dopo la migrazione, le prestazioni del nuovo ambiente di database vengono monitorate e misurate. Queste metriche post-migrazione vengono quindi confrontate con la baseline pre-migrazione per identificare eventuali discrepanze o problemi di prestazioni. Questo confronto consente di comprendere se la migrazione ha avuto effetti negativi sulle prestazioni del database o se sono presenti aree che richiedono l'ottimizzazione per migliorare le prestazioni.

Ottimizzazione automatica

Ottimizzazione automatica è una funzionalità che apprende continuamente dal carico di lavoro, identifica potenziali problemi e miglioramenti e offre raccomandazioni basate sui dati del Query Store. Si adatta alle modifiche dei piani di esecuzione causate da modifiche dello schema o dell'indice, oppure dagli aggiornamenti dei dati.

È possibile applicare manualmente le raccomandazioni di ottimizzazione tramite il portale Azure, oppure consentirne l'applicazione autonoma da parte dell'ottimizzazione automatica. In Database SQL di Azure, è anche possibile migliorare le prestazioni delle query ottimizzando gli indici.

Correzione automatica dei piani

Grazie ai dati del Query Store, il motore del database è in grado di rilevare quando i piani di esecuzione delle query sono regrediti in termini di prestazioni. Sebbene sia possibile identificare manualmente un piano regredito tramite l'interfaccia utente, Query Store offre un'opzione che permette di ricevere notifiche automatiche.

Screenshot of the Query Store view for regressed plan correction.

Nell'esempio fornito, accanto a ID Piano 1 viene visualizzato un segno di spunta, a indicare che il piano è forzato.

Dopo aver abilitato l'ottimizzazione automatica, il motore di database applicherà automaticamente qualsiasi piano di esecuzione delle query suggerito nelle condizioni seguenti:

  • Il tasso di errore del piano precedente supera quello del piano consigliato
  • Il guadagno stimato della CPU supera i 10 secondi
  • Il piano forzato ha prestazioni superiori a quello precedente

Quando si verifica l'uso forzato automatico del piano, il motore di database applica l'ultimo piano valido e ne monitora le prestazioni. Se il piano forzato non mostra prestazioni migliori rispetto al piano precedente, l'uso forzato viene annullato e viene compilato un nuovo piano. Se mostra prestazioni superiori al piano precedente, rimane forzato fino a quando non viene eseguita una ricompilazione.

Usare la query T-SQL seguente per abilitare la correzione automatica del piano.

ALTER DATABASE [WideWorldImporters] SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON);

È possibile visualizzare le raccomandazioni per l'ottimizzazione automatica tramite la visualizzazione a gestione dinamica sys.dm_db_tuning_recommendations. La DMV fornisce dettagli, tipi e stati delle raccomandazioni. Per verificare che l'ottimizzazione automatica sia abilitata per un database, controllare la visualizzazione sys.database_automatic_tuning_options.

L'ottimizzazione automatica per Istanza gestita di SQL di Azure supporta solo FORCE LAST GOOD PLAN.

Per abilitare le notifiche per l'ottimizzazione automatica, vedere Notifiche e-mail per l'ottimizzazione automatica

Gestione automatica degli indici

Database SQL di Azure supporta l'ottimizzazione automatica dell’indice. Ciò significa che nel corso del tempo il database è in grado di conoscere i carichi di lavoro esistenti e di fornire raccomandazioni sull'aggiunta o la rimozione di indici, al fine di offrire prestazioni migliori. Come nel caso dell'uso forzato dei piani di query migliorati, è possibile configurare il database in modo da consentire la creazione o la rimozione automatica degli indici in base alle prestazioni degli indici esistenti.

Screenshot of Automatic tuning Options for Azure SQL Database.

In alternativa, usare la query seguente per visualizzare le funzionalità di ottimizzazione automatica abilitate nel database.

SELECT name,
    desired_state_desc,
    actual_state_desc,
    reason_desc
FROM sys.database_automatic_tuning_options

La creazione dell'indice richiede un utilizzo intensivo delle risorse e la sua creazione è fondamentale per garantire che non vi siano effetti negativi sui carichi di lavoro.

Database SQL di Azure monitora automaticamente le risorse necessarie per implementare nuovi indici per impedire il degrado delle prestazioni. L'azione di ottimizzazione viene ritardata fino a quando le risorse non diventano disponibili, ad esempio quando le risorse necessarie per i carichi di lavoro esistenti impediscono la creazione dell'indice.

Esplorare Informazioni dettagliate prestazioni query

La fase iniziale di qualsiasi attività di ottimizzazione delle prestazioni del database prevede l'individuazione delle query che richiedono il maggior consumo di risorse. Nelle versioni precedenti di SQL Server, ciò richiedeva un'analisi approfondita e un set di script SQL complessi, rendendo laborioso il processo di raccolta dei dati.

Identificare le query problematiche

Il database SQL di Azure offre uno strumento denominato Informazioni dettagliate sulle prestazioni delle query, che consente all'amministratore di identificare rapidamente le query più dispendiose. È disponibile nel pannello principale del database di Azure SQL, nella sezione Prestazioni intelligenti.

Informazioni dettagliate sulle prestazioni delle query nel database SQL di Azure offre tre opzioni di filtro: per le query a esecuzione prolungata, per le query che consumano più risorse (ovvero l'impostazione predefinita) o un filtro personalizzato. Visualizza le prime cinque query ordinate in base a una risorsa scelta, ad esempio CPU, I/O dati o I/O log. È possibile eseguire il drill-in delle singole query selezionando la riga all'interno della griglia inferiore. Ogni riga è contrassegnata con un colore distinto che corrisponde al colore nel grafico a barre.

Screenshot of Query Performance Insights dashboard from Azure portal.

La scheda personalizzata offre maggiore flessibilità rispetto alle altre opzioni. Consente un esame più personalizzato dei dati sulle prestazioni tramite diversi menu a discesa che influenzano la visualizzazione dei dati. Le metriche chiave includono CPU, I/O di log, I/O di dati e memoria, che sono aspetti delle prestazioni limitati dal livello di servizio e dalle risorse di calcolo del database SQL di Azure.

Screenshot of a custom dashboard in Query Performance Insight.

Se si esegue il drill-in di una singola query, è possibile visualizzare l'ID della query e la query stessa, nonché il tipo di aggregazione e il periodo di tempo associato.

Screenshot of the details of Query ID 3204 in Query Performance Insight.

Sebbene Informazioni dettagliate prestazioni query non mostri il piano di esecuzione della query, è possibile identificare rapidamente la query e usare le informazioni per estrarre il piano da Query Store nel database.

Avvisi

È possibile configurare avvisi sulle prestazioni per i database nel database SQL di Azure tramite il portale di Azure. Questi avvisi possono inviare notifiche tramite posta elettronica o chiamare un webhook quando una determinata metrica (ad esempio le dimensioni del database o l'utilizzo della CPU) raggiunge una soglia.

Il processo di configurazione degli avvisi è simile tra il database SQL e Istanza gestita di SQL. Per configurare gli avvisi delle prestazioni per il database SQL di Azure, passare alla sezione Monitoraggio e selezionare Avvisi. Da qui è necessario stabilire una nuova regola di avviso, definire una condizione e creare un gruppo di azioni.

Per altre informazioni sugli avvisi per Istanza gestita di SQL di Azure, vedere Creare avvisi per Istanza gestita di SQL di Azure tramite il portale di Azure. Per configurare gli avvisi per il database SQL di Azure, vedere Creare avvisi per il database SQL di Azure e Azure Synapse Analytics tramite il portale di Azure.

Azure SQL Insights

Azure SQL Insights migliora l'esperienza di monitoraggio offrendo visualizzazioni interattive e pronte all’uso. Consente di personalizzare la raccolta e la frequenza dei dati di telemetria e combinare i dati provenienti da più origini in un'unica esperienza di monitoraggio. Questa funzionalità inoltre conserva un set di metriche nel tempo in modo da poter analizzare i problemi di prestazioni eventualmente riscontrati in passato.

Importante

È consigliabile configurare Azure SQL Insights solo dopo che il database migrato è stato completamente integrato nell'ambiente di produzione. Ciò impedisce allo strumento di acquisire dati rumorosi durante la fase di migrazione e test.

Per iniziare a usare Informazioni dettagliate su SQL, è necessaria una macchina virtuale dedicata che monitori e raccolga in remoto i dati dai server SQL. Su questa macchina virtuale dedicata devono essere installati i componenti seguenti:

  • Agente di Monitoraggio di Azure
  • Estensione Informazioni dettagliate carico di lavoro

Inoltre, per configurare SQL Insights sono necessari i componenti seguenti.

Profilo di monitoraggio: raggruppare server, istanze o database da monitorare.

Area di lavoro Log Analytics: dove inviare i dati di monitoraggio di SQL.

Impostazioni di raccolta: è possibile personalizzare la raccolta dati per il profilo. Le impostazioni predefinite coprono la maggior parte degli scenari di monitoraggio e in genere non richiedono modifiche.

Eventi estesi

Lo strumento Eventi estesi è un sistema di monitoraggio solido che acquisisce attività dettagliate del server e del database. I filtri possono essere applicati per ridurre il sovraccarico della raccolta dati e concentrarsi su problemi di prestazioni specifici. Tutte le offerte di Azure SQL supportano Eventi estesi.

Sebbene la configurazione di Eventi estesi sia simile in SQL Server, database SQL di Azure e Istanza gestita di SQL di Azure, questo modulo si concentra sulle loro differenze piuttosto che sull'insegnamento del processo di configurazione.

Di seguito sono riportate alcune differenze principali relative alla configurazione di eventi estesi nel database SQL di Azure:

  • Transact-SQL: quando si esegue il comando CREATE EVENT SESSION in SQL Server, si usa la clausola ON SERVER. Tuttavia, nel database SQL di Azure si usa invece la clausola ON DATABASE. La clausola ON DATABASE si applica anche a ALTER EVENT SESSION e ai comandi DROP EVENT SESSION di Transact-SQL. Database SQL di Azure supporta solo sessioni con ambito database.

  • Sessioni con ambito database: gli eventi estesi sono basati sul modello di isolamento a tenant singolo nel database SQL di Azure. Una sessione di eventi in un database non può accedere a dati o eventi da un altro database. Non è possibile emettere un'istruzione CREATE EVENT SESSION nel contesto del database master¹.

  • Archiviazione: poiché non si ha accesso al file system del server in cui si trova il database nel database SQL di Azure, è possibile configurare una destinazione dell'account di archiviazione per archiviare le sessioni di eventi estese.