Delen via


Quickstart: Uitgebreide gebeurtenissen

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric Preview

Uitgebreide gebeurtenissen is een lichtgewicht functie voor prestatiebewaking waarmee gebruikers gegevens kunnen verzamelen om problemen te bewaken en op te lossen. Met behulp van uitgebreide gebeurtenissen kunt u details bekijken van de interne bewerkingen van de database-engine die relevant zijn voor prestatiebewaking en probleemoplossingsdoeleinden. Zie Overzicht van uitgebreide gebeurtenissen voor meer informatie over uitgebreide gebeurtenissen.

Dit artikel is bedoeld om SQL-beheerders, technici en ontwikkelaars te helpen die niet bekend zijn met uitgebreide gebeurtenissen en die deze willen gaan gebruiken en gebeurtenisgegevens binnen een paar minuten willen bekijken.

Uitgebreide gebeurtenissen worden ook wel XEvents genoemd en soms alleen XE.

Na het lezen van dit artikel kunt u het volgende doen:

  • Zie hoe u een gebeurtenissessie maakt in SQL Server Management Studio (SSMS), met voorbeeldschermafbeeldingen.
  • Schermopnamen correleren met equivalente Transact-SQL-instructies.
  • Begrijp in detail de termen en concepten achter de SSMS-gebruikersinterface en XEvents T-SQL-uitspraken.
  • Meer informatie over het testen van uw gebeurtenissessie.
  • Inzicht in sessieresultaten, waaronder:
    • Beschikbare opties voor resultaatopslag
    • Verwerkte versus onbewerkte resultaten
    • Hulpprogramma's voor het weergeven van de resultaten op verschillende manieren en op verschillende tijdschaal
  • Bekijk hoe u alle beschikbare gebeurtenissen kunt zoeken en ontdekken.
  • Inzicht in de relaties tussen systeemweergaven voor uitgebreide gebeurtenissen.

Aanbeveling

Zie Uitgebreide gebeurtenissen in Azure SQL Database en Azure SQL Managed Instance voor meer informatie over uitgebreide gebeurtenissen in Azure SQL Database, inclusief codevoorbeelden.

Vereiste voorwaarden

Om aan de slag te gaan, moet u het volgende doen:

  • SQL Server Management Studio (SSMS) downloaden. We raden u aan een recente versie van SSMS te gebruiken met de nieuwste verbeteringen en oplossingen.
  • Zorg ervoor dat uw account CREATE ANY EVENT SESSION (geïntroduceerd in SQL Server 2022) of ALTER ANY EVENT SESSIONservermachtiging heeft.
  • Als u SSMS gebruikt en sessies wilt weergeven die zijn gemaakt, is voor de aanmelding bovendien de machtiging VIEW SERVER PERFORMANCE STATEvereist.
  • Voor Azure SQL Database, Azure SQL Managed Instance en SQL Database in Fabric worden gebeurtenisbestanden voor uitgebreide gebeurtenissen opgeslagen in Azure Storage. U hebt een Azure-opslagaccount nodig.

Details over beveiliging en machtigingen met betrekking tot uitgebreide gebeurtenissen zijn beschikbaar aan het einde van dit artikel in de bijlage.

Uitgebreide gebeurtenissen in SSMS

SSMS biedt een volledig functionele gebruikersinterface (UI) voor uitgebreide gebeurtenissen. Veel scenario's kunnen worden uitgevoerd met behulp van deze gebruikersinterface, zonder dat u T-SQL- of dynamische beheerweergaven (DMV's) hoeft te gebruiken.

In de volgende sectie ziet u de gebruikersinterfacestappen voor het maken van een sessie met uitgebreide gebeurtenissen en om de gegevens te bekijken die worden gerapporteerd. Nadat u de stappen hebt doorlopen of deze in dit artikel hebt bekeken, kunt u lezen over de concepten die betrokken zijn bij de stappen voor een dieper begrip.

Een gebeurtenissessie maken in SSMS

Wanneer u een sessie met uitgebreide gebeurtenissen maakt, laat u het systeem het volgende weten:

  • In welke gebeurtenissen u geïnteresseerd bent.
  • Hoe u wilt dat het systeem de gegevens aan u rapporteert.

