I will be the first to admit that I often get confused when I use SQL Server profiler.
Having said that, I decided to fire it up to see the SQL that was being generated by experimenting with the Include method of a Db Set. I was going through the music store example where there are Albums, Artists, and Genres.
One thing I noticed was that some calls had an event class of SQL:BatchCompleted while others had an event class of RPC:Completed. It seemed like the lazy load calls were being traced under the RPC event class.
What is the difference was between these two event classes and why does lazy loading result in an event class of RPC:Completed?
RPC:Completed means stored proc has completed. It could be that EF executes SQL code dynamically using sp_executesql so you get RPC:Completed.
An RPC call means that the stored procedure was called from outside the SQL Server instance space. For example, if you have a web application or windows application which creates a SQL connection string and then makes a call to execute the SP.
Yes, SQL Server Profiler does affect performance. When you trace using the GUI, all events are synchronously processed and filtered, so factors such as server load, network latency, which events you collect, and even where the collected events are stored, all contribute to overhead.
BatchCompleted means TSQL code (e.g. selects) have completed. RPC:Completed means stored proc has completed. It could be that EF executes SQL code dinamically using sp_executesql so you get RPC:Completed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With