小编Siy*_*ual的帖子

我可以向扩展事件添加什么以返回正确的 row_counts?

我正在 SQL Server 2017 中运行扩展事件会话,该会话仅记录module_end特定数据库的事件。出现此痕迹的原因有两个:

  1. 我想查看调用存储过程的频率(或缺乏频率)。
  2. 我试图获取每个过程调用的一些细节(例如谁调用它、从哪里调用、花费了多长时间、返回了多少记录等)。

在查看一些结果时,我注意到列表中的一些过程执行了数千万次,但从来没有一次大于row_count0。还有很多其他记录的事件row_count似乎填充正确,因此我最初认为那些从未返回结果的应用程序被引用它们的应用程序错误调用了。然而,事实并非如此。

为了更好地查看调用过程所使用的参数,我启动了一个 Profiler 会话,仅监视这些过程调用。我正在检查的特定过程被非常频繁地调用,并且我很快就收到了大量示例调用,并关闭了探查器。从中注意到以下几点:

  1. 这些调用具有合法的参数。
  2. 在未对扩展事件会话进行任何更改的情况下,在探查器处于活动状态期间记录的过程调用神奇地开始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)

sql-server profiler extended-events sql-server-2017

8
推荐指数
1
解决办法
502
查看次数