none
SQL 2008 R2 gibt keine Speicherressourcen frei

    Allgemeine Diskussion

  • Hallo Community,

    wir betreiben folgende Umgebung: Server mit 2 6Core Prozessoren (also insgesamt 24 Cores) mit 68 GB RAM. Als OS läuft Server 2008R2 Ent. und als SQL 2008R2 STD. Nun haben wir das Problem, dass bei einer DB Größe von ca. 35 GB nach 2-3 Tagen der komplette Speicher vom SQL benutzt wird und nicht frei gegeben wird. Der Buffer Clerk liegt bei 56 GB und die Page Life 100000.

    Hat jemand eine Idee, ausser dass den Speicher zu Begrenzen?   

    Montag, 18. Juni 2012 06:56

Alle Antworten

  • Hi,

    es ist ganz normal, dass der SQL Server den Arbeitsspeicher mit der Zeit für sich in anspruch nimmt. Diesen gibt er auch erst wieder frei, wenn Speicher vom OS benötigt wird. Benötigt kein anders Programm den Arbeitsspeicher, behält der SQL Server diesen für sich.

    Dies kann man nur durch Speicherbegrenzung umgehen. Allerdings ist dies Verhalten ganz normal und sollte zu keinen Fehlern führen.

    Grüße

    Oliver


    Montag, 18. Juni 2012 07:27
  • Hallo,

    das ist mir bewusst, das Verhalten liegt ja auch in der Natur des SQL Servers, aber wir haben das Phänomen, dass der Speicher nicht wieder freigegeben wird und Anwendungen deshalb nicht mehr starten. Wir haben die vermutung, dass es villeicht an der Konstellation OS Enterprise vs SQL Standard liegen kann, ist da was bekannt?

    Montag, 18. Juni 2012 10:18
  • Hi,

    wenn der Server 64 GB RAM hat und der SQL Server sich 35 GB Arbeitsspeicher nimmt, ist doch noch genug Arbeitsspeicher für andere Programme vorhanden oder nicht?

    Der SQL Server gibt natürlich auch nur Speicher frei, wenn er diesen nicht mehr benötigt. Daher sollte der SQL Server generell so eingestellt sein, dass er 2 GB für das Betriebssystem lässt, so dass in deinem Fall für den SQL Server nur 62 GB Speicher reserviert werden kann.

    Ein Problem zwischen OS Enterprise vs. SQL Standard in Bezug auf Speicherverhalten ist mir nicht bekannt.

    Grüße

    Oliver

    Montag, 18. Juni 2012 11:15
  • Hallo,

    das ist mir bewusst, das Verhalten liegt ja auch in der Natur des SQL Servers, aber wir haben das Phänomen, dass der Speicher nicht wieder freigegeben wird und Anwendungen deshalb nicht mehr starten. Wir haben die vermutung, dass es villeicht an der Konstellation OS Enterprise vs SQL Standard liegen kann, ist da was bekannt?

    hallo Rene,

    Du betreibst noch andere Applikationen auf dem gleichen Host wie der SQL Server ? (keine wirklich gute Idee)

    In diesem Fall musst Du die Max Memory Settings fuer den SQL Server konfigurieren.

    in SSMS -> Object Explorer -> server -> Properties -> Memory -> Maximum server memory.

    Bei der Angabe solltest Du beruecksichtigen, dass dieser Wert vor SQL 2012 "nur " die Bufferpool enthielt aber nicht die processplans, CLR, etc. waehrend in SQL 2012 damit alles Memory mit Ausnahme von CLR limitiert wird.

    Du musst dabei sicherstellen, dass Du ausreichend Speicher fuer das OS reserviert bleibt (OS memory, file system cache etc.) und das  verwendete Memory der Applikationen abziehst.

    abhaengig von der Art der SQL Queries, kann der SQL Server im Modus "Optimize for Ad hoc Workloads" betrieben werden, da dann process plans fuer adhoc query nicht gespeichert werden sofern die Queries nur gerade 1x benutzt werden und damit sehr viel Speicher freigegeben werden kann.


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.


    Montag, 18. Juni 2012 11:19
  • Hallo Rene,

    hier findest Du aktuell vier Artikel von mir zur Speicherverwaltung :

    http://www.insidesql.org/blogs/cmu/tag/memory:

    Fang am besten mal mit dem ältesten an.

    Ansonsten würde ich, wie bereits empfohlen die Einstellung für MIN/MAX-Memory entsprechend setzen.

    Dir ist ja wohl schon klar, dass Deine PageLifeExpectancy von 100000 mehr als ausreichend ist.

    Ich würde mal mit 32 GB RAM starten.

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Dienstag, 19. Juni 2012 06:03
  • Guten Morgen zusammen,

    erst mal Danke für die Antworten. Mir ist schon klar, wie dei Speichernutzung funktioniert und bin mit der Performance des Systems auch mehr als zufrieden. Das Problem ist, die DB ist ca 32 GB groß. Erwartete Endgröße liegt zwischen 40-50 GB, deshalb soviel Speicher, läuft alles schön im Cache und ist performant. Nun geht die Speicherauslastung aber nicht auf 35 oder 40 GB hoch, sondern bis auf Anschlag, das hat zur Folge, dass die einzige noch auf dem Server laufende Anwendung, der Virenschutz, keine Luft zum Atmen hat und das Pattern Update fehlschlägt. Und das ist mein Problem. Der Projektleiter für den DB ist deshalb besorgt und möchte eigentlich eine geringere Speicherauslastung, ohne Einschränkung von MAX Memiory, da es ja ein Self Tuning System ist, dass mit dem OS kommuniziert.

    Dienstag, 19. Juni 2012 07:47
  • Hallo Rene,
    im Arbeitsspeicher befinden sich nicht nur die zwischengespeicherten Seiten der Datenbank, sondern auch noch alle möglichen temporären Objekte.
    Ich betreibe auch einen Server mit ca. 1,5 TB an Daten und nur 32 GB RAM eingebaut, 28 GB konfiguriert. Das geht auch, kommt halt immer auf die Anwendungen an.

    Was ich mir vorstellen kann, ist dass der Virenscanner den benötigen Arbeitsspeicher nicht korrekt anfordert, oder auf eine Verzögerung der Bereitstellung unwirsch reagiert.

    Hast Du mal den Hersteller des Virenscanners mit der Fehlermeldung (falls Du eine hast) konfrontiert? Gibt es für den evtl. Konfigurationsvorraussetzungen? Ist das auch eine 64Bit-Anwendung und zertifiziert für das OS?

    Hast Du die aktuelle Version des SQL Servers installiert?

    Select @@Version;

     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Dienstag, 19. Juni 2012 08:04
  • Hallo Christoph,

    da liegt genau meine Misere, alles 64-Bit und der Server ist nach den Vorgaben des AV Herstellers mit Consultant aufgesetzt, das ist der DB Server für die Enterprise Konsole des Virenschutzes. Die Konsole selbst läuft auf einem separaten Server.

    Das System ist aktuell und durchgepatcht. ist ein 2008R2 SP1.

    Ich würde ja mit MAX MEMORY arbeiten, so ungefähr MAX OS -6 GB, denn die Ressourcen sind ja da, aber ich bekomme leider das Argument, dass muss das System selbt können. Ich brauche also Argumente, das würde schon helfen.

    Schönen Restarbeitsatg

    Rene  

    Dienstag, 19. Juni 2012 10:28
  • erst mal Danke für die Antworten. Mir ist schon klar, wie dei Speichernutzung funktioniert

    wenn dies wirklich 100% der Fall waere, so wuerde dieser Thread wohl nicht existieren.

    Ich würde ja mit MAX MEMORY arbeiten, so ungefähr MAX OS -6 GB, denn die Ressourcen sind ja da, aber ich bekomme leider das Argument, dass muss das System selbt können. Ich brauche also Argumente, das würde schon helfen.

    ist das aktuelle Verhalten des SQL Servers nicht ein ueberzeugendes Argument ?

    Das mit dem Selbsttuning des SQL Server funktioniert nur - dies auch nur halbwegs - wenn keine weitere Applikationen auf dem Server laufen und nich Defaulteinstellungen des SQL Server benutzt werden.

    Defaulteinstellung sind insofern sinnvoll, dass das System ueberhaupt laeuft aber Twicking der Settings ist bei jedem System erforderlich.

    Wenn Du ein wenig im Internet suchst, so wirst Du ausreichend Quellen finden - auch direkt von Microsoft - welche ausfuehrlich auf die verschiedenen Memory Optionen / Konfiguration des SQL Server eingehen und wie sie sinnvoll eingestellt werden sollten.


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    Dienstag, 19. Juni 2012 17:02
  • Donnerstag, 21. Juni 2012 14:02