Ale*_*x R 6 sql-server sql-server-2012
是否可以在不使用第三方工具和不推荐使用的功能的情况下捕获发送到 MS SQL Server 的所有查询?
我正在寻找类似于 MySQL 中的“常规查询日志”的内容。
以下是使用第三方工具的示例:
这是使用已弃用功能的替代方法:
是否有未弃用的本机解决方案?
Tar*_*ryn 12
您可以使用扩展事件来捕获此数据。但是,根据您的服务器获得的流量,这可能会很快变成大量数据,并可能导致性能问题。
我会考虑将您跟踪的事件限制为sqlserver.rpc_completed或sqlserver.sql_statement_completed,这些仅捕获已完成的事件。Erin Stellato写了一篇关于使用 XEvent Profiler 在 SQL Server 中捕获查询的精彩文章。
从 SSMS,您将转到管理 > 扩展事件 > 会话,然后使用New Session Wizard或New Session开始构建会话以跟踪数据。在微软文档进入关于如何设置这个了很多细节。
这是我最近实现的一个示例,用于捕获特定服务器上的查询,您可以添加过滤器以删除您不想看到的查询 - 例如一些执行查询的服务器名称或应用程序名称:
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
Run Code Online (Sandbox Code Playgroud)
这会捕获已执行内容的详细信息并将其放入文件中,以便于查询和分析。
使用 SQL Server 扩展事件在 T-SQL 语句执行时捕获它们。
SQL Server Management Studio 17+在对象资源管理器中为每个连接的 SQL Server 2012 或更高版本包含一个“XEvent Profiler”项目。右键单击TSQL会话,然后单击Launch Session。
请注意,在整个服务器上捕获 T-SQL 语句会对性能产生负面影响,因此您可能只想在停止会话之前在短时间内执行此操作。
| 归档时间: |
|
| 查看次数: |
2776 次 |
| 最近记录: |