In de demonstratie wordt het dialoogvenster Nieuwe sessie geopend, waarin wordt getoond hoe u de vier pagina's gebruikt, met de naam:

  • General
  • Evenementen
  • Gegevensopslag
  • Advanced

De tekst en ondersteunende schermafbeeldingen kunnen enigszins afwijken in uw versie van SSMS, maar moeten nog steeds relevant zijn voor de uitleg van basisconcepten.

  1. Verbinding maken met een instantie van een database-engine. Uitgebreide gebeurtenissen worden ondersteund vanaf SQL Server 2014 (12.x), in Azure SQL Database en Azure SQL Managed Instance.

  2. Selecteer Uitgebreide gebeurtenissen beheren >in Objectverkenner. In Azure SQL Database zijn eventsessies database-gericht, dus de optie Uitgebreide Gebeurtenissen wordt gevonden onder elke database, niet onder Beheer.

  3. Klik met de rechtermuisknop op de map Sessies en selecteer Nieuwe sessie.... Het dialoogvenster Nieuwe sessie... heeft de voorkeur boven de wizard Nieuwe sessie, hoewel de twee vergelijkbaar zijn.

    Aanbeveling

    Klik in deze zelfstudiestappen pas op OK nadat u door alle vier de pagina's bent gegaan: Algemeen, Gebeurtenissen, Gegevensopslag en Geavanceerd.

  4. Selecteer de Algemeen pagina. Typ in het tekstvak SessienaamYourSession, of een naam naar keuze. Selecteer nog geen OK , omdat u nog steeds enkele details op andere pagina's moet invoeren.

  5. Selecteer de pagina Gebeurtenissen .

  6. In het gebied gebeurtenisbibliotheek, kies in de vervolgkeuzelijst alleen gebeurtenisnamen.

    • Typ sql_statement in het tekstvak. Hiermee wordt de lijst gefilterd om alleen gebeurtenissen met sql_statement de naam weer te geven.
    • Schuif en selecteer de gebeurtenis met de naam sql_statement_completed.
    • Selecteer de pijl-rechts > om de gebeurtenis naar het vak Geselecteerde gebeurtenissen te verplaatsen.
  7. Blijf op de pagina Gebeurtenissen en selecteer de knop Configureren . Hiermee opent u het vak met opties voor gebeurtenisconfiguratie voor de geselecteerde gebeurtenissen.

    Schermopname van Nieuwe sessie > Gebeurtenissen > selecteren uit de gebeurtenissenbibliotheek. sql_statement_completed is geselecteerd. De knop Configureren is de volgende actie.

  8. Selecteer het tabblad Filter (predicaat). Selecteer vervolgens de nieuwe filterregel met de tekst Klik hier om een component toe te voegen. In deze zelfstudie configureert u dit filter (ook wel predicaat genoemd) om alle SELECT instructies met een HAVING clausule vast te leggen.

  9. Kies in de vervolgkeuzelijst Veld de optie sqlserver.sql_text.

    • Kies voor like_i_sql_unicode_string. Hier, i in de naam van operator betekent hoofdletter-iniet gevoelig.
    • Bij Waarde typt u %SELECT%HAVING%. Hier fungeren procenttekens (%) als jokertekens die voor elke mogelijke tekenreeks kunnen staan.

    Opmerking

    In de tweedelige naam van het veld sqlserver is dit de pakketnaam en sql_text de veldnaam. De gebeurtenis die we eerder hebben gekozen, sql_statement_completedmoet zich in hetzelfde pakket bevinden als het veld dat we kiezen.

    Schermopname van nieuwe sessie > gebeurtenissen > configuratie > filter (Predicaat) veld>.

  10. Selecteer de pagina Gegevensopslag .

  11. Selecteer in het gebied Doelen de nieuwe regel Doeltype met de tekst Klik hier om een doel toe te voegen. In deze zelfstudie schrijven we onze vastgelegde uitgebreide gebeurtenisgegevens naar een gebeurtenisbestand. Dit betekent dat de gebeurtenisgegevens worden opgeslagen in een bestand dat we later kunnen openen en bekijken. Vanaf SQL Server 2019 (15.x) kunnen gebeurtenisgegevens ook worden geschreven om te worden opgeslagen in Azure Storage. Voor Azure SQL Database, Azure SQL Managed Instance en SQL Database in Fabric worden gebeurtenisbestanden altijd opgeslagen in Azure Storage.

    • Kies in de vervolgkeuzelijst Type de optie event_file.
  12. Typ in het gebied Eigenschappen het volledige pad en de bestandsnaam in het tekstvak Bestandsnaam op de server . U kunt ook de knop Bladeren gebruiken. De bestandsnaamextensie moet zijn xel. In ons voorbeeld hebben we gebruikt C:\temp\YourSession_Target.xel.

    Schermopname van Nieuwe sessie gegevensopslagdoel typen >>>> event_file.

  13. Selecteer de pagina Geavanceerd. Standaard moet dit .xel-doel van de uitgebreide gebeurtenissessie minimale of geen invloed hebben op de serverprestaties, maar deze instellingen op de pagina Geavanceerd kunnen worden gebruikt om de resources en latentie te verhogen of te verlagen.

    Schermopname van Nieuwe Sessie > Geavanceerd.

  14. Selecteer de knop OK onderaan om deze gebeurtenissessie te maken.

  15. Open of vernieuw de map Sessies in de SSMS-objectverkenner en bekijk het nieuwe knooppunt voor de uitgebreide gebeurtenissessie.YourSession De sessie is nog niet gestart. In deze handleiding zullen we het later starten.

