Usare la sessione system_health
Si applica a: SQL Server e Istanza gestita di SQL di Azure
La sessione system_health
è una sessione degli Eventi estesi inclusa per impostazione predefinita con SQL Server e Istanza gestita di SQL di Azure. Questa sessione viene avviata automaticamente all'avvio del motore di database e viene eseguita senza sovraccarichi di prestazioni rilevanti. La sessione raccoglie dati del sistema che consentono di semplificare la risoluzione dei problemi relativi alle prestazioni nel motore di database.
Importante
È consigliabile non arrestare, modificare o eliminare la sessione system_health
. Le eventuali modifiche apportate alle impostazioni della sessione system_health
potrebbero essere sovrascritte da un aggiornamento futuro del prodotto.
La sessione raccoglie informazioni, tra le quali:
sql_text
esession_id
per qualsiasi sessione in cui si verifica un errore con gravità > = 20.sql_text
esession_id
per qualsiasi sessione in cui si verifica un errore relativo alla memoria. ad esempio gli errori 17803, 701, 802, 8645, 8651, 8657 e 8902.- Un record di qualsiasi problema dell'utilità di pianificazione relativo alla mancata cessione del controllo. Questi problemi sono inclusi come errori 17883 nel log degli errori di SQL Server.
- Qualsiasi deadlock rilevato, tra cui l'evento Deadlock Graph.
callstack
,sql_text
esession_id
per qualsiasi sessione in attesa su latch (o altre risorse interessanti) per > 15 secondi.callstack
,sql_text
esession_id
per qualsiasi sessione in attesa su blocchi per > 30 secondi.callstack
,sql_text
esession_id
per qualsiasi sessione rimasta in attesa per molto tempo a causa di attese preemptive. La durata varia in base al tipo di attesa. Un'attesa preemptive è dove SQL Server è in attesa di chiamate API esterne.callstack
esession_id
per l'allocazione CLR e per errori di allocazione virtuali.- Eventi del buffer circolare per il broker di memoria, il monitoraggio dell'utilità di pianificazione, la memoria insufficiente del nodo di memoria, la sicurezza e la connettività.
- Risultati del componente di sistema da
sp_server_diagnostics
. - Integrità dell'istanza raccolta da
scheduler_monitor_system_health_ring_buffer_recorded
. - Errori di allocazione CLR.
- Errori di connettività usando
connectivity_ring_buffer_recorded
. - Errori di sicurezza usando
security_error_ring_buffer_recorded
.
Nota
Per altre informazioni sui deadlock, vedere la Guida ai deadlock. Per altre informazioni sui messaggi di errore SQL, vedere Errori e eventi del motore di database.
Visualizzare i dati della sessione system_health
Nella sessione vengono usate sia la destinazione del buffer circolare che la destinazione del file degli eventi per archiviare i dati. Per la destinazione del file degli eventi vengono configurati 5 MB di dimensioni massime e 4 file come criteri di conservazione dei file.
Per visualizzare i dati della sessione dalla destinazione del buffer circolare usando l'interfaccia utente degli eventi estesi disponibile in SQL SQL Server Management Studio, vedere Visualizzazione avanzata dei dati di destinazione da Eventi estesi in SQL Server (Controlla dati dinamici).
Per visualizzare i dati della sessione dalla destinazione del buffer circolare con Transact-SQL, usare la seguente query:
SELECT CAST(xet.target_data as xml) AS target_data
FROM sys.dm_xe_session_targets xet
JOIN sys.dm_xe_sessions xe
ON xe.address = xet.event_session_address
WHERE xe.name = 'system_health'
Per visualizzare i dati sessione dal file degli eventi, usare l'interfaccia utente degli Eventi estesi disponibile in SQL Server Management Studio. Per altre informazioni, vedere Visualizzare i dati degli eventi in SQL Server Management Studio.
Ripristinare la sessione system_health
Se si elimina la sessione system_health
, è possibile ripristinarla eseguendo lo script u_tables.sql
. Questo file si trova nella cartella seguente, dove C:
rappresenta l'unità in cui sono stati installati i file di programma di SQL Server e MSSQLnn
è la versione principale di SQL Server:
C:\Program Files\Microsoft SQL Server\MSSQLnn.\<instanceid>\MSSQL\Install
Dopo aver ripristinato la sessione, è necessario avviarla tramite l'istruzione ALTER EVENT SESSION
o tramite il nodo Eventi estesi in Esplora oggetti. In caso contrario, la sessione verrà avviata al successivo riavvio del servizio SQL Server.
Sessione system_health in Azure SQL
Nell'Istanza gestita di SQL di Azure, i dati della sessione system_health
possono essere visualizzati facendo clic con il pulsante destro del mouse sulla destinazione event_file
o ring_buffer
in Esplora Oggetti e selezionando Visualizzare dati di destinazione.
In database SQL di Azure non è disponibile alcuna sessione di Eventi estesi system_health
predefinita, ma è possibile usare la funzione sys.fn_xe_file_target_read_file()
per leggere da sessioni di Eventi estesi create e archiviate in Archiviazione di Azure. Per una procedura dettagliata, vedere Codice di destinazione del file evento per Eventi estesi nel database SQL di Azure.