SQL Server Profiler - почему некоторые вызовы RPC: завершены, а некоторые вызовы SQL:BatchCompleted

Я буду первым, кто признает, что я часто путаюсь, когда использую профилировщик SQL Server.

Сказав это, я решил запустить его, чтобы увидеть генерируемый SQL, экспериментируя с методом Include набора Db. Я просматривал пример музыкального магазина, где есть альбомы, исполнители и жанры.

Одна вещь, которую я заметил, заключалась в том, что некоторые вызовы имели класс событий SQL:BatchCompleted, в то время как другие имели класс событий RPC: Completed. Казалось, что ленивые вызовы загрузки отслеживаются в классе событий RPC.

В чем разница между этими двумя классами событий и почему отложенная загрузка приводит к тому, что класс событий RPC: завершен?

2 ответа

Решение

BatchCompleted означает, что код TSQL (например, select) завершен. RPC: Завершено означает, что сохраненный процесс завершен. Возможно, EF исполняет код SQL динамически, используя sp_executesql, поэтому вы получаете RPC:Completed.

Это все о параметризации. Он запускается как пакет SQL, когда нет динамических параметров, и запускается как RPC, когда они есть. Эта настройка позволяет оптимально использовать план запроса.

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

Другие вопросы по тегам