Een gebeurtenissessie bewerken in SSMS

In de SSMS-objectverkenner kunt u de gebeurtenissessie bewerken door met de rechtermuisknop op het knooppunt te klikken en vervolgens Eigenschappen te selecteren. Hetzelfde dialoogvenster met meerdere pagina's wordt weergegeven.

Een gebeurtenissessie maken met T-SQL

In SSMS kunt u als volgt een T-SQL-script genereren om uw gebeurtenissessie te maken:

  • Klik met de rechtermuisknop op het gebeurtenissessieknooppunt en selecteer vervolgens Scriptsessie als > CREATE naar > Klembord.
  • Plak deze in een teksteditor.

Dit is de gegenereerde CREATE EVENT SESSION T-SQL-instructie voor YourSession:

CREATE EVENT SESSION [YourSession]
    ON SERVER -- For SQL Server and Azure SQL Managed Instance
    -- ON DATABASE -- For Azure SQL Database
    ADD EVENT sqlserver.sql_statement_completed
    (
        ACTION(sqlserver.sql_text)
        WHERE
        ( [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text], N'%SELECT%HAVING%')
        )
    )
    ADD TARGET package0.event_file
    (SET filename=N'C:\temp\YourSession_Target.xel');
GO

Opmerking

Gebruik in Azure SQL Database ON DATABASE in plaats van ON SERVER.

Voorwaardelijk verwijderen van de gebeurtenissessie

Voordat de CREATE EVENT SESSION instructie wordt uitgevoerd, kunt u een DROP EVENT SESSION instructie voorwaardelijk uitvoeren voor het geval er al een sessie met dezelfde naam bestaat. Hiermee verwijdert u de bestaande sessie. Zonder dit zal een poging om een sessie met dezelfde naam te creëren een fout veroorzaken.

IF EXISTS (SELECT *
      FROM sys.server_event_sessions
      WHERE name = 'YourSession')
BEGIN
    DROP EVENT SESSION YourSession
          ON SERVER;
END
GO

De gebeurtenissessie starten en stoppen met T-SQL

Wanneer u een gebeurtenissessie maakt, is de standaardinstelling dat deze niet automatisch wordt uitgevoerd. U kunt uw gebeurtenissessie op elk gewenst moment starten of stoppen met behulp van de volgende ALTER EVENT SESSION T-SQL-instructie.

ALTER EVENT SESSION [YourSession]
      ON SERVER
    STATE = START; -- STOP;

U kunt de gebeurtenissessie zo configureren dat deze automatisch wordt gestart wanneer het exemplaar van de database-engine wordt gestart. Zie het STARTUP STATE = ON trefwoord in CREATE EVENT SESSION.

