none
Abfrageperformance vieler Abfragen plötzlich erheblich schlechter, Ausführungspläne mit Werten von 900% und mehr? RRS feed

  • Frage

  • Hallo zusammen,

    auf einem unserer Server:

      Microsoft SQL Server 2016 (SP2-CU10) (KB4524334) - 13.0.5492.2 (X64) Standard Edition auf Windows Server 2016, aktuell gepatcht.

    hat sich seit kurzem die Performance verschiedenster Abfragen erheblich verschlechtert. Abfragen, die früher bspw. 500 ms gedauert haben, laufen jetzt teils 40 bis 50 Sekunden oder auch mehr. Es betrifft Abfragen auf verschiedene Datenbanken, die stehen meist auch nicht mit anderen problematischen Abfragen bzw. deren Datenquellen in Verbindung.

    Ich habe irgendwie die Vermutung, dass durch eines der letzten Updates (sei es Windows oder auch SQL Server) irgendwas anders läuft als früher. (Windows Updates erwähne ich nur, da es dort im Oktober Update eine Änderung in VBScript gab, die ebenfalls erhebliche Performanceprobleme in vielen Classic ASP Skripten bei Verwendung von Set <Recordset> = <Connection>.Execute mit sich bringt)

    Allerdings kann ich keines der Updates zeitlich in direkte Verbindung mit den Problemem bringen. Das CU 7 war schön längere Zeit drauf, die Oktober Updates für Windows Server 2016 wurden ca. eine Woche vor Auftreten der Probleme installiert.

    Ich weiß, das ist der Standardspruch eines jeden Anwenders auf die Frage: Was hat sich geändert? Da kann ich leider nur sagen: Nichts :)

    Virenscanner ist nicht vorhanden bzw. ist der Echtzeitschutz des Windows Defenders deaktiviert und zusätzlich alle mir bekannten SQL relevanten Ordner vom Schutz ausgenommen.

    ---

    Die Abfragen sind in der Regel sehr komplex und basieren auf seit Jahren unverändert laufenden Views, Skalar- und Tabellenfunktionen.

    Oft sind in den nun problematischen Abfragen irgendwo Skalarfunktionen mit integriert aber das ist nicht bei allen nun problematischen Abfragen der Fall. Nehme ich die Skalarfunktionen raus und versuche, es über JOINs nachzubilden, geht es in den meisten Fällen schneller, was aber auch zu erwarten war.

    Mein Problem dabei ist: Es sind mehrere hundert Abfragen, die in der Regel seit Jahren existieren, nicht verändert wurden, zum größten Teil sehr komplex sind und bis vor ein paar Tagen ohne Probleme durchgelaufen sind. Die alle zu ändern ist nicht oder nur mit unverhältnismäßig hohem Aufwand möglich.

    Die Abfragen an sich wurden größtenteils seit Jahren nicht geändert. Die Datenmengen haben sich gegenüber den Tagen vor dem ersten Auftreten des Problems nicht wesentlich verändert.

    Indizes, Statistiken, ... habe ich geprüft und erneuert bzw. aktualisiert. Plancache wurde schon geleert.

    SQL Dienst und auch die VM selbst wurden mehrfach neugestartet.

    Ggfs. noch wichtig: Die Datenbanken laufen historisch bedingt alle mit dem Kompatibilitätsgrad 100 (SQL Server 2008). Ob diese auf 130 umstellbar sind, kann ich derzeit nicht sagen.

    Trace Flag 4199 hatte ich bereits auf Sessionebene mal probiert, hier bin ich mir allerdings nicht sicher, ob das wegen des Kompatibilitätsgrad überhaupt zieht.

    ---

    Was mir auffällt, sind exorbitant hohe Prozentangaben in den Ausführungsplänen vieler der problematischen Abfragen. Da werden teils Werte von 900% und mehr als Abfragekosten für Merge Joins ... ausgegeben. Das war früher (soweit ich mich erinnern kann) nicht so.

    ---

    Das CU 10 hatte ich nach dem Auftreten der Probleme installiert, vorher war CU 7 vorhanden.

    Der Server läuft als VM unter VMWare in einem Cluster, der auch schon längere Zeit exakt so da steht und ansonsten keinerlei Probleme zeigt. Die Festplatten für den SQL Server sind ebenfalls virtuell und kommen von einem reinen SSD Datastore. (Und bevor einer kommt: SQL nicht in einer VM => Sehe ich anders und es lief ja auch jahrelang problemlos :)

    Die VM hat 64 GB RAM, 8 Kerne und langweilt sich an für sich. CPU Auslastung ist in der Regel unter 20%, RAM baut sich mit der Zeit natürlich bis zur Maximalgrenze auf, liegt aber derzeit nur bei 40%.

    ---

    Da ich mir keinen Reim darauf machen kann, ich an den Umgebungsbedinungen nichts ändern kann und es bis eben vor kurzem problemlos lief (ansonsten läuft der Server ja auch, nur halt einige Abfragen extrem lahm) wollte ich fragen, ob noch jemand eine Idee hat.

    a) Gibt es evtl. mit den Updates der letzten Monate bekannte Probleme in dieser Richtung? Ich konnte da nichts finden.

    b) Wie kann man dem Problem weiter auf die Schliche kommen? (Wie gesagt, jede Abfrage umschreiben ist nicht möglich, liefen ja auch jahrelang, da kann ich das schlecht argumentieren).


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 26. Oktober 2019 11:34
    Moderator

Alle Antworten