Utilizzare la sessione system_health
La sessione system_health è una sessione di eventi estesi inclusa per impostazione predefinita in SQL Server. Questa sessione viene avviata automaticamente all'avvio del Motore di database di SQL Server e viene eseguita senza effetti rilevanti sulle prestazioni. La sessione raccoglie dati del sistema che consentono di semplificare la risoluzione dei problemi relativi alle prestazioni nel Motore di database. È pertanto consigliabile non arrestare o eliminare la sessione.
La sessione raccoglie le informazioni seguenti:
sql_text e session_id per qualsiasi sessione in cui si verifica un errore con gravità >=20.
sql_text e session_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.
callstack, sql_text e session_id per qualsiasi sessione rimasta in attesa nei latch (o altre risorse interessanti) per > 15 secondi.
callstack, sql_text e session_id per qualsiasi sessione rimasta in attesa nei blocchi per > 30 secondi.
callstack, sql_text e session_id per qualsiasi sessione rimasta in attesa per molto tempo per attese preemptive. La durata varia in base al tipo di attesa. In un'attesa preemptive SQL Server è in attesa di chiamate API esterne.
callstack e session_id per l'allocazione CLR e per errori di allocazione virtuali.
Eventi ring_buffer 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à utilizzando connectivity_ring_buffer_recorded.
Errori di sicurezza utilizzando security_error_ring_buffer_recorded.
Visualizzazione dei dati della sessione
Nella sessione viene utilizzata la destinazione del buffer circolare per archiviare i dati. Per visualizzare i dati della sessione, utilizzare la query seguente:
SELECT CAST(xet.target_data as xml) 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 dell'evento file, utilizzare l'interfaccia utente degli eventi estesi disponibili in Management Studio. Per ulteriori informazioni, vedere Visualizzare i dati della sessione eventi.
Ripristino della sessione system_health
Se si elimina la sessione system_health, è possibile ripristinarla eseguendo il file u_tables.sql nell'editor di query. Questo file si trova nella cartella seguente, dove C: rappresenta l'unità in cui sono stati installati i file di programma di SQL Server:
C:\Programmi\Microsoft SQL Server\MSSQL11.<instanceid>\MSSQL\Install
Tenere presente che dopo aver ripristinato la sessione, è necessario avviarla tramite l'istruzione ALTER EVENT SESSION o il nodo Eventi estesi in Esplora oggetti. In caso contrario, la sessione verrà avviata al successivo riavvio del servizio SQL Server.