Тестирование времени запроса SQL Server

#sql-server #sql-server-2005

#sql-сервер #sql-server-2005

Вопрос:

В SSMS я могу запустить запрос, выполнение которого занимает некоторое время. Если я снова запускаю запрос, он завершается почти мгновенно, что затрудняет оценку улучшения или нет при внесении изменений, таких как добавление нового индекса.

Как пользователи определяют время запросов, чтобы они могли точно оценить, действительно ли их изменения привели к некоторым улучшениям или нет?

Обратите внимание, я использую sql server 2005

Ответ №1:

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

 CHECKPOINT
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
  

ПРИМЕЧАНИЕ. Не запускайте это на рабочем сервере

Это потому, что после первого выполнения запроса данные будут кэшированы в оперативной памяти, а план выполнения будет кэширован. Таким образом, для последующих вызовов его можно получить намного быстрее — в основном из-за кэша данных, поскольку гораздо быстрее получить данные из оперативной памяти, чем обращаться к дискам.

Итак, вы должны:
1) выполнить первоначальный запрос и записать статистику
2) внести изменения в запрос / индекс
3) очистить кэш, как указано выше
4) выполнить запрос и записать новую статистику

Кроме того, простое сравнение планов выполнения до / после изменения даст представление о разнице — например, если вы видите, что сканирование таблицы заменено поиском по индексу.

Ответ №2:

Вам следует взглянуть на план выполнения запроса — обратите внимание на сканирование индекса или таблицы, которые вы хотите найти. В SSMS -> Запрос -> Включить фактический план выполнения. Запустите запрос еще раз, и вы увидите результаты на вкладке.

Вы видите, что ваши результаты оптимизируются — что, вероятно, произойдет и в рабочей среде. Однако вашим запросам, возможно, придется взаимодействовать и с другими производственными системами, которые могут время от времени удалять результаты ваших запросов из кэша.

http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx

Комментарии:

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

2. Звучит как разумное предположение. Вы можете очистить буферный кэш — я бы не рекомендовал этого делать, если только вы не планируете никогда не кэшировать результат. msdn.microsoft.com/en-us/library/ms187762.aspx