Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:Database SQL di Azure
Per risolvere i problemi di prestazioni in un database Hyperscale, metodologie generali di ottimizzazione delle prestazioni SQL è il punto di partenza di qualsiasi analisi delle prestazioni. Tuttavia, data l'architettura distribuita di Hyperscale, potrebbe essere necessario prendere in considerazione ulteriori dati diagnostici. Questo articolo descrive i dati di diagnostica specifici di Hyperscale.
Riduzione del ritardo nella registrazione dei log
Ogni database e pool elastico nel database SQL di Azure gestisce il tasso di generazione dei log tramite governance del tasso dei log. Il limite di velocità del log viene esposto nella primary_max_log_rate colonna in sys.dm_user_db_resource_governance.
A volte, la frequenza di generazione dei log nella replica di calcolo primaria deve essere ridotta per mantenere i contratti di servizio di recuperabilità. Ciò può verificarsi, ad esempio, quando un server di pagine o un'altra replica di calcolo è notevolmente in ritardo nell'applicazione di nuovi record di log dal servizio di log. Se non ci sono componenti Hyperscale attivi, il meccanismo di governance della frequenza dei log consente alla velocità di generazione dei log di raggiungere i 150 MiB/s per database per hardware della serie Premium e hardware ottimizzato per la memoria della serie Premium. Per l'hardware della serie standard, la velocità massima del log è 100 MiB/s per ogni database. Per i pool elastici, la velocità massima di log è di 150 MiB/s per pool per hardware ottimizzato per la memoria premium e di serie Premium e 125 MiB/s per pool per altri hardware.
I tipi di attesa seguenti vengono visualizzati in sys.dm_os_wait_stats quando viene ridotta la frequenza di log:
| Tipo di attesa | Ragione |
|---|---|
RBIO_RG_STORAGE |
Utilizzo ritardato del log da parte di un server di pagine |
RBIO_RG_DESTAGE |
Consumo ritardato dei log da parte dell'archiviazione dei log a lungo termine |
RBIO_RG_REPLICA |
Utilizzo ritardato del log da una replica secondaria a disponibilità elevata o da una replica denominata |
RBIO_RG_GEOREPLICA |
Consumo ritardato del log da parte di una replica geografica secondaria |
RBIO_RG_DESTAGE |
Utilizzo ritardato del log da parte del servizio di log |
RBIO_RG_LOCALDESTAGE |
Utilizzo ritardato del log da parte del servizio di log |
RBIO_RG_STORAGE_CHECKPOINT |
Consumo ritardato dei log da parte di un server di pagine a causa di un checkpoint lento del database |
RBIO_RG_MIGRATION_TARGET |
Utilizzo ritardato del log da parte del database non Hyperscale durante la migrazione inversa |
La funzione DMF (Dynamic Management Function ) sys.dm_hs_database_log_rate() fornisce altri dettagli per comprendere la riduzione della frequenza di log, se presente. Ad esempio, può indicare quale replica secondaria specifica è dietro l'applicazione di record di log e qual è la dimensione totale del log delle transazioni non ancora applicato.
Letture del server di pagine
Le repliche di calcolo non memorizzano nella cache una copia completa del database in locale. I dati locali della replica di calcolo vengono archiviati nel pool di buffer (in memoria) e nella cache RBPEX (Resilient Buffer Extension) locale che contiene un subset delle pagine di dati a cui si accede più di frequente. Questa cache SSD locale viene ridimensionata proporzionalmente alle dimensioni di calcolo. Ogni server di pagine, d'altra parte, dispone di una cache SSD completa per la parte del database gestita.
Quando un I/O di lettura viene emesso in una replica di calcolo, se i dati non esistono nel pool di buffer o nella cache SSD locale, la pagina nella
Diverse viste a gestione dinamica (DMV) ed eventi estesi includono colonne e campi che specificano il numero di letture remote da un server di pagine, che possono essere confrontate con le letture totali. Query Store acquisisce anche le letture dalla memoria di pagina del server nelle statistiche di runtime delle query.
Le colonne per le letture delle pagine del server di report sono disponibili nelle DMV di esecuzione e nelle viste del catalogo.
I campi di lettura del server di pagine sono presenti negli eventi estesi seguenti:
sql_statement_completedsp_statement_completedsql_batch_completedrpc_completedscan_stoppedquery_store_begin_persist_runtime_statquery_store_execution_runtime_info
Gli attributi
ActualPageServerReads/ActualPageServerReadAheadssono presenti nel codice XML del piano della query per i piani che includono statistiche di runtime. Per esempio:<RunTimeCountersPerThread Thread="8" ActualRows="90466461" [...] ActualPageServerReads="0" ActualPageServerReadAheads="5687297" ActualLobPageServerReads="0" ActualLobPageServerReadAheads="0" />Mancia
Per visualizzare questi attributi nella finestra delle proprietà del piano di query, è necessario disporre di SSMS 18.3 o versione successiva.
Statistiche relative ai file virtuali e contabilità di I/O
Nel database SQL di Azure, il sys.dm_io_virtual_file_stats() DMF è un modo per monitorare le statistiche di I/O del database, come le operazioni di I/O al secondo (IOPS), il traffico e la latenza. Le caratteristiche di I/O in Hyperscale sono diverse a causa della relativa architettura distribuita . In questa sezione ci concentriamo su operazioni di lettura e scrittura I/O, come visto in questo DMF.
Per Hyperscale, i dati rilevanti in sys.dm_io_virtual_file_stats() sono i seguenti:
Le righe in cui il
database_idvalore corrisponde al valore restituito dalla funzione DB_ID e dove ilfile_idvalore è diverso da 2, corrispondono ai server di pagine. In genere, ogni riga corrisponde a un server di pagine. Tuttavia, per i file di dimensioni maggiori, vengono usati più server di pagine.- La riga con
file_id2 corrisponde al log delle transazioni.
- La riga con
Le righe in cui il valore nella
database_idcolonna è 0 corrispondono alla cache SSD locale nella replica di calcolo.
Utilizzo della cache SSD locale
Poiché la cache SSD locale esiste nella stessa replica di calcolo in cui il motore di database sta elaborando le query, le operazioni di I/O su questa cache sono più veloci rispetto alle operazioni di I/O rispetto ai server di pagine. In un database Hyperscale o un pool elastico, sys.dm_io_virtual_file_stats() ha righe speciali che segnalano statistiche di I/O per la cache SSD locale. Queste righe hanno il valore di 0 per la database_id colonna. Ad esempio, la query seguente restituisce le statistiche di I/O della cache SSD locale dall'avvio del database.
SELECT *
FROM sys.dm_io_virtual_file_stats(0, NULL);
Un rapporto tra le letture aggregate dai file della cache SSD locale alle letture aggregate da tutti gli altri file di dati è il rapporto di riscontri nella cache SSD locale. Questa metrica viene fornita dai contatori delle prestazioni RBPEX cache hit ratio e RBPEX cache hit ratio base disponibili nella DMV sys.dm_os_performance_counters.
Letture di dati
Quando le letture vengono rilasciate dal motore di database in una replica di calcolo, potrebbero essere gestite dalla cache SSD locale o dai server di pagine o da una combinazione di due se si leggono più pagine.
Quando la replica di calcolo legge alcune pagine da un file di dati specifico (ad esempio, il file con
file_id1), se questi dati si trovano esclusivamente nella cache SSD locale, tutti gli I/O per questa lettura vengono conteggiati nei file della cache SSD locale dovedatabase_idè 0. Se alcune parti di questi dati si trovano nella cache SSD locale e alcune parti si trovano nei server di pagine, l'I/O viene conteggiato parzialmente verso i file della cache SSD locale e parzialmente verso i file di dati corrispondenti ai server di pagine.Quando una replica di calcolo richiede una pagina in un determinato LSN da un server di pagine, se il server di pagine non ha ancora raggiunto l'LSN richiesto, la lettura nella replica di calcolo attende fino a quando il server di pagine non viene aggiornato prima che venga restituita la pagina. Per qualsiasi lettura da un server di pagine nella replica di calcolo, viene visualizzato un
PAGEIOLATCH_*tipo di attesa se è in attesa di tale I/O. In Hyperscale, questo tempo di attesa include sia il tempo necessario per recuperare la pagina richiesta nel server di pagine al numero LSN richiesto, sia il tempo necessario per trasferire la pagina dal server di pagine alla replica di calcolo.Le letture di grandi dimensioni, ad esempio i read-ahead, vengono spesso eseguite usando letture a dispersione. In questo modo è possibile leggere fino a 4 MB come singola I/O di lettura. Tuttavia, quando i dati letti si trovano nella cache SSD locale, queste letture vengono considerate come più letture da 8 KB singole, poiché il pool di buffer e la cache SSD locale usano sempre pagine da 8 KB. Di conseguenza, il numero di operazioni di I/O di lettura osservate nella cache SSD locale potrebbe essere maggiore del numero effettivo di operazioni di I/O eseguite dal motore.
Scritture di dati
La replica di calcolo primaria non scrive direttamente nei server di pagine. Invece, i record di log del servizio di log vengono riprodotti sui server delle pagine corrispondenti.
Le scritture nella replica di calcolo sono prevalentemente scritture nella cache SSD locale (
database_id0). Per le scritture di dimensioni superiori a 8 KB, in altre parole quelle eseguite usando gather-write , ogni operazione di scrittura viene convertita in più scritture singole da 8 KB nella cache SSD locale poiché il pool di buffer e la cache SSD locale usano sempre pagine da 8 KB. Di conseguenza, il numero di operazioni di I/O di scrittura visualizzate nella cache SSD locale potrebbe essere maggiore del numero effettivo di operazioni di I/O eseguite dal motore.Anche i file di dati diversi da
database_id0, relativi ai server di pagine, potrebbero mostrare delle operazioni di scrittura. In Hyperscale queste scritture vengono simulate, perché le repliche di elaborazione non scrivono mai direttamente nei server delle pagine. Le statistiche di I/O vengono considerate man mano che si verificano nella replica di calcolo. IOPS di scrittura, throughput e latenza visualizzati su una replica di calcolo per file di dati diversi dadatabase_id0 non riflettono le effettive statistiche di I/O delle scritture che avvengono sui page server.
Scritture di log
Nella replica di calcolo primaria, le scritture dei log vengono registrate in
sys.dm_io_virtual_file_stats()sottofile_id2.A differenza dei gruppi di disponibilità, quando una transazione esegue il commit nella replica di elaborazione primaria, i record di log non vengono rafforzati nella replica secondaria. In Hyperscale il log viene sottoposto a protezione avanzata nel servizio di log e applicato alle repliche secondarie in modo asincrono. Poiché le scritture di log non vengono effettivamente eseguite nelle repliche secondarie, qualsiasi contabilità di I/O dei log in
sys.dm_io_virtual_file_stats()nelle repliche secondarie non deve essere usata come statistiche di I/O del log delle transazioni.
I/O dei dati nelle statistiche di utilizzo delle risorse
In un database non-Hyperscale, le operazioni combinate di lettura e scrittura IOPS rispetto al limite di I/O dei dati di governance delle risorse vengono segnalate nelle viste sys.dm_db_resource_stats e sys.resource_stats nella colonna avg_data_io_percent. Le DMV corrispondenti per i pool elastici sono sys.dm_elastic_pool_resource_stats e sys.elastic_pool_resource_stats. Gli stessi valori vengono segnalati come percentuale di I/O di dati metriche di Monitoraggio di Azure per database e pool elastici.
In un database Hyperscale queste colonne e le metriche segnalano l'utilizzo di I/O dei dati rispetto al limite per l'archiviazione SSD locale solo nella replica di calcolo, che include I/O rispetto alla cache SSD locale e al tempdb database. Un valore del 100% in questa colonna indica che la governance delle risorse sta limitando le operazioni di I/O al secondo dell'archiviazione locale. Se questo problema è correlato a un problema di prestazioni, ottimizzare il carico di lavoro per generare meno operazioni di I/O o aumentare le dimensioni di calcolo per migliorare la gestione delle risorse e raggiungere il limite Max Data IOPS . Per la governance delle risorse delle operazioni di lettura e scrittura della cache SSD locale, il sistema conta singole operazioni di I/O a 8 KB, anziché operazioni di I/O di dimensioni maggiori che potrebbero essere rilasciate dal motore di database.
I dati di I/O contro i server di pagine non vengono segnalati nelle visualizzazioni di utilizzo delle risorse o tramite le metriche di Monitoraggio di Azure, ma vengono segnalati in sys.dm_io_virtual_file_stats() come descritto in precedenza.
Contenuto correlato
- Limiti vCore del livello di servizio Hyperscale
- Monitorare i carichi di lavoro SQL di Azure con Database Watcher (anteprima)
- Ottimizzare le applicazioni e i database per le prestazioni nel database SQL di Azure
- Monitoraggio delle prestazioni con Query Store
- Monitorare le prestazioni usando le viste a gestione dinamica