2013-09-30 3 views
2

У меня есть сервер Windows 2008 r2 с установленным сервером Microsoft SQL Server.Кэширование базы данных

В моем приложении я в настоящее время разрабатываю инструмент для своих пользователей, который запрашивает базу данных, чтобы видеть, если у пользователя есть какие-либо уведомления. Поскольку мои пользователи могут получить доступ к приложению несколько раз за короткий промежуток времени, я думал о том, чтобы положить какой-то кеш в мою логику запросов. Но потом я подумал, что мой ms sql сервер, вероятно, делает это уже для меня. Я прав? Или мне нужно настроить что-то, чтобы это произошло? Если да, то как долго он хранит кеш?

ответ

3

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

PS: не будет кэшировать локальное поражение цели для проверки изменений в базе данных?

1

SQL Server будет обрабатывать кеширование для вас, да. Когда вы создаете запрос или хранимую процедуру, SQL Server будет кэшировать этот план выполнения и повторно использовать его соответствующим образом. Из MSDN:

планов выполнения SQL Server имеет следующие основные компоненты: Запрос Плана Основной части плана выполнения является Реентрантной, данные только для чтения структуры, используемая любого количеством пользователей. Это называется планом запросов . Контекст пользователя не сохраняется в плане запроса. В памяти не более одной или двух копий плана запроса в памяти: одна копия для всех серийных исполнений, а другая для всех параллельных исполнений. Параллельная копия охватывает все параллельные исполнения, независимо от степени их параллелизма.

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

Если вы хотите, чтобы очистить этот кэш можно выполнить sp_recompile или DBCC FREEPROCHCACHE

+0

Выполнение плана кэширования и повторного использования полностью отличается от вопроса. –

+0

@NenadZivkovic - Не совсем, ОП задает вопрос о кэшировании базы данных, тайный план выполнения является частью кэширования и будет использоваться, когда OP выполнит запрос. –

2

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

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

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

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