2013-06-11 4 views
10

Существует «лучшей практики», что вы должны запуститьSQL производительность запросов и DROPCLEANBUFFERS

DBCC FREESESSIONCACHE 
DBCC FREEPROCCACHE 
DBCC DROPCLEANBUFFERS 

Перед выполнением анализа производительности на запросе SQL.

Но, к примеру, позже один DROPCLEANBUFFERS:

Использование DBCC DROPCLEANBUFFERS для проверки запросов с кэшем холодным буфером без выключения и перезагрузки сервера.

Чтобы удалить чистые буферы из пула буферов, сначала используйте CHECKPOINT до , создайте холодный буферный кеш. Это заставляет все грязные страницы для текущей базы данных записываться на диск и очищать буферы. После этого вы можете выполнить команду DBCC DROPCLEANBUFFERS, чтобы удалить все буферы из пула буферов.

Я думаю, это означает, что вы проверите свой запрос, как если бы это был первый запрос, который был запущен на сервере, поэтому фактическое «реальное» влияние запроса будет ниже.

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

+0

Я опаздываю к игре, но чувствую, что я должен указать, что если у вас проблемы с PLE в производстве, то да, эти команды, вероятно, будут полезны для тестирования. – influent

ответ

7

Я не согласен, что это лучшая практика и очень редко ее использую.

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

Я тестирую выполнение запроса: не дискового чтения системы или составление запросов Оптимизатор

Это был задан на DBA.SE некоторое время назад. Смотрите эти угождать

3

Я согласен с тем, что @gbn государств в своем ответе, и я не думаю, что я когда-либо использовал три команды для ничего, кроме демонстрации разница между возможными подходами.

Кроме того, в большинстве случаев было бы неразумно запускать эти три DBCC в производственной среде только для тестирования. И запросы настройки производительности в тестовой среде, с тестовыми данными и тестовой нагрузкой, часто приводят вас к неверным выводам относительно вашего запроса.

Обычно, когда я настраиваю запрос, я использую профилировщик для получения фактической статистики исполнения из жизни, я использую SSMS для получения планов выполнения из живого, и я делаю несколько тестовых прогонов (по тестовым данным), чтобы узнать, что отличается. Для более сложных проблем я также использую монитор производительности Windows - и всегда в ситуации, максимально приближенной к реальной. Запуск DBCC просто удалит настройку с реальной сделки.

5

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

зависит от цели.

Если вы не запустите DBCC DROPCLEANBUFFERS, то есть вероятность, что вы получите некоторые нечетные результаты, если не будете очень осторожны в том, как вы проводите анализ производительности. Например, во второй раз, когда вы запускаете запрос, это будет быстрее, потому что требуемые страницы, вероятно, кэшируются в памяти - здесь работает DBCC DROPCLEANBUFFERS, потому что это гарантирует, что у вас есть последовательная начальная точка в тестировании, и это гарантирует, что ваш запрос не искусственно работает быстро, потому что он пропускает дорогие разделы доступа к диску вашего запроса.

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

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


Как и в сторону, Никогда запустить любой из этих 3 заявления на сервере, если вы не знаете точно , что вы делаете!

+0

Можете ли вы объяснить, почему это плохая идея? Предполагая, что производственный сервер в настоящее время активно не используется – userSteve

Смежные вопросы