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

ek_*_*_ny 5 entity-framework sql-server-profiler asp.net-mvc-4

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

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

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

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

Mac*_*ack 9

这都是关于参数化的。当没有动态参数时,它作为 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/


Ozr*_*ric 5

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