«Заправка» всей базы данных в SQL Server для скорости первого удара - PullRequest
3 голосов
/ 04 мая 2010

Для определенных приложений у меня есть набор запросов, которые я запускаю каждый раз, когда база данных перезапускается по любой причине (обычно перезагрузка сервера). Это «первичный» кэш страниц SQL Server с общим рабочим набором данных, так что приложение не будет необычно медленно работать при первом входе пользователя в систему после этого.

Один экземпляр приложения работает по чрезмерной схеме, в которой блок SQL имеет больше ОЗУ, чем размер базы данных (4 ГБ на машине, БД в настоящее время меньше 1,5 ГБ и вряд ли вырастет слишком сильно по сравнению с что в ближайшее время). Есть ли удобный / простой способ сообщить SQL Server об удалении и загрузке всего в ОЗУ?

Это может быть сделано трудным путем, если скрипт сканирует sysobjects & sysindexes и запускает SELECT * FROM <table> WITH(INDEX(<index_name>)) ORDER BY <index_fields> для каждого найденного ключа и индекса, что должно привести к тому, что каждая используемая страница будет прочитана хотя бы один раз, и поэтому ОЗУ, но есть ли чище или эффективнее? Все запланированные случаи, когда сервер базы данных останавливается, не соответствуют обычным рабочим часам (все пользователи находятся на расстоянии не более одного часового пояса и, в отличие от меня, ни один из них не работает в глупые часы), поэтому такой процесс (до завершения) замедляется пользователи больше, чем рабочий набор, не заправлялись бы вообще, не проблема.

1 Ответ

1 голос
/ 04 мая 2010

Я бы использовал запускаемый хранимый процесс , который вызвал sp_updatestats

  1. В любом случае это принесет пользу запросам
  2. В любом случае он уже проходит через все (у вас есть индексы, верно?)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...