¿Cómo borro una tabla del caché de SQL Server?

10

Tengo algunas tablas en mi base de datos que no deben almacenarse en caché.

¿Cómo le digo a SQL Server que no almacene en caché las páginas de una tabla o cómo elimino una sola tabla de la caché?

Vaciar todo el caché no es una opción.

Estoy usando SQL Server 2008 y SQL Server 2008 R2.

Catalin Adler
fuente
44
¿Sobre qué base ha decidido que las tablas no deben almacenarse en caché?
3
Si sus tablas se almacenan en caché, se consultan. Si se accede con poca frecuencia, el administrador de memoria de SQL Server los eliminará con preferencia de otros objetos en el momento requerido. ¿Cuál es tu objetivo aquí?
John Sansom
44
@John: no tengo idea de cuál es el objetivo del OP, pero hay momentos en que esto sería útil. por ejemplo, haciendo un escaneo único en una tabla grande sin vaciar el grupo de búferes.
3
Algunas de las razones: tabla de baja prioridad, iis / rs en la misma máquina que el servidor sql, uso de energía, etc. La más importante es que algunas tablas son tablas de baja prioridad con respecto al rendimiento de la aplicación y se pueden leer de forma segura desde el disco cada vez que se accede a ellos. Al mantener esas tablas fuera del grupo de búferes, el análisis de memoria se vuelve algo más fácil.
Catalin Adler
1
@ user973156: ¿Su código y diseño son tan buenos que ahora solo puede adivinar SQL Server para mejorar las cosas?
gbn

Respuestas:

12

No hay forma de hacer esto.

DBCC DROPCLEANBUFFERSno acepta ningún parámetro para una base de datos u objeto específico. Internamente, SQL Server puede hacer esto a nivel de base de datos, sin embargo, como cuando se utiliza una base de datos, AUTO_CLOSEtodas las páginas correspondientes se eliminan de la memoria caché del búfer.

También internamente, SQL Server puede marcar ciertas páginas de modo que sean las primeras expulsadas por el escritor perezoso. Esto es utilizado por los DMV como sys.dm_db_index_physical_statspara evitar vaciar el grupo de búferes como se menciona en este artículo, pero esta funcionalidad no está expuesta de ninguna manera para nosotros (aunque podría ser útil poder especificar lo mismo si se realiza un escaneo único) de una mesa grande, por ejemplo).

Martin Smith
fuente
7

No puede especificar que las tablas específicas no se deben almacenar en caché. ¿Qué te hace pensar que no quieres las tablas en caché?

SQL Server realiza TODAS sus operaciones normales en el grupo de búferes, por lo que si pudiera decirle a SQL Server que no cargue una tabla en la memoria caché, esa tabla no sería accesible para ninguna operación DML normal.

mrdenny
fuente