Abfragen können sich aus verschiedenen Gründen im Laufe der Zeit verlangsamen, und Sie können das Problem auf verschiedene Arten beheben, indem Sie die Indizes neu erstellen. Ich werde einige der häufigsten Gründe meiner Erfahrung mitteilen, aber es kann auch andere Ursachen geben. Ich vermute, Sie leiden unter einem dieser Probleme. Ich habe auch einige Fragen als Kommentar zu Ihrer Frage gestellt, um zu sehen, ob wir weitere Details erhalten können. Aber ein paar Gedanken:
Statistik Stale SQL Server verwaltet Spalten- und Indexstatistiken. Diese teilen dem Abfrageoptimierer im Wesentlichen mit, wie Ihre Daten verteilt werden. Diese Informationen sind für den Optimierer von entscheidender Bedeutung, wenn er die richtige Zugriffsmethode für Daten (Seek vs Scan) und anschließend die verwendete Verknüpfungsmethode auswählt. Wenn Sie die automatische Aktualisierungsstatistik aktiviert haben (Standardeinstellung in SQL. Auf Datenbankebene), werden diese neu berechnet, jedoch nur, wenn sich "genügend" Daten ändern. Wenn Sie also einige Einfügungen in Ihrer Tabelle haben, die Statistiken jedoch nie manuell aktualisieren und die Einfügungen / Aktualisierungen nicht ausreichen, um eine automatische Statistikaktualisierung auszulösen, leiden Sie möglicherweise unter schlechten Plänen für Ihre Datenverteilung. Durch die Neuerstellung Ihrer Indizes werden auch Ihre Indexstatistiken neu berechnet Ich würde einen Job erstellen, um Statistiken regelmäßig manuell zu aktualisieren. Dies ist ohnehin eine bewährte Methode. sp_updatestats
Wenn dies das nächste Mal geschieht, versuchen Sie, es einfach in Ihrer Datenbank auszuführen und festzustellen, ob Sie einen Unterschied feststellen
Probleme mit dem Abfrageplan Möglicherweise leiden Sie unter Parameter-Sniffing. Wenn eine Abfrage zum ersten Mal ausgeführt wird, wird ein Wert übergeben. Die Abfrage wird für diesen Wert optimiert. Wenn Sie es das nächste Mal mit einem anderen Wert ausführen, der von einem anderen Abfrageplan profitieren würde, leidet es unter dem ursprünglichen Abfrageplan, was zu einer langsamen Abfrage führt. Wenn die Dinge für die App langsam laufen - sind sie auch langsam, wenn Sie dieselbe Abfrage in SQL Server Management Studio ausführen? Wenn es in SSMS schnell, in der App jedoch langsam ist, kann dies ein gutes Zeichen für das Parameter-Sniffing sein. Wenn es im Laufe der Zeit für alle Abfragen und unabhängig von den Parametern durchweg langsam ist, würde ich hier nicht nachsehen. In diesem Artikel wird viel über das Parameter-Sniffing gesprochen.
Nicht genügend Speicher / zu viele Ad-hoc-Pläne Es scheint, als würden Sie Ad-hoc-SQL an SQL Server senden. Dies kann Ihren Plan-Cache manchmal aufblähen lassen, insbesondere wenn Sie für jede Ausführung einer Abfrage einen separaten Plan haben. Abhängig vom Speicher auf Ihrem Server kann dies auch zu dem Problem führen. Wie viel Speicher befindet sich auf Ihrem Server? Schauen Sie sich diesen Link zum Problem mit Einwegplänen an. Sie haben in SQL Server 2005 nicht viele großartige Lösungen für dieses Problem, wenn Sie es haben. Wenn Sie dieses Problem in einer Umgebung ohne Produkt wiederherstellen können, würde ich empfehlen, es DBCC FREEPROCCACHE
in Ihrer Umgebung ohne Produkt auszuführen, wenn dies erneut auftritt. Bitte beachten Sie! Dies ist eine instanzweite Einstellung, wenn Sie dies in der Produktion tun. Gespeicherte Abfragepläne im Cache für eine Datenbank sind nicht mehr vorhanden. Es bedeutet, dass Sie für Zusammenstellungen erneut "bezahlen" müssen. Wenn Sie eine hohe Parallelität und ein ausgelastetes System haben, kann dies zu Problemen führen. Wenn dies die einzige echte Datenbank ist und Sie ohnehin unter Leistungsproblemen leiden, schadet es nicht, dies in der Produktion zu versuchen. Wenn Sie andere Datenbanken haben und dies nur für diese Datenbank tun möchten, wird in diesem Blogbeitrag erläutert, wie Sie vorgehen müssen eine klare für nur eine DB.
Indexfragmentierung - Es ist möglich, dass die Indexfragmentierung hier das eigentliche Problem ist, aber ich bin überrascht, dass es so schnell so schlimm wird. Wenn Ihre Tabellen auf einem Schlüssel gruppiert sind, der schnell zu einer Fragmentierung führt, und Sie viele Einfügungen haben, kann dies der Fall sein. Es wäre viel schlimmer, wenn Sie in Bezug auf Speicher und Festplatten-E / A unterfordert wären. Es wäre gut, einen Job einzurichten, um Ihre Indizes regelmäßig neu zu erstellen / zu organisieren. Basierend auf Ihren Antworten auf einige Fragen in den obigen Kommentaren können andere Maßnahmen ergriffen werden, um die Auswirkungen zu minimieren.