Предотвращение кэширования в SQL Server

Осмотрев сеть с помощью дяди Google, я не могу найти ответ на этот вопрос:

Каков наилучший способ контролировать производительность и оперативность рабочих серверов, работающих с IIS и MS SQL Server 2005?

В настоящее время я использую Pingdom и хочу, чтобы он указывал на URL-адрес, который в основном имитирует "реальный запрос", но по очевидным причинам не хочет, чтобы запрос выполнялся из кеша. URL-адрес будет вызываться каждые 5 минут.

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

Есть ли способ имитировать NO_CACHE в MySQL?

Привет

Ответ 1

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

В моей компании мы проверяем доступность и производительность отдельно. Я бы предложил вам использовать этот запрос, чтобы убедиться, что ваша система работает вместе с интерфейсом базы данных, а затем пишите другие тесты, которые проверяют отдельные компоненты для оценки производительности. SQL Server поставляется с огромным количеством способов проверить, есть ли у вас узкие места и где они находятся. Я широко использую PerfMon и DMV. Используя PerfMon, я проверяю ожидаемый срок службы процессора и страницы, а также время ожидания очереди на диск. Используя DMV, я могу узнать, слишком ли длинны мои запросы (sys.dm_exec_query_stats) или долгое время ожидания (sys.dm_os_wait_stats).

Двумя крупнейшими узкими местами в IIS, как правило, являются процессор и память, а IIS поставляется со своим набором объектов PerfMon для запроса, но я не так хорошо знаком с ними.

Ответ 2

Чтобы очистить буфер SQL и запланировать кэш:

DBCC DROPCLEANBUFFERS
GO
DBCC FREEPROCCACHE
GO

Небольшая информация об этих командах из MSDN:

Используйте DROPCLEANBUFFERS для тестирования запросов с холодным буферным кешем без выключения и перезапуска сервера. (источник)

Используйте DBCC FREEPROCCACHE, чтобы тщательно очистить кэш плана. Освобождение кэша плана приводит, например, к перекомпиляции хранимой процедуры вместо ее повторного использования из кэша. (источник)