У меня есть простой запрос на SQL Server 2005
SELECT *
FROM Table
WHERE Col = 'someval'
Первый раз выполнить запрос можно > 15 secs
. Последующие исполнения вернулись в< 1 sec
.
Как я могу заставить SQL Server 2005 не использовать кэшированные результаты? Я пробовал бегать
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Но это, похоже, не влияет на скорость запроса (все же < 1 sec
).
sql-server
caching
PaulB
источник
источник
Ответы:
Вот хорошее объяснение. проверить это.
http://www.mssqltips.com/tip.asp?tip=1360
Из связанной статьи:
источник
Восемь разных способов очистить кеш плана
1. Удалите все элементы из кэша плана для всего экземпляра.
Используйте это, чтобы тщательно очистить кэш плана. Освобождение кэша плана приводит, например, к перекомпиляции хранимой процедуры вместо ее повторного использования из кэша. Это может вызвать внезапное временное снижение производительности запросов.
2. Очистите кэш плана для всего экземпляра и отключите обычное сообщение о завершении
«Выполнение DBCC завершено. Если DBCC напечатал сообщения об ошибках, обратитесь к системному администратору».
3. Очистите специальный и подготовленный кэш планов для всего экземпляра.
4. Очистите специальный и подготовленный кэш планов для одного пула ресурсов.
5. Очистите весь кэш плана для одного пула ресурсов.
6. Удалите все элементы из кэша плана для одной базы данных (не работает в SQL Azure)
7. Очистить кэш плана для текущей базы данных
8. Удалите один план запроса из кэша
Источник 1 2 3
источник
Хотя вопрос немного устарел, это все равно может помочь. Я сталкиваюсь с подобными проблемами, и использование опции ниже помогло мне. Не уверен, что это постоянное решение, но сейчас его исправляют.
Тогда ваш запрос будет таким
источник
select * from Table where Col = 'someval' OPTION (OPTIMIZE FOR UNKNOWN)
Какое значение вы указываете для памяти сервера, не важно, если оно отличается от текущего.
Кстати, причиной ускорения является не кеш запросов, а кеш данных.
источник
Обратите внимание, что ни то, ни другое
DBCC DROPCLEANBUFFERS;
неDBCC FREEPROCCACHE;
поддерживается в хранилище данных SQL Azure / SQL.Однако если вам нужно сбросить кэш плана в SQL Azure, вы можете изменить одну из таблиц в запросе (например, просто добавить, а затем удалить столбец), это будет иметь побочный эффект удаления плана из кеша. ,
Я лично делаю это как способ тестирования производительности запросов без необходимости иметь дело с кэшированными планами.
Подробнее о кэше процедур SQL Azure здесь
источник