SQL Server Profiler - 为什么有些调用RPC:已完成,有些调用SQL:BatchCompleted

时间:2012-10-26 16:13:55

标签: entity-framework asp.net-mvc-4 sql-server-profiler

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

话虽如此,我决定通过尝试使用Db Set的Include方法来查看正在生成的SQL。我正在浏览音乐商店的例子,那里有专辑,艺术家和流派。

我注意到的一件事是,某些调用的事件类为 SQL:BatchCompleted ,而其他调用的事件类为 RPC:已完成。似乎在RPC事件类下跟踪了延迟加载调用。

这两个事件类之间有什么区别?为什么延迟加载导致RPC的事件类:已完成?

2 个答案:

答案 0 :(得分:5)

BatchCompleted表示TSQL代码(例如,选择)已完成。 RPC:已完成表示存储过程已完成。 可能是EF使用sp_executesql以动态方式执行SQL代码,因此您获得了RPC:Completed。

答案 1 :(得分:4)

一切都与参数化有关。当没有动态参数时,它作为SQL Batch运行,并且当存在时作为RPC运行。此设置允许最佳地重用查询计划。

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