Подтвердить что ты не робот

Entity Framework и советник по настройке SQL Server

Как использовать советник по настройке SQL Server для подготовки рекомендаций на основе запросов Entity Framework? Entity Framework использует sp_executesql 'query' вместо выполнения запроса, и Tuning Advisor не распознает эти запросы. Я мог бы получить текст запроса вручную, но это будет работать только для очень простых сценариев. Как это сделать автоматически?

UPDATE

Помогло бы мне сохранить информацию профилирования в таблицу и затем запустить некоторое приложение, которое разделит "sp_executesql" и сохранит текст запроса и будет использовать эти новые данные для запуска Tuning Advisor?

4b9b3361

Ответ 1

Я знаю, что эта тема немного холодная. Но поскольку у меня была такая же проблема и я нашел лучшее решение:

Изменение записанных событий является одним из способов сделать это, но уже существует "шаблон", который записывает все, что требуется советнику по настройке SQL-сервера.

Если вы выберете шаблон "tuning", он эффективно удалит и добавит захват событий, цитируемый Doug, но другой тоже.

Подробнее о шаблоне здесь

Чтобы активировать этот шаблон, в окне "Новая трассировка" выберите соответствующий шаблон (я его не создал, он уже был там): New trace properties

Как только вы это сделаете, вы можете проверить выбор события, у вас уже есть что нужно: Trace event selection

Я дополнительно отключил RPCC завершен, так как у меня нет хранимой процедуры

Я надеюсь, что это поможет некоторым людям;)

Ответ 2

Похоже, проблема в этом. Если вы создаете трассировку с использованием SQL Profiler из шаблона "Настройка", она не включает правильные события. Советник по настройке ядра базы данных не понимает операторы sp_executsql из завершенных пакетов событий. Он сообщает в журнале настройки "Событие не ссылается на любые таблицы" с идентификатором категории "S008".

При захвате трассировки вам нужно добавить событие "SQL: StmtCompleted" в разделе TSQL.

Ответ 3

Джефф Уокер указал мне в правильном направлении, но его ответ был неполным (хотя я уверен, что он знал полный ответ и просто не полностью объяснил это)

В выборе события для профилировщика сервера Sql:

Удаление журнала RPC: завершено в разделе Хранимые процедуры - это элемент, который плохо работает с Entity Framework

Разверните все события и добавьте SP: StmtCompleted в разделе Сохраненная процедура, чтобы получить запросы в трассировку.

Кажется, работает для меня.

Люди Microsoft Entity Framework (и люди-профилиры) Это на самом деле хромает. Он работал.

Ответ 4

Используйте SQL Profiler для захвата всего сеанса запросов. Когда вы закончите, вы сможете сохранить результаты профилировщика и запустить все это с помощью SQL Server Tuning Advisor. По моему опыту это дает гораздо лучшие результаты, чем настройка на основе индивидуальных запросов и во многих отношениях проще и реалистичнее, поскольку вы можете использовать профилировщик для захвата запросов из реального использования приложения.

EDIT:

Спасибо, что привлекли больше внимания к конкретной проблеме, о которой вы просите. Я не понимал, что вы говорите, что Tuning Advisor не понимает sp_executesql, потому что это просто неверно. Вы можете запустить столько запросов, сколько хотите, через sp_executesql и захватить их в профиле, а затем запустить этот профиль через Tuning Advisor, и он даст вам рекомендации.

Конечно, я просто сделал это с MS SQL Server 2008 R2. Я создал таблицу без индексов, выполнил кучу запросов через sp_executesql, захватил их в SQL Profiler и затем обработал полученный след через Tuning Advisor. Советник по настройке дал соответствующие рекомендации для запросов, встроенных в sp_executesql.

Точная версия Advisor Engine Tuning Advisor - 10.50.1600.1, работающая под управлением Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) 22 апреля 2011 г. 19:23:43 Copyright (c) Microsoft Developer Developer Edition ( 64-бит) в Windows NT 6.1 (сборка 7601: с пакетом обновления 1).