Räumung des Messplans


9

Wir haben einen SQL Server 2016 SP1 mit einem maximalen Speicher von 24 GB.
Dieser Server verfügt über eine hohe Anzahl von Kompilierungen. Nur 10% dieser Kompilierungen stammen aus Ad-hoc-Abfragen. Daher sollten die neu kompilierten Pläne im Plan-Cache gespeichert werden, aber die Größe des Plan-Cache nimmt nicht zu (ca. 3,72 GB).

Ich vermute, dass es lokalen Speicherdruck gibt, der zum Entfernen von Plänen aus dem Cache führt. Die Plan-Cache-Druckgrenze beträgt 5 GB. (75% des sichtbaren Zielspeichers von 0 bis 4 GB + 10% des sichtbaren Zielspeichers von 4 bis 64 GB + 5% des sichtbaren Zielspeichers> 64 GB). Wenn ein Cachestore 75% der Druckgrenze erreicht, sollten Pläne aus dem Cache entfernt werden. In meinem Fall sind 75% von 5 GB 3,75 GB. Es ist also plausibel, dass dies die Ursache für die hohen Kompilierungen ist.

Gibt es eine Möglichkeit, das Entfernen von Plänen aus dem Cache zu messen (Perfmon, erweiterte Ereignisse, ...)? Ich kann also sicher sein, dass der lokale Speicherdruck wirklich die Ursache für die hohen Kompilierungen ist?

Antworten:


9

Dafür gibt es ein XEvent:

query_cache_removal_statistics

Tritt auf, wenn ein Abfrageplan aus dem Plan-Cache entfernt wird und die Verlaufsstatistik für das Objekt zerstört werden soll

Also so etwas wie:

CREATE EVENT SESSION [PlanCacheEvictions] ON SERVER 
ADD EVENT sqlserver.query_cache_removal_statistics(
    ACTION(sqlserver.sql_text))

Auch wenn Ihr Plan-Cache eine große Anzahl von Einwegplänen enthält, sollten Sie die Optimierung für Ad-hoc-Workloads optimieren .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.