De SSMS-gebruikersinterface biedt een bijbehorende selectievakje, start de gebeurtenissessie bij het opstarten van de server, op de pagina Nieuwe sessie > algemeen .

Een gebeurtenissessie testen

Test uw gebeurtenissessie met de volgende stappen:

  1. Klik in Objectverkenner met de rechtermuisknop op het gebeurtenissessieknooppunt en selecteer Sessie starten.
  2. Terwijl u verbinding hebt gemaakt met dezelfde server (of dezelfde database in Azure SQL Database) waar u de gebeurtenissessie hebt gemaakt, voert u de volgende SELECT...HAVING instructie een paar keer uit. Overweeg om de waarde in de HAVING clausule voor elke uitvoering te wijzigen, waarbij u tussen 2 en 3 schakelt. Hierdoor kunt u de verschillen in de resultaten zien.
  3. Klik met de rechtermuisknop op het sessieknooppunt en selecteer Sessie stoppen.
  4. Lees de volgende subsectie over het selecteren en weergeven van de resultaten.
SELECT c.name,
    COUNT(*) AS [Count-Per-Column-Repeated-Name]
FROM sys.syscolumns AS c
INNER JOIN sys.sysobjects AS o
    ON o.id = c.id
WHERE o.type = 'V'
    AND c.name LIKE '%event%'
GROUP BY c.name
HAVING Count(*) >= 3 --2     -- Try both values during session.
ORDER BY c.name;

Voor volledigheid ziet u hier de voorbeelduitvoer van de voorgaande SELECT...HAVING.

/* Approximate output, 6 rows, all HAVING Count >= 3:
name                   Count-Per-Column-Repeated-Name
---------------------  ------------------------------
event_group_type       4
event_group_type_desc  4
event_session_address  5
event_session_id       5
is_trigger_event       4
trace_event_id         3
*/

Gebeurtenissessiegegevens weergeven als XML

Voer in een queryvenster in SSMS de volgende SELECT instructie uit om de gebeurtenisgegevens te zien die zijn vastgelegd door uw sessie. Elke rij vertegenwoordigt één gebeurtenis. Het CAST(... AS xml) gegevenstype van de kolom wordt gewijzigd van nvarchar in XML. Hiermee kunt u de kolomwaarde selecteren om deze in een nieuw venster te openen voor eenvoudiger lezen.

Opmerking

Het event_file doel voegt altijd een numeriek deel in de xel bestandsnaam in. Voordat u de volgende query kunt uitvoeren, moet u de werkelijke volledige naam van het xel bestand met dit numerieke deel kopiëren en in de SELECT instructie plakken. In het volgende voorbeeld is _0_131085363367310000het numerieke deel .

SELECT object_name,
    file_name,
    file_offset,
    event_data,
    'CLICK_NEXT_CELL_TO_BROWSE_XML RESULTS!' AS [CLICK_NEXT_CELL_TO_BROWSE_XML_RESULTS],
    CAST(event_data AS XML) AS [event_data_XML]
-- TODO: In the SSMS results grid, click this XML cell
FROM sys.fn_xe_file_target_read_file(
    'C:\Temp\YourSession_Target_0_131085363367310000.xel', NULL, NULL, NULL
);

Deze query biedt twee manieren om de volledige resultaten van een bepaalde gebeurtenisrij weer te geven:

  • Voer het SELECT in SSMS uit en selecteer vervolgens een cel in de event_data_XML kolom.

  • Kopieer de XML-tekenreeks uit een cel in de event_data kolom. Plak het in een teksteditor, zoals Kladblok, en sla het bestand op met de extensie xml. Open vervolgens het bestand in een browser of een editor die XML-gegevens kan weergeven.

Gebeurtenisgegevens in XML

Vervolgens zien we een deel van de resultaten, die de XML-indeling hebben. De volgende XML wordt bewerkt voor beknoptheid. <data name="row_count"> geeft een waarde weer van 6, die overeenkomt met onze zes resultaatrijen die eerder zijn weergegeven. En we kunnen de hele SELECT verklaring zien.

