Definire le metriche di base

Completato

Una linea di base è una raccolta di misurazioni che consente di comprendere lo "stato stabile" normale delle prestazioni dell'applicazione o del server. La raccolta dei dati nel tempo consente di identificare le modifiche rispetto allo stato normale. Una linea di base può essere semplice, come il grafico di utilizzo della CPU nel tempo, o costituita da aggregazioni complesse di metriche che rendono disponibili dati sulle prestazioni a livello granulare tramite chiamate di applicazioni specifiche. La granularità della linea di base dipenderà dalla criticità delle prestazioni del database e dell'applicazione.

Con qualsiasi tipo di carico di lavoro dell'applicazione, è fondamentale stabilire una linea di base di lavoro. Una linea di base consente di identificare se un problema in corso può essere considerato entro i parametri normali o se ha superato le soglie specificate. Senza una linea di base, ogni problema riscontrato può essere considerato normale e pertanto non richiedere alcun intervento aggiuntivo.

Correlazione di SQL Server e delle prestazioni del sistema operativo

Quando si distribuisce SQL Server in una macchina virtuale di Azure, è fondamentale mettere in correlazione le prestazioni di SQL Server e le prestazioni del sistema operativo sottostante. Se come sistema operativo si usa Linux, è necessario installare InfluxDB, Collectd e Grafana per acquisire dati simili a quelli acquisiti da Monitor prestazioni di Windows. Questi servizi raccolgono dati da SQL Server e forniscono l'interfaccia grafica per l'esame dei dati. È possibile usare questi strumenti in Linux o Monitor prestazioni in Windows in combinazione con l'analisi di dati specifici di SQL Server, ad esempio le statistiche di attesa di SQL Server. L'uso di questi strumenti consentirà di identificare i colli di bottiglia nell'hardware o nel codice. I contatori di Monitor prestazioni seguenti rappresentano un campione di metriche di Windows utili e consentono di acquisire una linea di base rappresentativa per un carico di lavoro di SQL Server:

Processore(_Total)% Tempo processore: questo contatore misura l'utilizzo della CPU di tutti i processori nel server. Si tratta di un'indicazione attendibile del carico di lavoro complessivo e, quando viene usata insieme ad altri contatori, è in grado di identificare i problemi relativi alle prestazioni delle query.

File di paging(_Total)% In uso: in un server SQL Server configurato correttamente, la memoria non deve essere paginata sul file di paging nel disco. In alcune configurazioni, tuttavia, è possibile che siano in esecuzione altri servizi che utilizzano la memoria di sistema e causano il paging della memoria su disco da parte del sistema operativo, con conseguente riduzione delle prestazioni.

Disco fisico(_Total)\Media letture disco/sec e Media scritture disco/sec: questo contatore fornisce una metrica attendibile del funzionamento del sottosistema di archiviazione. I valori di latenza nella maggior parte dei casi non devono essere superiori a 20 ms e con Archiviazione Premium devono essere visualizzati valori minori di 10 ms.

Sistema\Lunghezza coda processore: questo valore indica il numero di thread in attesa di tempo del processore. Se è maggiore di zero, indica che il carico sulla CPU è elevato e che il carico di lavoro potrebbe trarre vantaggio da un numero maggiore di CPU.

SQLServer:Gestione buffer\Permanenza presunta delle pagine: la permanenza presunta delle pagine indica per quanto tempo SQL Server prevede che una pagina rimanga in memoria. Non è definito un valore appropriato per questa impostazione. La documentazione precedente indica 300 secondi come valore appropriato, ma è stata scritta al tempo dell'architettura a 32 bit, quando i server disponevano di molta meno RAM. È necessario monitorare questo valore nel tempo e valutare eventuali riduzioni improvvise. Tali riduzioni del valore del contatore possono indicare modelli di query inefficienti, un utilizzo elevato della memoria esterna (ad esempio, per l'esecuzione nel server di un pacchetto SSIS di grandi dimensioni) o semplicemente un'elaborazione di sistema normale, ad esempio l'esecuzione di una verifica coerenza su un database di grandi dimensioni.

SQLServer:Statistiche SQL\Richieste batch/sec: questo contatore è adatto per valutare quanto uniformemente un server SQL Server è occupato nel tempo. Anche in questo caso non è definito un valore corretto o non corretto, ma è possibile usare questo contatore insieme a % Processor time per comprendere meglio il carico di lavoro e le linee di base.

SQLServer:Statistiche SQL\Compilazioni SQL/sec e Ricompilazioni SQL/sec: questi contatori vengono aggiornati quando SQL Server deve compilare o ricompilare un piano di esecuzione per una query perché non è presente alcun piano nella cache dei piani o perché un piano è stato invalidato a causa di una modifica. Le ricompilazioni possono indicare istruzioni T-SQL con hint per la query di ricompilazione oppure un utilizzo elevato della memoria nella cache dei piani causato da numerose query ad hoc o senza un motivo specifico.

Questi contatori costituiscono solo un campione dei contatori disponibili per il monitoraggio delle prestazioni. I contatori precedenti formano una linea di base rappresentativa delle prestazioni, ma per individuare problemi di prestazioni specifici può essere necessario prendere in esame anche altri contatori.

Statistiche di attesa

Quando un thread in esecuzione è obbligato ad attendere una risorsa non disponibile, SQL Server tiene traccia delle metriche corrispondenti. Queste informazioni sono facilmente identificabili tramite la dmv (Dynamic Management View). sys.dm_os_wait_stats Queste informazioni sono importanti per comprendere le prestazioni di base del database e consentono di identificare problemi di prestazioni specifici correlati sia all'esecuzione delle query sia alle limitazioni hardware. L'identificazione del tipo di attesa appropriato e della risoluzione corrispondente è fondamentale per la risoluzione dei problemi relativi alle prestazioni. Le statistiche di attesa sono disponibili in tutta la piattaforma Azure SQL.