Einer unserer SQL Server, der seit geraumer Zeit (Jahren) stabil läuft, hat kürzlich unzureichende Speicherfehler ausgegeben. Im Anwendungsereignisprotokoll sehen wir:
Ereignisid: 701
Beschreibung: Es ist nicht genügend Systemspeicher vorhanden, um diese Abfrage auszuführen.
Unser Team, das diesen Server verwaltet, besteht hauptsächlich aus Entwicklern, die ihre Systemadministrationsaufgaben verdoppeln. Unsere Hauptkompetenz ist jedoch die Entwicklung. Abgesehen davon sind wir ratlos darüber, wie wir dieses Problem beheben. Wir haben Foren und so weiter durchsucht und nichts Passendes gefunden
Im Folgenden finden Sie weitere Informationen zur Fehlerbehebung:
- Unser minimaler Serverspeicher ist auf 0 gesetzt.
- Unser maximaler Serverspeicher ist auf 2000 eingestellt.
- Der physische Gesamtspeicher beträgt 3.325,85 MB (von sysinfo).
- Der virtuelle Gesamtspeicher beträgt 7,10 GB (von sysinfo).
- Wir haben AWE nicht verwendet, um Speicher zuzuweisen, aber wir müssen jetzt herausfinden, ob es einen Unterschied macht.
- Dieser Fehler wurde von einem Job ausgelöst, der ein Transaktionsprotokoll sicherte und keine Abfrage ausführte.
- Wir haben viele Verbindungsserver. Die RDBMS-Typen auf der anderen Seite sind SQL Server (2005 und 2000), Oracle 10g und OSI PI-Systeme.
- Es ist zu diesem Zeitpunkt intermittierend. Wir können keine Zeit oder Ereignisse mit den Fehlern in Verbindung bringen.
- Natürlich scheint ein Neustart für eine Weile nicht mehr möglich zu sein, was aufgrund der Art der Fehlermeldung sinnvoll ist.
- Dieser Server verdreifacht sich als Anwendungsserver (einige Windows-Dienste) und als Webserver sowie als Datenbankserver.
BEARBEITEN:
Wir sind auf SP3. Die meisten Posts, die wir gefunden haben, waren vor SP1, was für uns nicht zutrifft.
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
kehrt zurück
9.00.4035.00 SP3 Standard Edition
quelle
Antworten:
Ich würde auch vorschlagen, den Startparameter -g zu verwenden. Es scheint für die meisten Menschen zu funktionieren und wird wahrscheinlich auch für Sie funktionieren. Meine einzige Sorge wäre, dass das zugrunde liegende Problem möglicherweise nicht gelöst werden kann. Wenn beispielsweise aufgrund eines Verbindungsservers ein Speicherverlust auftritt und die MTL auf 512 MB erhöht wird, dauert es dann zwischen den Speicherproblemen nur länger? Ich kenne die Antwort darauf nicht, aber ich stimme UndertheFold eher darin zu, dass ein Perfmon ein guter Anfang sein kann.
quelle
Die Fehlermeldung "Es ist nicht genügend Systemspeicher vorhanden, um diese Abfrage auszuführen." bezieht sich darauf, dass der virtuelle Adressraum (Virtual Address Space, VAS) nicht verfügbar ist und nicht Speicher im herkömmlichen Sinne, dh im SQL Server-Prozessraum.
Da Sie auf diesem Server nur mit 3 GB arbeiten und SQL Server bis zu 2 GB zugewiesen wurde, bedeutet dies, dass das Betriebssystem und vor allem alle anderen Komponenten auf der Box weniger als 1 GB zum Spielen haben. Das ist nicht viel Gedächtnis.
Wenn dieses Problem tatsächlich auf einen Speicherverlust zurückzuführen ist, wird der VAS außerhalb des SQL Server-Prozessbereichs (memToLeave) verwendet.
Ich würde vorschlagen, den Startparameter -g zu verwenden, um dem memToLeave-Teil mehr Speicher zuzuweisen.
Weitere Informationen finden Sie im folgenden Artikel:
http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/
Möglicherweise möchten Sie auch die maximale Speichereinstellung von SQL Server reduzieren, aber ich würde dies als letzten Ausweg tun.
quelle
Dies könnte mit einem Speicherverlust eines Verbindungsservertreibers zusammenhängen. Diesem Forenthread zufolge :
quelle
Ich würde Ihre minimale Speicherkapazität festlegen - es ist durchaus möglich, dass diese anderen Prozesse SQL-Speicher "stehlen"
Sie können ein Zählerprotokoll mit perfmon ausführen, um dies zu bestätigen, und / oder sich selbst weitere Informationen geben, um das tatsächliche Problem zu identifizieren.
quelle
Referenz aus diesem Blog!
Es gibt verschiedene Alternativen, um dieses Problem zu lösen.
Zuerst überprüfen Sie Ihre SQL - Server - Einstellung für „min server memory“ und „max server memory“. Wenn Sie bei beiden Werten einen sehr geringen Unterschied festgestellt haben, erhöhen Sie den „maximalen Serverspeicher“.
Zweitens: Sie haben lange laufende Abfragen mit Informationen zur Speichernutzung gefunden. Wenn sich diese Abfrage im Leerlauf befindet, überprüfen Sie diesen Vorgang und beenden Sie ihn. Die Optimierung der Datenbankleistung spielt eine wichtige Rolle bei der Speichernutzung.
Drittens haben Sie herausgefunden, welche Indexverwendungen für Abfragen mit langer Laufzeit verwendet werden, da die Anzahl der Festplatten-E / A ansteigt und sich dies direkt auf Ihren Arbeitsspeicher auswirkt, wenn Sie das System nicht ordnungsgemäß indizieren.
Viertens: Überprüfen Sie die Größe der Auslagerungsdatei für den virtuellen Speicher und erhöhen Sie die Größe dieser Datei.
Fünftens: Überprüfen Sie die Größe des "Mindestspeichers pro Abfrage", der standardmäßig 1024 KB beträgt. In seltenen Fällen können Sie die Größe dieses Parameters verringern. Eigentlich ist das nicht ratsam, aber Sie können es versuchen.
Sechstens: Versuchen Sie, diesen DBCC-Befehl auszuführen. Dies ist jedoch nicht ratsam, da dies die Gesamtleistung des Servers beeinträchtigen kann. Aber du kannst es versuchen.
quelle