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.

Vedere anche

Concetti

Strumenti degli eventi estesi