Wie lösche ich eine Tabelle aus dem SQL Server-Cache?

10

Ich habe einige Tabellen in meiner Datenbank, die nicht zwischengespeichert werden sollten.

Wie weise ich SQL Server an, die Seiten einer Tabelle nicht zwischenzuspeichern, oder wie lösche ich eine einzelne Tabelle aus dem Cache?

Das Leeren des gesamten Caches ist keine Option.

Ich verwende SQL Server 2008 und SQL Server 2008 R2.

Catalin Adler
quelle
4
Auf welcher Grundlage haben Sie entschieden, dass die Tabellen nicht zwischengespeichert werden sollen?
3
Wenn Ihre Tabellen zwischengespeichert werden, werden sie abgefragt. Wenn selten auf sie zugegriffen wird, werden sie vom SQL Server-Speichermanager zum gewünschten Zeitpunkt vor anderen Objekten gelöscht. Was ist dein Ziel hier?
John Sansom
4
@ John - Keine Ahnung, was das Ziel des OP ist, aber es gibt Zeiten, in denen dies nützlich wäre. Beispiel: Führen Sie einen einmaligen Scan für eine große Tabelle durch, ohne den Pufferpool zu leeren.
3
Einige der Gründe: Tabelle mit niedriger Priorität, iis / rs auf demselben Computer wie SQL Server, Stromverbrauch usw. Das Wichtigste ist, dass einige Tabellen Tabellen mit niedriger Priorität in Bezug auf die Leistung der Anwendung sind und sicher von der Festplatte gelesen werden können wann immer auf sie zugegriffen wird. Indem Sie diese Tabellen aus dem Pufferpool heraushalten, wird die Speicheranalyse etwas einfacher.
Catalin Adler
1
@ user973156: Ist Ihr Code und Design so gut, dass Sie jetzt nur noch SQL Server erraten können, um die Dinge besser zu machen?
Gbn

Antworten:

12

Es gibt keine Möglichkeit, dies zu tun.

DBCC DROPCLEANBUFFERSakzeptiert keine Parameter für eine bestimmte Datenbank oder ein bestimmtes Objekt. Intern kann SQL Server dies auf Datenbankebene tun, jedoch werden bei einer Datenbank AUTO_CLOSEalle entsprechenden Seiten aus dem Puffercache entfernt.

Auch intern kann SQL Server bestimmte Seiten so markieren, dass sie die ersten sind, die vom faulen Schreiber rausgeschmissen werden. Dies wird von DMVs verwendet sys.dm_db_index_physical_stats, um zu vermeiden, dass der Pufferpool wie in diesem Artikel erwähnt geleert wird. Diese Funktionalität wird uns jedoch in keiner Weise zur Verfügung gestellt (auch wenn es nützlich sein kann, sie bei einem einmaligen Scan angeben zu können eines großen Tisches zum Beispiel).

Martin Smith
quelle
7

Sie können nicht angeben, dass bestimmte Tabellen nicht zwischengespeichert werden sollen. Was lässt Sie denken, dass Sie die Tabellen nicht im Cache haben möchten?

SQL Server führt ALLE normalen Vorgänge im Pufferpool aus. Wenn Sie also SQL Server anweisen könnten, keine Tabelle in den Cache zu laden, wäre diese Tabelle für normale DML-Vorgänge nicht zugänglich.

mrdenny
quelle