Delen via


De system_health-sessie gebruiken

Van toepassing op:SQL ServerAzure SQL Managed Instance

De system_health sessie is een sessie met uitgebreide gebeurtenissen die standaard is opgenomen in SQL Server en Azure SQL Managed Instance. Deze sessie wordt automatisch gestart wanneer de database-engine wordt gestart en wordt uitgevoerd zonder merkbare prestatieoverhead. De sessie verzamelt systeemgegevens die u kunt gebruiken om prestatieproblemen in de database-engine op te lossen.

Belangrijk

U wordt aangeraden de system_health sessie niet te stoppen, te wijzigen of te verwijderen. Wijzigingen die zijn aangebracht in de system_health sessie-instellingen, kunnen worden overschreven door een toekomstige productupdate.

De sessie verzamelt informatie die de volgende informatie bevat:

  • De sql_text en session_id voor alle sessies die een fout tegenkomen met een ernstniveau >= 20.
  • De sql_text en session_id voor eventuele sessies die een geheugengerelateerde fout tegenkomen. De fouten zijn 17803, 701, 802, 8645, 8651, 8657 en 8902.
  • Een record van eventuele problemen met niet-rendementende planners. Deze worden weergegeven in het SQL Server-foutenlogboek als fout 17883.
  • Eventuele impasses die worden gedetecteerd, inclusief de impassegrafiek.
  • De callstack, sql_text en session_id zijn voor alle sessies die op vergrendelingen (of andere interessante bronnen) > hebben gewacht gedurende 15 seconden.
  • De callstack, sql_texten session_id voor alle sessies die gedurende 30 seconden op vergrendelingen > hebben gewacht.
  • De callstack, sql_texten session_id voor alle sessies die lang hebben gewacht op preemptive waits. De duur varieert per wachttype. Een voorlopige wachttijd is de plaats waar SQL Server wacht op externe API-aanroepen.
  • De callstack en session_id voor CLR-toewijzing en virtuele toewijzingsfouten.
  • De ringbuffer gebeurtenissen voor de geheugenbroker, scheduler monitor, geheugenknooppunt OOM, beveiliging en connectiviteit.
  • Resultaten van systeemcomponenten afkomstig van sp_server_diagnostics.
  • Instantiestatus verzameld door scheduler_monitor_system_health_ring_buffer_recorded.
  • CLR-toewijzingsfouten.
  • Connectiviteitsfouten met behulp van connectivity_ring_buffer_recorded.
  • Beveiligingsfouten met behulp van security_error_ring_buffer_recorded.

Opmerking

Zie de Deadlocks-gids voor meer informatie over deadlocks. Zie Database Engine-gebeurtenissen en -fouten voor meer informatie over SQL-foutberichten.

De system_health sessiegegevens weergeven

De sessie maakt gebruik van zowel het ringbufferdoel als het gebeurtenisbestandsdoel om de gegevens op te slaan. Het gebeurtenisbestandoel is geconfigureerd met een maximale grootte van maximaal 5 MB en bewaart 4 bestanden volgens het bewaarbeleid. In SQL Server Standard- en Enterprise-edities heeft het doelbestand van het evenement verhoogde limieten: een maximale grootte van 100 MB en een bewaarbeleid van maximaal 10 bestanden.

Als u de sessiegegevens van het ringbufferdoel wilt weergeven met de gebruikersinterface uitgebreide gebeurtenissen die beschikbaar is in SQL Server Management Studio, raadpleegt u Geavanceerde weergave van doelgegevens van uitgebreide gebeurtenissen in SQL Server - Live-gegevens bekijken.

Gebruik de volgende query om de sessiegegevens van het ringbufferdoel met Transact-SQL weer te geven:

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'

Als u de sessiegegevens uit het gebeurtenisbestand wilt weergeven, gebruikt u de gebruikersinterface voor logboeken voor uitgebreide gebeurtenissen die beschikbaar zijn in SQL Server Management Studio. Zie Gebeurtenisgegevens weergeven in SQL Server Management Studiovoor meer informatie.

De system_health-sessie herstellen

Als u de system_health sessie verwijdert, kunt u deze herstellen door het u_tables.sql script uit te voeren. Dit bestand bevindt zich in de volgende map, waar C: de schijf aangeeft waar u de SQL Server-programmabestanden hebt geïnstalleerd en MSSQLnn de hoofdversie van SQL Server:

C:\Program Files\Microsoft SQL Server\MSSQLnn.\<instanceid>\MSSQL\Install

Nadat u de sessie hebt hersteld, moet u deze starten met behulp van de ALTER EVENT SESSION instructie of met het knooppunt Uitgebreide gebeurtenissen in Objectverkenner. Anders wordt de sessie automatisch gestart wanneer u de SQL Server-service de volgende keer opnieuw start.

De system_health-sessie in Azure SQL

In Azure SQL Managed Instance kunnen de sessiegegevens worden weergegeven door met de rechtermuisknop te klikken op ofwel event_file of ring_buffer doel in Object Explorer en Doelgegevens weergeven te selecteren.

Er is geen ingebouwde system_health uitgebreide gebeurtenissessie in Azure SQL Database, maar u kunt de sys.fn_xe_file_target_read_file() functie gebruiken om te lezen uit uitgebreide gebeurtenissessies die u zelf maakt en opslaat in Azure Storage. Voor een overzicht, zie de doelcode van het gebeurtenisbestand voor uitgebreide gebeurtenissen in Azure SQL Database.