Comment effacer une table du cache de SQL Server?

10

J'ai quelques tables dans ma base de données qui ne devraient pas être mises en cache.

Comment dire à SQL Server de ne pas mettre en cache les pages d'une table ou comment vider une seule table du cache?

Vider tout le cache n'est pas une option.

J'utilise SQL Server 2008 et SQL Server 2008 R2.

Catalin Adler
la source
4
Sur quelle base avez-vous décidé que les tables ne devraient pas être mises en cache?
3
Si vos tables sont mises en cache, elles sont interrogées. S'ils sont rarement utilisés, le gestionnaire de mémoire SQL Server les supprimera de préférence d'autres objets au moment requis. Quel est ton objectif ici?
John Sansom
4
@John - Aucune idée de l'objectif du PO, mais il y a des moments où cela serait utile. par exemple, en effectuant une analyse ponctuelle contre une grande table sans vider le pool de tampons.
3
Certaines des raisons: table à faible priorité, iis / rs sur la même machine que le serveur sql, consommation d'énergie, etc. La plus importante est que certaines tables sont des tables à faible priorité en ce qui concerne les performances de l'application et peuvent être lues en toute sécurité à partir du disque chaque fois qu'ils sont consultés. En gardant ces tables hors du pool de mémoire tampon, l'analyse de la mémoire devient un peu plus facile.
Catalin Adler du
1
@ user973156: Votre code et votre conception sont-ils si bons que vous ne pouvez désormais que deviner SQL Server pour améliorer les choses?
gbn

Réponses:

12

Il n'y a aucun moyen de le faire.

DBCC DROPCLEANBUFFERSn'accepte aucun paramètre pour une base de données ou un objet spécifique. En interne, SQL Server peut le faire au niveau de la base de données, cependant, comme lorsqu'une base de données est AUTO_CLOSEd, toutes les pages correspondantes sont supprimées du cache de tampon.

Également en interne, SQL Server peut marquer certaines pages de sorte qu'elles seront les premières expulsées par l'écrivain paresseux. Ceci est utilisé par les DMV sys.dm_db_index_physical_statsafin d'éviter de vider le pool de tampons comme mentionné dans cet article, mais cette fonctionnalité ne nous est en aucune façon exposée (même s'il peut être utile de pouvoir spécifier la même chose si vous effectuez une analyse unique) d'une grande table par exemple).

Martin Smith
la source
7

Vous ne pouvez pas spécifier que des tables spécifiques ne doivent pas être mises en cache. Qu'est-ce qui vous fait penser que vous ne voulez pas que les tables soient en cache?

SQL Server effectue TOUTES ses opérations normales dans le pool de tampons, donc si vous pouviez dire à SQL Server de ne pas charger une table dans le cache, cette table ne serait pas accessible pour les opérations DML normales.

mrdenny
la source