gespeichert proc time outs

Wir haben derzeit Schwierigkeiten mit einem SQL-server-Verfahren Timing auf Abfragen. 9 mal von 10 die abfrage läuft innerhalb von 5 sekunde max, aber bei gelegentlich kann der proc weiter über 2 min laufen und veranlasst zeit outs auf der front-end (.net MVC-anwendung) ..

Sie haben das seit über einer Woche untersucht, Job überprüft, serverleistung und alles scheint ok zu sein.

Die DBAs haben sie auf einen bestimmten Tisch verengt, der von verschiedenen Anwendungen mit Einsätzen / Updates bombardiert wird. Dies in Kombination mit der komplexen Auswahl Abfrage, die verursacht die time, die auf dieser Tabelle verbindet (im erzählt) verursacht die time outs ..

Gibt es irgendwelche Vorschläge überhaupt, wie man diese timeouts umgibt? dh

  • replizieren Sie die Tabelle und fragen Sie die neue Tabelle?
  • Jedes zusätzliche Debugging, das beweisen kann, dass dies tatsächlich das Problem ist?
  • Vielleicht Cache die data auf der Vorderseite, wenn eine time aus, rufen Sie data aus dem Cache?

Eine Tabelle, die mit Updates bombardiert wird, ist eine Tabelle, die mit Schlössern bombardiert wird. Und ja, das kann die performance beeinträchtigen.

Zuerst kopiere die Tabelle und laufe die Abfrage mehrmals. Es gibt noch andere Möglichkeiten für das performancesproblem.

Eine Ursache für eine instabile gespeicherte Prozedurleistung in SQL server ist die Kompilierung. Der Code in der gespeicherten Prozedur wird beim ersten Mal kompiliert – der daraus resultierende Ausführungsplan könnte für einige Eingaben und nicht für andere funktionieren. Dies wird durch die Möglichkeit, die Abfragen jedes Mal neu zu kompilieren, festzulegen (obwohl dies einen Overhead hinzufügt).

Dann denke an die Frage. Braucht man die aktuellsten data? Wenn nicht, vielleicht können Sie einfach den Tisch einmal pro Stunde oder einmal pro Tag kopieren.

Wenn die aktuellsten data benötigt werden, musst du vielleicht die Architektur überdenken. Eine Tabelle, die nur mit einer gruppierten Identitätsspalte insert wird, fügt immer am Ende der Tabelle ein. Dies ist weniger wahrscheinlich, um Abfragen auf dem Tisch zu stören.

Replikation kann oder kann dem Problem nicht helfen. Immerhin wird die vollständige Replikation die Updates auf der replizierten Kopie machen. Sie lösen das "Bombardement" -Problem nicht durch Bombardierung von zwei Tischen.

Wenn Ihre Fragen viele historische data beinhalten, könnte die Partitionierung helfen. Nur die jüngste Partition wäre "bombardiert", so dass die anderen besser auf Anfragen reagieren.

Die DBAs haben sie auf einen bestimmten Tisch verengt, der von verschiedenen Anwendungen mit Einsätzen / Updates bombardiert wird. Dies in Kombination mit der komplexen Auswahl Abfrage, die verursacht die time, die auf dieser Tabelle verbindet (im erzählt) verursacht die Auszeit

Wir pflegten, viele time-outs zu bewältigen und verwendet, um eine Menge von Eskalationen zu bekommen .. Dies ist der Ansatz, den wir für die Verringerung der time-outs gefolgt ..

Manche können in Ihrem Fall anwendbar sein, manche mögen nicht … aber folgend wird kein Schaden verursachen

Ändern Sie unter SQL server-Einstellungen:
1.Erstellen Sie das Anmeldezeitlimit: 60
2.Remote Abfrage timeüberschreitung: 0

Auch wenn Ihr Windows-server eingestellt ist, um Dynamic ram verwenden, versuchen Sie es zu staticen ram ..

Möglicherweise müssen Sie auch einige Einstellungen des Windows-servers einstellen

TCP Offloading / Chimney & RSS … Was ist das und sollte ich es deaktivieren?

Nach den oben genannten Schritten reduzierten wir unsere Auszeit um 99%.

Für den Rest 1% haben wir jeden Fall getrennt behandelt

1.Verwenden Sie Statistiken für die Tabellen, die an der Abfrage beteiligt sind
2.Try Feinabstimmung der Abfrage weiter

Dies hat uns geholfen, Timeouts total zu reduzieren.