MS SQL-Server > Lösungen, Rezepte, Tipps, Fragen
Wie kann man den Plan Cache und den Ladepuffer zurücksetzen?
Bei der Überprüfung der Performance einer Abfrage ist es manchmal notwendig, die gecachten Ausführungspläne und auch den Ladepuffer zurückzusetzen, um die Performance von zwei Abfragen mit einander besser vergleichen zu können (wenn nur die Gesamtladezeit im worst case betrachtet wird, d. h. wenn Abfrageplan erstellt und die Daten von der Platte geladen werden müssen).
Hierzu werden folgende zwei Befehle eingesetzt:
- DBCC FREEPROCCACHE: Ohne Parameter werden hier alle Abfrage-Pläne auf dem Server zurückgesetzt (sollte ohne weiteres Studium der zusätzlichen Parameter und Auswirkungen nicht produktiv eingesetzt werden, weil sonst die Performance kurzfristig sinken kann)
- DBCC DROPCLEANBUFFERS: Hiermit wird der Lade-Cache zurückgesetzt (d. h. etwaige Seiten, die in vorherigen Statements geladen wurden, werden aus dem Cache entfernt und müssen bei der nächsten Abfrage neu geladen werden)
Beispiel (zum Testen):
SET
STATISTICS
IO
OFF
;
SET
STATISTICS
TIME
OFF
;
SET
NOCOUNT
ON
;
CREATE
TABLE
TestTable
(
ID
INT
NOT
NULL
,
T NVARCHAR(
MAX
)
);
DECLARE
@i
INT
;
SET
@i = 0;
WHILE (@i < 1000000)
BEGIN
INSERT
INTO
TestTable
VALUES
(@i,
CAST
(@i
AS
NVARCHAR(
MAX
)));
SET
@i = @i + 1;
END
;
SET
STATISTICS
IO
ON
;
SET
STATISTICS
TIME
ON
;
DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
SELECT
COUNT
(*)
FROM
TestTable
WHERE
ID % 7 = 0;
SELECT
COUNT
(*)
FROM
TestTable
WHERE
ID % 7 = 0;
DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
SELECT
COUNT
(*)
FROM
TestTable
WHERE
ID % 7 = 0;