Ich entwickle eine Anwendung mit vielen, dinamisch zusammengestellten, komplizierten SQL-Abfragen. Ich möchte die Abfragepläne so lange wie möglich im Prozedurcache belassen. Um zu verhindern, dass die Abfragepläne (aufgrund des Speicherdrucks) aus dem Prozedurcache verworfen werden, möchte ich dem Prozedurcache genügend Speicher zuweisen. Gemäß diesem nur 10% des „sichtbares Ziel“ -Speicher in dem 4 GB-64GB Bereich wird für das Verfahren Cache verwendet; Ich möchte, dass diese Rate höher ist.
Gibt es eine Möglichkeit, die Größe des Prozedur-Cache zu steuern? SQL Server 2008 oder 2012; Vielleicht einige Enterprise Edition-Funktionen?
Gilt auch diese Regel "10% des sichtbaren Zielspeichers", wenn ich explizit die min. Speicher für den SQL Server?
(Mir sind die Hinweise zu KEEP PLAN / KEEPFIXED PLAN bekannt . Ich bin mir auch der Vorteile der Vorbereitung der Anweisungen über Ad-hoc-Abfragen bewusst. Empfehlen Sie diese Möglichkeiten daher nicht. Ich bin besonders neugierig auf die Steuerung des Prozedur-Cache Größe.)
Antworten:
Sie können die Plan-Cache-Größe nicht manuell steuern. Das folgende Connect-Element beschreibt sowohl die Tatsache, dass in Kürze kein Knopf mehr hinzugefügt wird, als auch, dass Resource Governor in einigen engen Anwendungsfällen möglicherweise nur geringfügig nützlich ist:
http://connect.microsoft.com/SQLServer/feedback/details/293188/amount-of-ram-for-procedure-cache-should-be-configurable
Wie ich in den Kommentaren angedeutet habe, gibt es jedoch andere Möglichkeiten, den Plan-Cache effektiver zu gestalten (z. B. die Einstellung "Für Ad-hoc-Workloads optimieren" ). Kimberly erklärt dies ausführlicher, aber im Wesentlichen platziert diese Einstellung viel kleinere Stubs im Cache, bis derselbe Plan mehr als einmal verwendet wird, und erst dann wird das Ganze zwischengespeichert. In der Standardkonfiguration und insbesondere in Fällen, in denen viel dynamisch zusammengestelltes SQL vorhanden ist, verschwenden Einwegpläne häufig viel Speicherplatz im Cache. Wenn Sie die Menge an verschwendetem Platz reduzieren, die diese belegen, lassen Sie mehr Platz für Pläne, die mehr als einmal verwendet werden, und genau diese möchten Sie sowieso behalten.
quelle
Wenn Sie die Größe Ihres Prozedurcaches ermitteln möchten, führen Sie den folgenden Befehl aus:
Hier erfahren Sie, wie groß Ihr Prozedur-Cache in Seiten ist. Um in KB zu konvertieren, multiplizieren Sie diese Zahl mit 8.
Außerdem erfahren Sie, wie viele Prozeduren zwischengespeichert werden. Dies kann aus verschiedenen Gründen hilfreich sein, z. B. wenn Sie herausfinden möchten, ob zu viele Ad-hoc-Abfragen für die Datenbank ausgeführt werden.
Wenn Sie den prozentualen Speicherbedarf des Prozedurcaches anpassen möchten, passen Sie den für den Server verfügbaren MAX-Speicher (nicht den minimalen Speicher) an. 75% der ersten 4 GB sind für den Prozedur-Cache verfügbar und 10% für alles andere. Ich sehe jedoch keinen Vorteil darin. Theoretisch könnten Sie mehrere Instanzen von SQL Server mit einem maximalen Speicher von 4 GB installieren, um 75% des vom Prozedurcache verwendeten Speichers zu erhalten. Ich sehe den Vorteil nicht, aber dann nicht Kennen Sie Ihr System. Es hört sich so an, als hätten Sie eine Menge Geschäftslogik in der Datenbankebene.
quelle