Ich fange gerade an, etwas über die Speichernutzung in SQL Server zu lernen. Bei Verwendung der Abfrage in der Antwort auf die Frage SQL Server 2008 R2 "Ghost Memory"? Ich habe festgestellt, dass eine einzelne Datenbank den Löwenanteil des Speicherplatzes im Pufferpool einnimmt. Mit Blick auf sys.allocation_units
und sys.indexes
bestätigte ich, dass dies wahrscheinlich auf die starke Verwendung von Indizes in der Datenbank zurückzuführen ist. Die meisten Indizes sind gruppiert.
Ein anderer Datenbankentwickler glaubt, dass auf dem Server Speicherprobleme auftreten. Abfragen werden langsam ausgeführt, da kein Speicher verfügbar ist.
Meine Frage hier ist: Nimmt die Verwendung dieser Indizes und ihre Existenz im Pufferpool den für andere Prozesse verfügbaren Speicher weg?
"Another database developer believes we are having memory issues on the server"
-- basierend worauf? Wie viel RAM hat der Server, wie lauten die Instanzspeichereinstellungen und wie viel Speicher wird vom Prozedurcache belegt?Antworten:
Ja, die Datenseiten eines verwendeten Index, die im Pufferpool zwischengespeichert werden, belegen Speicherplatz im Datencache . Lassen Sie sich dadurch jedoch nicht von der Verwendung von Indizes abbringen (zunächst einmal ist ein Clustered-Index die eigentliche Tabellendaten, denken Sie also auch daran). Die Verwendung von Indizes (natürlich richtig entworfen und implementiert) ist eine gute Sache.
Ihre Speicherprobleme sind höchstwahrscheinlich nicht darauf zurückzuführen, dass Ihre Tabellen Indizes enthalten . Tauchen Sie ein in die Speicherprobleme, was genau sind die Probleme? Haben Sie eine niedrige Lebenserwartung für Seiten ? Wie ist Ihr Speicher auf dem Server konfiguriert? Ist der maximale Serverspeicher zu niedrig, um die Größe des Pufferpools einzuschränken?
Um eine Aufschlüsselung der Indexseiten in Ihrem Datencache zu erhalten, können Sie die folgende Abfrage ausführen:
So erhalten Sie diese Statistiken per Datenbank:
quelle
Indizes belegen Pufferpoolspeicher, ja. Dies ist ein weiterer Grund, warum Sie mit Ihrer Indizierungsstrategie vorsichtig sein und Duplikate minimieren sollten.
Denken Sie daran, dass ein Clustered-Index die Tabelle ist . Der einzige Aufwand für einen Clustered-Index, der über den für einen Heap hinausgeht (was im Allgemeinen unerwünscht ist), betrifft die Nicht-Blatt-Indexseiten und die Aufnahme des Cluster-Schlüssels in alle Nicht-Clustered-Indizes für diese Tabelle. Aus diesem Grund werden schmale Clusterschlüssel bevorzugt.
Die Artikel von Kimberley Tripp über die Auswahl von Schlüsselclustern sind hierfür eine hervorragende Referenz.
quelle