Usare la sessione system_health

Si applica a:SQL ServerIstanza 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 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, tra cui l'evento Deadlock Graph.
  • callstack, sql_text e session_id per qualsiasi sessione in attesa su latch (o altre risorse interessanti) per > 15 secondi.
  • callstack, sql_text e session_id per qualsiasi sessione in attesa su blocchi per > 30 secondi.
  • callstack, sql_text e session_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 e session_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.