SQL Server frisst extrem viel Arbeitsspeicher

aggroman

Lt. Junior Grade
Registriert
Sep. 2008
Beiträge
449
Tagchen,

ich hab hier ein MS-SQL Server am laufen. Der Prozess beansprucht über 5,5 GB Arbeitsspeicher, ich hab keine Ahnung woran das liegen kann.

Kenn sich da jemande aus ?

gruß
Roman
 
So viele Angaben. Da kann man ja sofort ohne Nachfragen helfen.

Betriebssystem?
Was läuft auf dem SQL Server?
Wir groß sind die Datenbanken?

Ist der Verbrauch von 5.5GB ein Problem für diesen Server? Hilft eine Ram Aufrüstung?
 
Öhm, würde vermuten der SQL lagert aufgrund eines schnelleren Zugriffs in den Ram aus?
 
Der SQL Server nimmt sich alles, was er vom OS zugewiesen bekommen kann. Du kannst aber im SQL Management Studio eine Obergrenze einstellen. Wo man das genau macht kann ich Dir allerdings nicht sagen.

Das ist somit normal ;)
 
Auf dem Server befindet sich eine Datenbank ca. 5 GB gross von der ständig gelesen wird.
System WIN Server 2008 R2. Ausgestattet ist der Server mit 8 GB Arbeitsspeicher. Ich kann jedoch nicht verstehen wieso der voll ist, es wird zwar von der Datenbank gelesen jedoch immer in kleinen Happen also max paar MB pro Min
 
Da dein SQL-Server quasi alles für schnellen Zugriff in den RAM schiebt...absolut normal.
 
Der SQL Server speichert die Abfragen und Indizies zwischen um so schnell wie möglich auf Abfragen reagieren zu können. Wenn du keine Obergrenze setzt nimmt sich der SQL Server auch gerne den gesamten freien Speicher. Dafür ist der Speicher allerdings auch da, und er wird freigegeben sobald eine andere Anwendung diesen anfordert.

Die Obergrenze kannst leicht über das Management Studio setzen.
 
Der SQL Server nimmt sich nicht den gesamten freien Speicher, sondern das, was er vom OS zugewiesen bekommt. Wenn das OS selbst Speicher braucht oder einem anderen Prozess Speicher zuordnen muß, wird das dem SQL Prozeß schon wieder weggenommen.
 
Ich spüre halt extreme Performanceeinbrüche,
ich hab in der letzten Zeit haufenweise Views erstellt (teilweise recht komplex mit JOINs auf mehrere Tabellen). Kanns daran liegen ?
 
FBrenner schrieb:
Wenn das OS selbst Speicher braucht oder einem anderen Prozess Speicher zuordnen muß, wird das dem SQL Prozeß schon wieder weggenommen.

das OS kann meines Wissens dem Prozess den Ram nicht einfach wieder entziehen ;)
Möglicherweise existiert eine Bitte, wieder Memory freizugeben, aber sollte der SQL Server da nicht drauf reagieren, kann das Betriebssystem nachher auch nur den Prozess abschießen.

aggroman schrieb:
Ich spüre halt extreme Performanceeinbrüche,
ich hab in der letzten Zeit haufenweise Views erstellt (teilweise recht komplex mit JOINs auf mehrere Tabellen). Kanns daran liegen ?
schlechte Querys können sehr schnell zu Performanceeinbrüchen führen, bzw. sind sie auch meist der Grund dafür.
Es gibt beim SQL Server sicher irgendwelche Möglichkeiten das zu Untersuchen.
 
FBrenner schrieb:
Der SQL Server nimmt sich alles, was er vom OS zugewiesen bekommen kann. Du kannst aber im SQL Management Studio eine Obergrenze einstellen.

Richtige Antwort!

Das kann übrigens soweit führen, dass der ganze Server abschmiert

Die Einstellung findest du im Management Studio unter Eigenschaften der Instanz -> Arbeitsspeicher -> Maximaler Serverarbeitsspeicher in MB
 
Unnötige Klugscheißerei, aber bitte:
Was ist, wenn der SQL-Server selber überprüft ob ein anderer Prozess bis an die komplette Arbeitsspeicherauslastung welchen belegt und dann "brüderlich teilt"?
EDIT: Sagtest du sogar auch selber.
 
Prozesse laufen isoliert, die können keinen Arbeitsspeicher mit anderen Prozessen teilen, das ist eine Schutzfunktion des Betriebssystems, sonst könnte jeder Prozess in den Speicher eines anderen Programmes schreiben.


@aggroman: Eventuell kennt der sql server ein Slow Query Log oder ähnliches, da können dann langsame oder nicht optimierte Querys geloggt werden. Aber auch deine Anwendung kann das einfach mal untersuchen. Einfach in der Anwendung die Zeit jedes Querys messen und bei z.B. über 100ms eine Warnung herausgeben.
 
@ice-breaker
Wenn der TO sich nicht so gut auskennt vermeide ich es, den technischen Level in meinen zu hoch anzusetzen ;-) Es ist wichtig zu sagen, daß das Verhalten normal ist.
 
ice-breaker schrieb:
Prozesse laufen isoliert, die können keinen Arbeitsspeicher mit anderen Prozessen teilen, das ist eine Schutzfunktion des Betriebssystems, sonst könnte jeder Prozess in den Speicher eines anderen Programmes schreiben.

Die Anführungszeichen hast du aber gesehen, oder? Sollte bedeuten, dass "die unnötigsten" Ressourcen des SQL-Servers von ihm selbstständig freigegeben werden.
Wenn schon klugscheißen, dann bitte richtig.

PS: Auch in diesem Posting sind 2 Anführungszeichen versteckt. Findest du sie und weißt sie auch zu deuten?
 
Um festzustellen warum ein Query lange dauert, kann man einfach das SQL-Statement als Query im SQL Mangement Studio ausführen und dabei entweder über Query -> Display Extimated Execution Plan erkennen wo es hackt, oder mit Query -> Analyse Query in Database Engine Tuning Advisor ind die Tiefe gehen. Meist reicht aber ein Blick in den Execution Plan um festzustellen wo es hackt.
 
Zurück
Oben