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, когда они есть. Эта настройка позволяет оптимально использовать план запроса.