/ / Profiling Entity Framework Core з використанням SQL Server Profiler - sql-server, query-optimization, sql-server-profiler

Profileing Entity Framework Core з використанням SQL Server Profiler - sql-server, query-optimization, sql-server-profiler

Коли ви дивіться на Profiler SQL Server, колиПропонуючи LINQ-заявки Entity Framework, існує безліч подій, які призводять до звільнення. Щоб оптимізувати запити LINQ, які події потрібно стежити за профілером?

я з'ясував SQL:BatchCompleted і і RPC:Completed бути актуальними запитами, які виконуються, але яка різниця?

введіть опис зображення тут

Відповіді:

0 для відповіді № 1

RPC:Completed це завершення віддаленого виклику процедури, що означає, що збережена процедура викликається з зовнішньої програми. EF Core у вашій справі викликає sp_executesql збережена процедура для виконання SQL, створеного з запитів LINQ.

SQL:BatchCompleted означає, що виконано сукупність операторів SQL. Це може бути набір повідомлень DDL або DML, або викликів із збереженою процедурою.


0 для відповіді № 2

Я зрозумів SQL: BatchCompleted і and RPC: завершено, щоб бути актуальним запити, які виконуються, але яка різниця?

The SQL:BatchCompleted подія позначає спеціальну (не параметризовану) партію виконання одного або декількох заяв. The RPC:Completed завершена пожежа, коли запит на виклик віддаленої процедури завершує виконання, що може бути параметризованим твердженням SQL або прямим викликом процедури збереження процедури.

EF використовує API SqlClient для виконання параметризованих запитів. SqlClient використовує спеціальний sp_executesql збережена процедура для виконання параметризованих запитів, так що це те, що з'являється в трасі. Профільer показує десеріалізований запит як exec sp_executesql N"..., включаючи значення параметрів як текст. Фактичні параметри надсилаються в SQL у нативному (бінарному) форматі.

Ці події включені в стандартШаблон трасування профілю, а також інші події, які фіксують логіни, відхід. Зверніть увагу, що коли ви бачите послідовність подій Audit Logout, "sp_reset_connection" і Audit Login, вони трапляються при виконанні першого запиту на повторному використанні об'єднаного з'єднання і запускаються наступним RPC для того самого сеансу, який ви бачите в трасі. Всі вони є внутрішніми на стороні сервера, а не як результат окремих запитів, надісланих від клієнта.

EDIT:

Я бачу, що у вас є тег оптимізації запитупитання Щоб усунути неполадку проблемних запитань, ви можете виконати захоплений запит за допомогою SQL Server Management Studio з урахуванням фактичного варіанту виконання плану. Ви також можете зафіксувати план у трасі, додавши Showplan XML подію, але слід робити це тільки на блоці dev з фільтрованим слід, щоб уникнути накладних витрат та впливу на виробничу навантаження. Нефіліфрований профіль, що відстежується у виробництві, є поганим.