使用扩展事件,可以捕获和分析与 SQL Server 相关的各种事件。在本例中,我们可以使用扩展事件和 SQL Server 的动态管理视图来捕获正在运行的视图。
步骤如下:
创建一个扩展事件会话
use master go create event session running_views on server add event sqlserver.sql_statement_completed (where sqlserver.client_app_name = N'Microsoft SQL Server Management Studio' and sqlserver.object_type = N'View') add target package0.ring_buffer 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, start_with_instance_id = 0, max_dop = 1, data_loss_timeout = 120 seconds, balloon = enabled, verbose = 0)
go
--启动会话 alter event session running_views on server state=start;
查询动态管理视图 sys.dm_xe_sessions 和 sys.dm_xe_session_targets,以获取有关已创建会话和会话目标的信息。
select session_name, target_name, target_package_name, event_name, xml_format_description, parameter_name, type_name from sys.dm_xe_sessions s join sys.dm_xe_session_targets t on s.address = t.event_session_address cross apply sys.fn_xe_session_targets(s.name) fn join sys.dm_xe_objects o on fn.target_name = o.name where s.name = 'running_views'
go
使用动态管理函数 sys.fn_xe_file_target_read_file 和 sys.fn_xe_file_target_read_file_offset 读取已捕获的事件数据。
declare @xml xml;
select @xml = CAST(event_data as xml) from sys.fn_xe_file_target_read_file('C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\Log\running_views*.xel', null, null, null)