none
SQL Express Engine verwendet 6GB RAM - Analysehilfe RRS feed

  • Frage

  • Hallo alle miteinander,

    ich stelle diese Frage bewusst im allgemeinen SQL Forum, da es sich nicht um eine Entwicklerfrage handelt. Stattdessen versuche ich einem seltsamen Verhalten einer 2014er Express Installation auf der Spur zu kommen.

    Wir wissen ja, da die Express Ed. eine Limitierung von 1GB für den BufferPool hat. Ein Kollege von mir hat mich vorhin darauf aufmerksam gemacht, dass er eine Express Instanz hat, die sich nach einiger Zeit des Betriebes (mehrere Tage) etliche GB an RAM zieht.

    Sowohl Task Manager als auf Performance Counter belegen mir dies auch.  Es handelt sich tatsächlich um eine Express Edition (build 12.0.2000).

    Wenn ich die Diagnostic Queries von Glenn Berry hinzunehme und mir z.B. über sys.dm_osprocess_memory mir das physical memory in use anschaue, dann bekomme ich hier umgerechnet 6B angezeigt.

    Schaue ich mir z.B die PerformanceCounter Memory Manager  Target und Total Server Memory an, dann bekomme ich als Target 6,2mio KB und als Total 3,8Mio KB.

    Im Buffer Pool hingegen liegen tatsächlich nur um die 1 GB an Daten, wie es die Limitierung auch vorsieht.

    Meine Frage ist nun: Wo kann ich noch ein wenig tiefer graben, um herauszufinden, welche Komponente(n) dazu beitragen, dass eine SQL Express Installation sich so viel Speicher zieht.

    Die Instanz hatte im Vorfeld sogar über 12GB verwendet. Mein Kollege und ich haben dann als Max Memory 6GB konfiguriert. Vorher war der default value drin.

    Wenn also jemand eine Idee hat: immer her damit.

    Danke und Gruß

    Dirk Hondong


    May you never suffer the sentiment of spending a day without any purpose

    Dienstag, 14. April 2015 08:53

Antworten

