是否有可能捕获发送到MS的所有查询,而不需要第三方工具和不使用不推荐的特性?
我正在寻找类似于MySQL中的“通用查询日志”的内容。
下面是一个使用第三方工具的示例:
下面是一种使用不推荐功能的替代方法:
是否有一种非反对的本地解决方案?
发布于 2019-07-22 19:42:15
您可以使用扩展事件来捕获这些数据。但是,取决于服务器的通信量,这可能很快就会成为大量的数据,并可能导致性能问题。
我会考虑将您跟踪的事件限制在类似sqlserver.rpc_completed或sqlserver.sql_statement_completed之类的东西上,它们只捕获已经完成的内容。Erin 写了一篇伟大的文章关于使用XEvent探查器捕获Server中的查询。
在SSMS中,您将转到Management > Extended > Session,并使用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这将捕获已执行的内容的详细信息,并将其放入文件中以便于查询和分析。
发布于 2019-07-22 19:37:43
使用Server扩展事件在执行时捕获to语句。
17+在对象资源管理器中为每个连接的Server包含一个“XEvent剖析器”项,该项目的版本为2012或更高版本。右击TSQL会话,然后单击Launch Session.
请注意,跨整个服务器捕获that语句可能会对性能产生负面影响,因此您可能只希望在停止会话之前在短时间内这样做。
发布于 2019-07-22 19:40:10
https://dba.stackexchange.com/questions/243484
复制相似问题