我在 3 台不同的服务器上运行了扩展的事件会话。我正在寻找长时间运行或过度调用的存储过程和内联查询(ORM,主要是 nHibernate)。
rpc_completed event_name 的输出显示 object_type 和 statements_text 的“sp_reset_connection”。但是,它还有一个在 sql_text 中捕获的查询。
扩展事件是否将 2 个执行 --sp_reset_connection 和查询 -- 作为单个事件捕获?我是否应该查看 sp_reset_connection 加上 sql_text 或 statements_text 中的查询的总时间的持续时间值?或者,它是否捕获 sp_reset_connection 并仅显示触发 sp_reset_connection 的查询?
我期望 sp_reset_connection 和查询是单独的事件。
澄清:为什么扩展事件会返回字段之间的冲突?
1. object_name = 'sp_reset_connection'
2. statement = 'exec sp_reset_connection'
3. sql_text = a query (ex: '(@p0 int)SELECT specificat0_.ScenarioId ...')
Run Code Online (Sandbox Code Playgroud)
为什么 sql_text 不同?在典型的扩展事件行 (XML) 中,3 个字段对于已执行的内容是一致的。这给我留下了一个问题:“什么被处决了?”。是否应将持续时间字段值分配给 sp_reset_connection?或者在sql_text中找到内联sql?或两者?
我了解 sp_reset_connection 是什么以及它是如何工作的。我不明白的是扩展事件是如何报告的。Profiler 在报告 sp_reset_connection 时没有歧义。
我的结论是扩展事件正在返回 sp_reset_connection 的结果。然而,这是基于我观察到的结论——即猜测。我需要更具体的东西:即使只有其他人得出相同的结论。
这篇文章表明我可以忽略sql_text。
https://www.sqlskills.com/blogs/jonathan/understanding-the-sql_text-action-in-extended-events/
感谢您的帮助。
sql-server ×1