<event name="sql_statement_completed" package="sqlserver" timestamp="2016-05-24T04:06:08.997Z">
  <data name="duration">
    <value>111021</value>
  </data>
  <data name="cpu_time">
    <value>109000</value>
  </data>
  <data name="physical_reads">
    <value>0</value>
  </data>
  <data name="last_row_count">
    <value>6</value>
  </data>
  <data name="offset">
    <value>0</value>
  </data>
  <data name="offset_end">
    <value>584</value>
  </data>
  <data name="statement">
    <value>SELECT c.name,
            COUNT(*) AS [Count-Per-Column-Repeated-Name]
        FROM sys.syscolumns AS c
        INNER JOIN sys.sysobjects AS o
            ON o.id = c.id
        WHERE o.type = 'V'
            AND c.name LIKE '%event%'
        GROUP BY c.name
        HAVING Count(*) >= 3 --2     -- Try both values during session.
    ORDER BY c.name;</value>
      </data>
</event>

Gebeurtenissessiegegevens weergeven in SSMS

Er zijn verschillende geavanceerde functies in de SSMS-gebruikersinterface die u kunt gebruiken om de gegevens weer te geven die zijn vastgelegd door een gebeurtenissessie. Zie Gebeurtenisgegevens weergeven in SQL Server Management Studio voor meer informatie.

U begint met opties in het contextmenu met het label Doelgegevens weergeven en Live-gegevens bekijken.

Doelgegevens weergeven

In de SSMS-objectverkenner kunt u met de rechtermuisknop op het doelknooppunt klikken dat zich onder het gebeurtenissessieknooppunt bevindt, bijvoorbeeld package0.event_counter. Selecteer Doelgegevens weergeven in het contextmenu. SSMS geeft de gegevens weer.

De weergave wordt niet bijgewerkt wanneer er nieuwe gebeurtenissen plaatsvinden in een sessie. Maar u kunt Doelgegevens opnieuw weergeven selecteren.

Livegegevens bekijken

In de SSMS-objectverkenner kunt u met de rechtermuisknop op het gebeurtenissessieknooppunt klikken. Selecteer Livegegevens bekijken in het contextmenu. In SSMS worden binnenkomende gegevens weergegeven, omdat deze in realtime blijven binnenkomen.

Termen en concepten in uitgebreide gebeurtenissen

De volgende tabel bevat de termen die worden gebruikt voor uitgebreide gebeurtenissen en beschrijft de betekenis ervan.

Termijn Description
event session Een constructie die is gecentreerd rond een of meer gebeurtenissen, plus ondersteunende items zoals acties zijn doelen. Met de CREATE EVENT SESSION instructie wordt elke gebeurtenissessie gemaakt. U kunt ALTER een gebeurtenissessie naar wens starten en stoppen op elk gewenst moment.

Een gebeurtenissessie wordt soms alleen een sessie genoemd, wanneer uit de context blijkt dat dit een gebeurtenissessie betekent.
Meer informatie over gebeurtenissessies wordt beschreven in: Uitgebreide gebeurtenissensessies.
event Een specifieke gebeurtenis in het systeem dat wordt gecontroleerd door een actieve gebeurtenissessie.

De gebeurtenis vertegenwoordigt bijvoorbeeld sql_statement_completed het moment dat een bepaalde T-SQL-instructie is voltooid. De gebeurtenis kan de duur en andere gegevens rapporteren.
target Een item dat de uitvoergegevens van een vastgelegde gebeurtenis ontvangt. Het scherm geeft de gegevens aan u weer.

Voorbeelden hiervan zijn het event_file doel dat eerder in deze quickstart is gebruikt en het doel waarmee de meest recente gebeurtenissen in het ring_buffer geheugen worden bijgehouden.
Elk type target kan worden gebruikt voor elke gebeurtenissessie. Zie Doelen voor uitgebreide gebeurtenissen voor meer informatie.
action Een veld dat bekend is bij de gebeurtenis. Gegevens uit het veld worden naar het doel verzonden. Het actieveld is nauw verwant aan het predicaatfilter.
predicate of filter Een test van gegevens in een gebeurtenisveld, gebruikt zodat alleen een interessante subset van gebeurtenisexempvallen naar het doel wordt verzonden.

