it-swarm.com.de

SQL Server-Abfragen ohne Tools von Drittanbietern und ohne Verwendung veralteter Funktionen erfassen?

Ist es möglich, alle an einen MS SQL Server gesendeten Abfragen ohne Tools von Drittanbietern und ohne Verwendung veralteter Funktionen zu erfassen?

Ich suche etwas Ähnliches wie das "allgemeine Abfrageprotokoll" in MySQL.

Hier ist ein Beispiel mit einem Drittanbieter-Tool:

Hier ist eine Alternative mit veralteten Funktionen:

Gibt es eine nicht veraltete native Lösung?

6
Alex R

Sie können Extended Events verwenden, um diese Daten zu erfassen. Abhängig davon, wie viel Datenverkehr Ihr Server erhält, kann dies jedoch sehr schnell zu einer Menge Daten werden und zu Leistungsproblemen führen.

Ich würde versuchen, die Ereignisse, die Sie verfolgen, auf etwas wie sqlserver.rpc_completed oder sqlserver.sql_statement_completed erfassen diese nur das, was abgeschlossen wurde. Erin Stellato hat ein großartiges Stück geschrieben über die Verwendung von XEvent Profiler zum Erfassen von Abfragen in SQL Server.

In SSMS gehen Sie zu Verwaltung> Erweiterte Ereignisse> Sitzung und verwenden entweder New Session Wizard oder New Session, um mit dem Aufbau Ihrer Sitzung zum Verfolgen von Daten zu beginnen. Die Microsoft Docs gehen auf viele Details zum Einrichten ein.

Hier ist ein Beispiel für etwas, das ich kürzlich implementiert habe, um Abfragen auf einem bestimmten Server zu erfassen. Sie können Filter hinzufügen, um Abfragen zu entfernen, die Sie nicht sehen möchten - wie einige Servernamen oder Anwendungsnamen, die auch Abfragen ausführen:

CREATE EVENT SESSION [Track Queries] ON SERVER 
ADD EVENT sqlserver.rpc_completed(
    ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.server_instance_name,sqlserver.server_principal_name,sqlserver.sql_text,sqlserver.username)
    WHERE (NOT [sqlserver].[like_i_sql_unicode_string]([sqlserver].[client_hostname],N'%name%') 
            AND [sqlserver].[not_equal_i_sql_unicode_string]([sqlserver].[client_hostname],N'name') 
            AND NOT [sqlserver].[like_i_sql_unicode_string]([sqlserver].[client_app_name],N'%name%') 
            AND [sqlserver].[server_principal_name]<>N'<username>')),
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.server_instance_name,sqlserver.server_principal_name,sqlserver.sql_text,sqlserver.username)
    WHERE (NOT [sqlserver].[like_i_sql_unicode_string]([sqlserver].[client_hostname],N'%<name>%') 
            AND [sqlserver].[not_equal_i_sql_unicode_string]([sqlserver].[client_hostname],N'name') 
            AND NOT [sqlserver].[like_i_sql_unicode_string]([sqlserver].[client_app_name],N'%name%') 
            AND [sqlserver].[server_principal_name]<>N'<username>'))
ADD TARGET package0.event_file(SET filename=N'D:\XE\TrackQueries.xel',max_file_size=(5120))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO

Dadurch werden die Details der ausgeführten Daten erfasst und zur einfachen Abfrage und Analyse in eine Datei eingefügt.

12
Taryn

Verwenden Sie erweiterte SQL Server-Ereignisse, um T-SQL-Anweisungen während ihrer Ausführung zu erfassen.

SQL Server Management Studio 17+ enthält ein "XEvent Profiler" Element im Objekt-Explorer für jeden verbundenen SQL Server, der Version 2012 oder höher ist. Klicken Sie mit der rechten Maustaste auf die Sitzung TSQL und dann auf Launch Session.

Beachten Sie, dass das Erfassen von T-SQL-Anweisungen auf einem gesamten Server die Leistung beeinträchtigen kann. Daher möchten Sie dies wahrscheinlich nur für einen kurzen Zeitraum tun, bevor Sie die Sitzung beenden.

7
Max Vernon
0
Muab Nhoj