Como limpo uma tabela do cache do SQL Server?

10

Eu tenho algumas tabelas no meu banco de dados que não devem ser armazenadas em cache.

Como digo ao SQL Server para não armazenar em cache as páginas de uma tabela ou como libero uma única tabela do cache?

Liberar todo o cache não é uma opção.

Estou usando o SQL Server 2008 e o SQL Server 2008 R2.

Catalin Adler
fonte
4
Em que base você decidiu que as tabelas não devem ser armazenadas em cache?
3
Se suas tabelas estão sendo armazenadas em cache, elas estão sendo consultadas. Se eles não forem acessados ​​com pouca frequência, o gerenciador de memória do SQL Server os liberará na preferência de outros objetos no tempo necessário. Qual é o seu objetivo aqui?
precisa saber é o seguinte
4
@ John - Não faço ideia qual é o objetivo do OP, mas há momentos em que isso seria útil. por exemplo, fazendo uma varredura única em uma tabela grande sem liberar o buffer pool.
3
Alguns dos motivos: tabela de baixa prioridade, iis / rs na mesma máquina que o servidor sql, uso de energia etc. O mais importante é que algumas tabelas sejam tabelas de baixa prioridade em relação ao desempenho do aplicativo e possam ser lidas com segurança no disco sempre que forem acessados. Ao manter essas tabelas fora do buffer pool, a análise de memória se torna um pouco mais fácil.
Catalin Adler
11
@ user973156: Seu código e design são tão bons que agora você pode apenas adivinhar o SQL Server para melhorar as coisas?
Gb3 de

Respostas:

12

Não há como fazer isso.

DBCC DROPCLEANBUFFERSnão aceita nenhum parâmetro para um banco de dados ou objeto específico. Internamente, o SQL Server pode fazer isso no nível do banco de dados, no entanto, como quando um banco de dados é AUTO_CLOSEremovido, todas as páginas correspondentes são removidas do cache do buffer.

Também internamente, o SQL Server pode marcar determinadas páginas, para que elas sejam as primeiras expulsas pelo gravador preguiçoso. Isso é usado pelas DMVs, como sys.dm_db_index_physical_statspara evitar liberar o buffer pool conforme mencionado neste artigo, mas essa funcionalidade não é exposta de forma alguma para nós (embora possa ser útil poder especificar o mesmo se estiver fazendo uma varredura única) de uma tabela grande, por exemplo).

Martin Smith
fonte
7

Você não pode especificar que tabelas específicas não sejam armazenadas em cache. O que faz você pensar que não deseja que as tabelas estejam em cache?

O SQL Server realiza TODAS as suas operações normais no buffer pool, portanto, se você pudesse dizer ao SQL Server para não carregar uma tabela no cache, essa tabela não estaria acessível para nenhuma operação DML normal.

Mrdenny
fonte