Как очистить таблицу из кэша SQL Server?

10

В моей базе данных есть несколько таблиц, которые не должны кэшироваться.

Как мне сказать SQL Server не кэшировать страницы таблицы или как удалить одну таблицу из кэша?

Сбросить весь кеш не вариант.

Я использую SQL Server 2008 и SQL Server 2008 R2.

Каталин Адлер
источник
4
На каком основании вы решили, что таблицы не должны кэшироваться?
3
Если ваши таблицы кэшируются, то они запрашиваются. Если к ним обращаются нечасто, диспетчер памяти SQL Server удалит их в предпочтение других объектов в нужное время. Какова ваша цель здесь?
Джон Сансом
4
@ Джон - Понятия не имею, какова цель ОП, но бывают моменты, когда это будет полезно. например, выполнить однократное сканирование большой таблицы без очистки пула буферов.
3
Некоторые из причин: таблица с низким приоритетом, iis / rs на том же компьютере, что и сервер sql, энергопотребление и т. Д. Наиболее важным является то, что некоторые таблицы являются таблицами с низким приоритетом в отношении производительности приложения и могут безопасно считываться с диска всякий раз, когда к ним обращаются. Хранение этих таблиц вне пула буферов упрощает анализ памяти.
Каталин Адлер
1
@ user973156: Ваш код и дизайн настолько хороши, что теперь вы можете только 2-й угадать SQL Server, чтобы улучшить ситуацию?
ГБН

Ответы:

12

Там нет никакого способа сделать это.

DBCC DROPCLEANBUFFERSне принимает никаких параметров для конкретной базы данных или объекта. Внутренне SQL Server может делать это на уровне базы данных, однако, когда база данных AUTO_CLOSEd, все соответствующие страницы удаляются из буферного кэша.

Кроме того, внутренне SQL Server может помечать определенные страницы так, что они будут первыми, которые будут выгружены ленивым писателем. Это используется DMV, например, для того, sys.dm_db_index_physical_statsчтобы избежать сброса пула буферов, как указано в этой статье, но эта функциональность нам никоим образом не предоставляется (хотя может быть полезно иметь возможность указать то же самое при выполнении однократного сканирования). большого стола например).

Мартин Смит
источник
7

Вы не можете указать, что определенные таблицы не должны кэшироваться. Что заставляет вас думать, что вам не нужны таблицы в кеше?

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

mrdenny
источник