Een filter kan bijvoorbeeld alleen gebeurtenissen sql_statement_completed bevatten waarin de T-SQL-instructie de tekenreeks HAVINGbevat.
package Een naamkenmerk dat is gekoppeld aan elk item in een set items dat rond een kern van gebeurtenissen gecentreerd is.

Een pakket kan bijvoorbeeld gebeurtenissen bevatten over T-SQL-tekst. Eén gebeurtenis kan betrekking hebben op alle T-SQL in een batch. Ondertussen gaat een andere smallere gebeurtenis over afzonderlijke T-SQL-instructies. Verder zijn er voor elke T-SQL-instructie started en completed gebeurtenissen.
Velden die geschikt zijn voor de gebeurtenissen, bevinden zich ook in het pakket met de gebeurtenissen. De meeste doelen bevinden zich in package0 en worden gebruikt met gebeurtenissen van veel andere pakketten.

Uitgebreide gebeurtenisscenario's en gebruiksgegevens

Er zijn talloze scenario's voor het gebruik van uitgebreide gebeurtenissen voor het bewaken en oplossen van problemen met de database-engine en queryworkloads. De volgende artikelen bevatten voorbeelden met behulp van vergrendelingsscenario's:

Gebeurtenissen detecteren die beschikbaar zijn in pakketten

De volgende query retourneert een rij voor elke beschikbare gebeurtenis waarvan de naam de tekenreeks sqlvan drie tekens bevat. U kunt de LIKE component bewerken om te zoeken naar verschillende gebeurtenisnamen. De resultatenset identificeert ook het pakket dat de gebeurtenis bevat.

SELECT -- Find an event you want.
    p.name AS [Package-Name],
    o.object_type,
    o.name AS [Object-Name],
    o.description AS [Object-Descr],
    p.guid AS [Package-Guid]
FROM sys.dm_xe_packages AS p
INNER JOIN sys.dm_xe_objects AS o
    ON p.guid = o.package_guid
WHERE o.object_type = 'event' --'action'  --'target'
    AND p.name LIKE '%'
    AND o.name LIKE '%sql%'
ORDER BY p.name,
    o.object_type,
    o.name;

In het volgende resultaatvoorbeeld ziet u de geretourneerde rij, die hier is gedraaid in het formaat van column name = value. De gegevens zijn afkomstig van de sql_statement_completed gebeurtenis die is gebruikt in de voorgaande voorbeeldstappen. De beschrijving van het object (een gebeurtenis in dit voorbeeld) fungeert als een documentatietekenreeks.

Package-Name = sqlserver
object_type  = event
Object-Name  = sql_statement_completed
Object-Descr = Occurs when a Transact-SQL statement has completed.
Package-Guid = 655FD93F-3364-40D5-B2BA-330F7FFB6491

Gebeurtenissen zoeken met behulp van de SSMS-gebruikersinterface

Een andere optie voor het vinden van gebeurtenissen op naam is het gebruik van het dialoogvenster Nieuwe Sessie Gebeurtenissen Bibliotheek>>, dat wordt weergegeven in een voorgaande schermafbeelding. U kunt een gedeeltelijke gebeurtenisnaam typen en alle overeenkomende gebeurtenisnamen zoeken.

SQL Trace-gebeurtenisklassen

Een beschrijving van het gebruik van uitgebreide gebeurtenissen met SQL Trace-gebeurtenisklassen en -kolommen is beschikbaar op: Bekijk de uitgebreide gebeurtenissenequivalenten voor SQL Trace-gebeurtenisklassen.

Gebeurtenistracering voor Windows (ETW)

Beschrijvingen van het gebruik van uitgebreide gebeurtenissen met gebeurtenistracering voor Windows (ETW) zijn beschikbaar op:

Systeemgebeurtenissessies

In SQL Server en Azure SQL Managed Instance worden standaard verschillende systeemgebeurtenissessies gemaakt en geconfigureerd om te starten wanneer de database-engine wordt gestart. Net als bij de meeste gebeurtenissessies gebruiken ze een kleine hoeveelheid resources en hebben ze geen invloed op de prestaties van de workload. Microsoft raadt aan om deze sessies ingeschakeld en actief te houden. De gezondheidssessies, met name de system_health sessie, zijn vaak handig voor monitoring en het oplossen van problemen.

