Es möglicherweise nicht genügend virtueller Speicher Wenn eine große Anzahl von Datenbanken in SQL Server haben

Problembeschreibung

Möglicherweise genügend verfügbaren virtuellen Adressraums bei der Microsoft SQL Server sind alle folgende true Wenn SQL Server mit den Standardeinstellungen Konfigurationswerte ausgeführt wird:
  • Der Server hat mindestens 2 GB RAM.
  • Es gibt eine große Anzahl von Datenbanken auf dem System (z. B. 500).
  • Die meisten Datenbanken werden aktualisiert (z. B. Datenbanken keinen Status "schreibgeschützt").
  • Gibt genügend gleichzeitig aktive Benutzer auf den meisten 255 Arbeitsthreads von SQL Server verwenden.
SQL Server kann die folgenden Fehlermeldungen erzeugen nachdem insgesamt 2 GB virtuellen Adressraum aufgebraucht ist (oder 3-GB virtuellen Adressraum in SQL Server Enterprise Edition mit der Option/3 GB in der Datei Boot.ini aufgebraucht)

Nachricht 1

Fehler: 17802, Schweregrad: 18, Status: 3
Server-Ereignis-Thread konnte nicht erstellt werden.

Nachricht 2

SQL Server konnte nicht Process_loginread Thread erzeugen.

Meldung 3

Warnung: Löschen Prozedurcache um fortlaufenden Speicher freizugeben.


Puffer Verteilung: Gestohlen = 3454 freien = 2540 Prozeduren = 138
Inram=0 Dirty=1108 Kept=35
I/O=0, Latched=0, Other=214821
Puffer gilt: Commit = 222096 Target = 222096 gehasht = 215964
InternalReservation = 547 ExternalReservation = 0 Min. freien = 512
Prozedur-Cache: TotalProcs = 8 TotalPages = 138 InUsePages = 138
Dynamische Speicher-Manager: gestohlen = 3556
OS=497 General=1706
Abfrage-Plan 755 Optimizer = 0
Utilities=9 Connection=1583
Globaler Speicherobjekte: Ressource = 1119 Sperren = 163 XDES = 1 SQLCache = 90 Replikation = 5 LockBytes = 2 ServerGlobal = 20
Abfrage-Speichermanager: gewährt = 0 warten = 0 Maximum = 164370 verfügbar = 164370

Ursache

Für jede aktualisierte Datenbank reserviert SQL Server mindestens 64 KB-Block für die Verwendung in Protokolldatensätze formatieren, bevor sie geschrieben auf Datenträger. Diese Zuordnung tritt auf, wenn der erste Protokolleintrag während INSERT-, Update- oder DELETE-Anweisung für die Datenbank wie generiert wird. Je nach der Aktivität der generierten Protokolldatensätze können nachfolgende Änderungen die Zuweisung von zusätzlichen 64 KB Umlagen ausgelöst. SQL Server 7.0 wird nicht mehr als drei 54 KB-Blöcke reserviert. In SQL Server 2000 die Obergrenze Umlagen für jede Datenbank eine Funktion der Anzahl der Prozessoren ist ist, SQL Server konfiguriert.

PROBLEMUMGEHUNG

Mit -g Startparameter werden zusätzliche, nicht reservierten virtuellen Speicher für diese Datenbank Umlagen belassen. G - Parameter ist in SQL Server 7.0 Servicepack Readme.txt und in der Onlinedokumentation zu SQL Server 2000 dokumentiert. Der Abschnitt "Weitere Informationen" in diesem Artikel enthält die Einstellungen, empfiehlt Microsoft, den entsprechenden Wert für diese Einstellung bestimmen.

Weitere Informationen

