SQL Server Profiler-为什么某些调用RPC:已完成,一些调用SQL:batchCompleted



我将是第一个承认我使用SQL Server Profiler时经常感到困惑的人。

话虽如此,我决定将其启动,以查看通过尝试使用DB集的方法来生成的SQL。我正在浏览音乐商店的示例,那里有专辑,艺术家和流派。

我注意到的一件事是,有些呼叫的活动类别为 sql:batchCompleted ,而其他人则拥有 rpc的事件类:已完成的。似乎在RPC事件类中追踪了懒惰的负载电话。

这两个事件类别有什么区别,为什么懒惰加载会导致rpc的事件类别:已完成?

这全都与参数化有关。当没有动态参数时,它作为SQL批次运行,并且在存在时作为RPC运行。此设置允许最佳重复使用查询计划。

请参阅:https://blogs.msdn.microsoft.com/bindeshv/2010/07/12/ef-query-eexecution-pattern-usage-pattern-usage-of-sp_executesql-vs-vs-vs-direct-direct-execution-sql-sql-statement statement/

batchCompleted表示已完成TSQL代码(例如选择)。RPC:完成的表示存储的Proc已完成。可能是EF使用sp_executesql动态执行SQL代码,因此您可以获得RPC:已完成。

最新更新