none
SQL Abfrage dauert manchmal (sporadisch) ewig lang RRS feed

  • Frage

  • Hallo!

    Kann mir jemand bei dem folgenden Problem weiterhelfen:

    Und zwar haben wir eine relativ einfache Abfrage:

    SELECT DwDocId, name, DokumentArt, Betreff, Belegdatum, AbgelegtVon, DwStoreDateTime FROM STSDIS_NEW WHERE kundennummer = '27' order by DwStoreDateTime desc
    

    Normalerweise dauert diese Abfrage keine Sekunde!
    Hin und wieder aber dauert diese Abfrage dann über eine Minute?! Wie kann das sein?

    Das ganze tritt scheinbar völlig sporadisch auf: Bsp.: 3x in einer Stunde und dann für 5 Minuten lang?! In diesem Zeitraum dauert die gleiche Abfrage dann immer 45 - 180 Sekunden!

    Die Abfrage selbst starte ich vom MSSQL Management Studio.

    Hier ein Screenshot aus dem SQL Server Profiler:


    Die 4 roten Versuchen dauerte lange der eine grüne klappte hingegen sofort!
    Was könnte noch für euch interessant sein:
    * Der Arbeittspeicher des SQL Server liegt bei 75% (keine Speicherbeschränkung am SQL Server eingestellt)
    * Der CPU langweilt sich den ganzen Tag

    Fällt jemanden dazu etwas ein?
    Vielen Dank für eure Hilfe im Voraus!
    Gilbert




    • Bearbeitet myGil Montag, 31. Oktober 2011 14:53
    Montag, 31. Oktober 2011 14:52

Antworten

  • Hallo Gilbert,

    eine mögliche Ursache könnte sein, das es zu dem Zeitpunkt eine exklusive Sperre auf der Tabelle vorhanden ist und die Abfrage nun warten muss, bis diese Aufgehoben wird.

    Wenn Du es aktuell mal bemerkst, könntest Du die Sperren überprüfen; optional könntest Du die gleiche Abfrage mit einem Table Hint WITH (NOLOCK) ausführen, dann werden vorhandene Sperren ignoriert und die Abfrage sollte wie gewohnt schnell laufen; Achtung, das verursacht ein Dirty Read und sollte nicht also Lösung betrachtet werden, nur zum Testen:

    SELECT DwDocId, name, DokumentArt, Betreff, Belegdatum, AbgelegtVon, DwStoreDateTime 
    FROM STSDIS_NEW WITH (NOLOCK)
    WHERE kundennummer = '27' 
    order by DwStoreDateTime desc
    

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Als Antwort markiert myGil Montag, 31. Oktober 2011 15:11
    Montag, 31. Oktober 2011 14:58
  • Oh - gerade etwas entdeckt:
    Die Festplatte (Start/Programme/Verwaltung/Leistung) ist genau in dem Zeitraum der Aussetzter auf 100% ...

    • Als Antwort markiert myGil Montag, 31. Oktober 2011 15:00
    Montag, 31. Oktober 2011 15:00

Alle Antworten

  • Hallo Gilbert,

    eine mögliche Ursache könnte sein, das es zu dem Zeitpunkt eine exklusive Sperre auf der Tabelle vorhanden ist und die Abfrage nun warten muss, bis diese Aufgehoben wird.

    Wenn Du es aktuell mal bemerkst, könntest Du die Sperren überprüfen; optional könntest Du die gleiche Abfrage mit einem Table Hint WITH (NOLOCK) ausführen, dann werden vorhandene Sperren ignoriert und die Abfrage sollte wie gewohnt schnell laufen; Achtung, das verursacht ein Dirty Read und sollte nicht also Lösung betrachtet werden, nur zum Testen:

    SELECT DwDocId, name, DokumentArt, Betreff, Belegdatum, AbgelegtVon, DwStoreDateTime 
    FROM STSDIS_NEW WITH (NOLOCK)
    WHERE kundennummer = '27' 
    order by DwStoreDateTime desc
    

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Als Antwort markiert myGil Montag, 31. Oktober 2011 15:11
    Montag, 31. Oktober 2011 14:58
  • Oh - gerade etwas entdeckt:
    Die Festplatte (Start/Programme/Verwaltung/Leistung) ist genau in dem Zeitraum der Aussetzter auf 100% ...

    • Als Antwort markiert myGil Montag, 31. Oktober 2011 15:00
    Montag, 31. Oktober 2011 15:00
  • Hallo Olaf!

    An deinem Versuch ist definitiv auch etwas Wahres dran!
    Wenn ich wärend dem Festplatten-Problem:

    Die Abfrage oghne (NOLOCK) starte: Über 1 Minute. Mit diesem (NOLOCK) dauert es zumindest immer nur 5-10 Sekunden.
    Sehr verlockende Lösung aber ich werde mich hüten :)

    Vielen Dank erstmal!!!

     

    Montag, 31. Oktober 2011 15:11
  • Die Abfrage oghne (NOLOCK) starte: Über 1 Minute. Mit diesem (NOLOCK) dauert es zumindest immer nur 5-10 Sekunden.
    Sehr verlockende Lösung aber ich werde mich hüten :)


    Hallo Gilbert,

    das würde ich aber eher als "Nachfolgeeffekt" interpretieren.

    Es könnte sein, das zu dem Zeitpunkt viele Transaktionen laufen und die erst abschließen, wenn sie vollständig in Log File geschrieben wurden; dauert dies lange, dauern auch die Transaktionen lange und die Sperren bleiben aufrecht.

    Da solltest Du mal prüfen, ob Du die Daten- und Log Files besser verteilen kannst bzw. Laufwerke anschaffen könntest , um die IO Last besser zu verteilen und so solche Peaks vermeiden kannst.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Montag, 31. Oktober 2011 16:36