U kunt deze gebeurtenissessies zien in de SSMS-objectverkenner onder Uitgebreide gebeurtenissensessies > beheren>. In SQL Server zijn deze systeem gebeurtenissessies bijvoorbeeld:

  • AlwaysOn_health
  • system_health
  • telemetry_events

PowerShell-provider

U kunt uitgebreide gebeurtenissen beheren met behulp van de SQL Server PowerShell-provider. Zie De PowerShell-provider gebruiken voor uitgebreide gebeurtenissen voor meer informatie.

Systeemweergaven

De systeemweergaven voor uitgebreide gebeurtenissen zijn onder andere:

  • Catalogusweergaven: voor informatie over gebeurtenissessies die zijn gedefinieerd door CREATE EVENT SESSION.
  • Dynamische beheerweergaven (DMV's): voor informatie over actieve (gestarte) gebeurtenissessies.

SELECTs en JOINs From System Views for Extended Events in SQL Server bevat informatie over:

  • Hoe de weergaven samenvoegen
  • Verschillende nuttige query's op basis van deze weergaven
  • De correlatie tussen:
    • Kolommen weergeven
    • CREATE EVENT SESSION-clausules
    • De gebruikersinterface van SSMS

Bijlage: Query's om machtigingenhouders voor uitgebreide gebeurtenissen te vinden

De machtigingen die in dit artikel worden genoemd, zijn:

  • ALTER ANY EVENT SESSION
  • VIEW SERVER STATE
  • CONTROL SERVER

De volgende SELECT...UNION ALL instructie retourneert rijen die laten zien wie de benodigde machtigingen heeft voor het maken van gebeurtenissessies en het uitvoeren van query's op de systeemcatalogusweergaven voor uitgebreide gebeurtenissen.

-- Ascertain who has the permissions listed in the ON clause.
-- 'CONTROL SERVER' permission includes all lower permissions like
-- 'ALTER ANY EVENT SESSION' and 'VIEW SERVER STATE'.
SELECT 'Owner-is-Principal' AS [Type-That-Owns-Permission],
    NULL AS [Role-Name],
    prin.name AS [Owner-Name],
    PERM.permission_name COLLATE Latin1_General_CI_AS_KS_WS AS [Permission-Name]
FROM sys.server_permissions AS PERM
INNER JOIN sys.server_principals AS prin
    ON prin.principal_id = PERM.grantee_principal_id
WHERE PERM.permission_name IN (
    'CREATE ANY EVENT SESSION',
    'ALTER ANY EVENT SESSION',
    'VIEW SERVER PERFORMANCE STATE',
    'VIEW SERVER STATE',
    'CONTROL SERVER'
)
UNION ALL
-- Plus check for members of the 'sysadmin' fixed server role,
-- because 'sysadmin' includes the 'CONTROL SERVER' permission.
SELECT 'Owner-is-Role',
    prin.name, -- [Role-Name]
    CAST((IsNull(pri2.name, N'No members')) AS NVARCHAR(128)),
    NULL
FROM sys.server_role_members AS rolm
RIGHT JOIN sys.server_principals AS prin
    ON prin.principal_id = rolm.role_principal_id
LEFT JOIN sys.server_principals AS pri2
    ON rolm.member_principal_id = pri2.principal_id
WHERE prin.name = 'sysadmin';

functie HAS_PERMS_BY_NAME

De volgende SELECT verklaring rapporteert uw machtigingen. Het is afhankelijk van de ingebouwde functie HAS_PERMS_BY_NAME.

Als u de bevoegdheid hebt om andere aanmeldingen tijdelijk te nabootsen, kunt u de opmerkingen voor EXECUTE AS en REVERT instructies verwijderen om te zien of andere aanmeldingen de ALTER ANY EVENT SESSION machtiging hebben.

--EXECUTE AS LOGIN = 'LoginNameHere';
SELECT HAS_PERMS_BY_NAME(NULL, NULL, 'ALTER ANY EVENT SESSION');
--REVERT;