Auf einem Computer mit 2 GB oder mehr RAM, alle SQL Server behält jedoch 256 MB (SQL Server 7.0) oder 384 MB (SQL Server 2000) des virtuellen Adressraums während des Startvorgangs von Pufferpool verwendet. Außerdem verwendet SQL Server zum Speichern von Daten und Prozedur-Cache, Puffer Poolspeicher zu den meisten anderen Speicher aus SQL Server-Anforderungen, die kleiner als 8 KB sind. Der verbleibende nicht reservierte Speicher mit anderen richtet, die aus dem Pufferpool kann nicht bedient werden. Diese Mittel umfassen, jedoch nicht auf:
  • Stacks und der zugeordnete Threadumgebungsblock für alle Threads, die SQL Server erstellt. Nach SQL Server alle 255 Arbeitsthreads erstellt, ist ca. 140 MB.
  • Umlagen, die durch andere DLLs sind oder Prozesse laufen im SQL Server-Adressraum (die variiert von System zu System), wie:
    • OLE DB-Provider von verknüpften Servern.
    • COM-Objekte, die mithilfe des Systems Sp_OA geladen werden gespeicherte Prozeduren oder erweiterter gespeicherter Prozeduren.
  • Alle Bilder (.exe oder .dll), die in den Adressraum geladen werden häufig 20, 25 MB, aber möglicherweise mehr verwenden, wenn Sie Verbindungsserver Sp_OAoder erweiterte gespeicherte Prozeduren.
  • Der Prozessheap und andere Heaps, die SQL Server erstellen können. Während des Startvorgangs ist in der Regel 10 MB dies mehr, wenn Sie Verbindungsserver Sp_OAoder erweiterten gespeicherten Prozeduren verwenden.
  • Aus SQL Server-Prozesse, die größer als 8 KB für große Abfragepläne wie senden und empfangen Puffer ist die Netzwerk-Paketgröße Konfigurationsoption 8 KB und So weiter. Sehen Sie diese Nummer OS reservierten Wert in DBCC MEMORYSTATUS gemeldet und als Anzahl der 8 KB Umfassenden Seiten gemeldet wurde. Normale Werte sind 5 MB.
  • Ein Array, Statusinformationen für jeden Puffer zu verfolgen, die im Pufferpool. Dies ist normalerweise ca. 20 MB, wenn SQL Server mit Address Windowing Extensions (AWE) aktiviert ist, läuft es deutlich sein kann.
Auf Systemen mit einer großen Anzahl von Datenbanken können 64-KB-Verteilung, die für Protokoll Formatierung aller übrigen virtuellen Speicher belegen. An diesem Punkt fehlschlagen nachfolgende Umlagen in einem oder mehreren Fehlern, die im Abschnitt "Symptome" in diesem Artikel aufgeführt sind.

Mithilfe den Startparameter -g können Sie anweisen, SQL Server zusätzlichen virtuellen Speicher lassen, dass aus dieser Umlagen Protokoll verknüpft und anderen normalen Zuweisungen aus virtuellen Adressraum nicht ausgeführt wird.

Die folgende Tabelle listet einige empfohlene Startpunkte für g - Wert von der Anzahl der Datenbanken und Server-Version:
DatenbankenSQL Server 7.0SQL Server 2000
250-g134N/A
500-g185N/A
750-g237N/A
1000-g288-g288
1250-g340-g340
1500-g392-g392
Diese Tabelle wurde mit normalen aufgeführten Werten berechnet und basiert ebenfalls auf der Annahme, dass keine Verbindungsserver Aktivität, Sp_OA oder erweiterte gespeicherte Prozeduren verwendet. Es basiert ebenfalls auf der Annahme, AWE nicht verwenden und diese SQL Profiler nicht verwendet wird. Diese Zustände müssen Sie -gerhöhen.

Microsoft empfiehlt, dass Sie ernsthaft bevor Sie einen Server mit mehr Datenbanken als ausführen, da der Aufwand für diese Anzahl von Datenbanken auf dem System benötigt viel virtueller Speicher vom Pufferpool, dauert die Leistung für das System als Ganzes ergeben.

Darüber hinaus hat viele Datenbanken erstellen virtueller Speicher die Auswirkung Gibt es pro Datenbank Speicherbereiche, die einen Puffer Pool Out-Arbeitsspeicher verursachen. Beispielsweise kann die folgende Fehlermeldung angezeigt:
Fehler: 701, Schweregrad: 17, Status: 123.

Es ist nicht genügend Arbeitsspeicher zum Ausführen dieser Abfrage.
Diese Art von Out Arbeitsspeicher in SQL Server 2005 häufigeren möglicherweise SQL Server 2005 mehr pro Datenbank-Metadaten als frühere Versionen von SQL Server überwacht.

Beim Nachverfolgen der Indexverwendung dm_db_index_usage_stats gespeichert wie erfordern der Betrieb viel Arbeitsspeicher. Der Vorgang erfordert eine beträchtliche Menge Speicherplatz verfügt jede Datenbank viele Indizes.
Eigenschaften

Artikelnummer: 316749 – Letzte Überarbeitung: 21.01.2017 – Revision: 1

Feedback