我正在 SQL Server 2017 中运行扩展事件会话,该会话仅记录module_end
特定数据库的事件。出现此痕迹的原因有两个:
在查看一些结果时,我注意到列表中的一些过程执行了数千万次,但从来没有一次大于row_count
0。还有很多其他记录的事件row_count
似乎填充正确,因此我最初认为那些从未返回结果的应用程序被引用它们的应用程序错误调用了。然而,事实并非如此。
为了更好地查看调用过程所使用的参数,我启动了一个 Profiler 会话,仅监视这些过程调用。我正在检查的特定过程被非常频繁地调用,并且我很快就收到了大量示例调用,并关闭了探查器。从中注意到以下几点:
row_count
正确记录1
为而不是0
。以下是我正在使用的扩展事件的定义:
Create Event Session [Test Event] On Server
Add Event sqlserver.module_end
(
Action (sqlserver.database_name, sqlserver.session_id)
Where
(
sqlserver.database_name = N'TestDatabase'
And object_type = 'P'
)
)
Add Target package0.ring_buffer (Set max_events_limit = 10000, max_memory = 51200)
With
(
Max_Memory = 4096KB,
Event_Retention_Mode = Allow_Single_Event_Loss,
Max_Dispatch_Latency = 30 Seconds,
Max_Event_Size = 0KB,
Memory_Partition_Mode = None, …
Run Code Online (Sandbox Code Playgroud)