Alle Antworten

  • Hallo Dirk,

    in der Tat muss man zwischen Buffer Pool (nur dieser ist beschränkt) und den anderen Memory Pools unterscheiden, wie Du es ja bereits tust.
    Der Speicher wird also woanders verwendet. Bisher habe ich das vor allem bei Verwendung von XML oder extended stored Procedures gesehen.

    was gibt denn die folgende Abfrage zurück?

    SELECT type, SUM(pages_kb) / 1024 AS MB
    FROM sys.dm_os_memory_clerks
    GROUP BY type
    ORDER BY MB DESC


    Andreas Wolter (Blog | Twitter)
    MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
    www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com

    Dienstag, 14. April 2015 09:07
  • Hi Dirk,
    schau Dir auch mal diesen Artikel von Kevin Kline an:
    http://sqlblog.com/blogs/kevin_kline/archive/2013/03/28/squishy-limits-in-sql-server-express-edition.aspx
    Squishy Limits in SQL Server Express Edition

    Dort findet sich u. a. auch der Hinweis auf diesen weitere Diskussion:
    http://dba.stackexchange.com/questions/33088/why-does-sql-server-2012-express-use-9-5gb-of-ram-on-my-server
    Why does SQL Server 2012 Express use 9.5GB of RAM on my server?

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

    • Als Antwort markiert Dirk Hondong Mittwoch, 8. Juli 2015 19:24
    Dienstag, 14. April 2015 09:37
    Beantworter
  • Hallo Andreas,

    vor ein paar Stunden gab die Abfrage nichts spannendes zurück. Memoryclerk_SQLBUFFERPOOL lag bei ca 1 GB. 

    Jetzt aber sieht das Ganze schon was anders aus:

    CACHESTORE_SQLCP 2030
    MEMORYCLERK_SQLBUFFERPOOL 1397
    CACHESTORE_OBJCP 68
    MEMORYCLERK_SQLCLR 57
    MEMORYCLERK_SOSNODE 33
    CACHESTORE_PHDR 22
    USERSTORE_DBMETADATA 8
    MEMORYCLERK_SQLSTORENG 7
    MEMORYCLERK_SQLGENERAL 6
    OBJECTSTORE_LOCK_MANAGER 6
    MEMORYCLERK_SQLLOGPOOL 4
    USERSTORE_SCHEMAMGR 3
    USERSTORE_TOKENPERM 1
    CACHESTORE_SYSTEMROWSET 1
    MEMORYCLERK_SQLQERESERVATIONS 1
    MEMORYCLERK_SQLOPTIMIZER 1
    OBJECTSTORE_SNI_PACKET 1

    Danach kommen 0 MB Einträge zurück.

    Interessant finde ich, dass da schon fast 2 GB im CacheStore liegen. Schade, dass ich nicht direk zu Anfang mir schon mal die Infos aus der DMV geholt habe.

    Interessant ist aber auch, dass die Express Ed hier kein Limit verfolgt und der Bufferpool jetzt auch schon mehr als das eine GB beansprucht, dass ja die eigentliche Limitierung sein sollte.


    @Christoph: Danke für's Feedback. 


    May you never suffer the sentiment of spending a day without any purpose

    Dienstag, 14. April 2015 11:18
  • NACHTRAG:  Hab jetzt auch mal die dmv zu den cached Plans abgefragt.

    Ich hab jetzt schon mehr als 27.000 single use plans im Cache, die in Summe 1400MB ausmachen.

    Ok, das liegt dann wohl an der BackupSoftware, welche die Express Instanz als Repository verwendet.

    Spannend ist aber immer noch, dass hier keine Limitierung der Engine erfolgt.

    Ich werde zur Probe mal das max memory der Instanz wieder etwas nach oben drehen und mir dann den Verlauf anschauen.


    May you never suffer the sentiment of spending a day without any purpose

    Dienstag, 14. April 2015 11:21
  • Hallo Dirk,
    das hier sollte helfen:
    http://www.insidesql.org/blogs/cmu/sql_server/optimieren-fuer-ad-hoc-arbeitsauslastungen
    Optimieren für Ad-hoc-Arbeitsauslastungen

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

    Dienstag, 14. April 2015 11:24
    Beantworter
  • Hi Christoph,

    das wird auch mein entsprechendes Vorgehen sein. Plus das Setzen eines oberen Wertes, da die Express Instanz auf dem entsprechenden Server, wie bereits beschrieben, nur Repository für eine Backuplösung ist.

    Gruß

    Dirk


    May you never suffer the sentiment of spending a day without any purpose

    Dienstag, 14. April 2015 11:31
  • Bei uns ist das Flag mittlerweile Standard und ich verstehe nicht, warum es nicht generell gesetzt wird.

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

    Dienstag, 14. April 2015 11:34
    Beantworter
  • Bei uns ist das Flag mittlerweile Standard und ich verstehe nicht, warum es nicht generell gesetzt wird.

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

    Ist bei der Installation einfach erklärt: Die Backupsoftware brachte die Express Installation mit. Bis heute morgen hatte ich mir die entsprechende Konfig auch noch nie angesehen. Aussage war ja: es läuft doch alles. 


    May you never suffer the sentiment of spending a day without any purpose

    Dienstag, 14. April 2015 11:36
  • in der Tat muss man zwischen Buffer Pool (nur dieser ist beschränkt) und den anderen Memory Pools unterscheiden


    Das schon und auch heute noch, allerdings hat sich mir der Version 2012 da auch etwas geändert, da werden jetzt auch andere Mem Pools mit limitiert und hier kommt ja 2014 zum Einsatz: Memory Manager Configuration changes in SQL Server 2012

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 14. April 2015 13:24