Gespeicherte Prozeduren sind timing-zeitweise!
Habe ich eine Reihe von gespeicherten Prozeduren rufe ich aus dem code mit ExecuteNonQuery
.
Es war alles gut, aber 2 von meinen gespeicherten Prozeduren gestartet timing zeitweise heute mit:
Timeout ist abgelaufen. Der timeout-Zeitraum
verstrichen vor der Fertigstellung der
Vorgangs oder der server ist nicht
reagiert. Die Anweisung wurde
beendet.
Wenn ich führen Sie das sp manuell von management studio, es ist immer noch alles gut.
Nichts vor kurzem geändert, in meiner db - mein-Kommando-timeout die Standardeinstellung ist ein.
Keine Ahnung?
BEARBEITEN
die Tabelle mit der SPs ausgeführt werden, es ist riesig --> 15 Gigs.
Neustart der box, das gleiche Problem, aber dieses mal nicht bekommen kann die sp ausführen von Management Studio.
Dank!
es läuft sehr schnell in management studio, das ist, warum ich glaube nicht, dass die Einstellung der timeout helfen
Nun, Sie brauchen, um herauszufinden, wenn sein blockiert, oder wenn Sie einen fehlerhaften Ausführungsplan ...
InformationsquelleAutor JohnIdol | 2009-02-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Management studio setzt ein unendliches timeout für Abfragen/Befehle, die es ausführt. Ihre Datenbank-Verbindung von code wird ein default-timeout, das Sie ändern können, auf die command-Objekt.
Es passiert ziemlich schnell auf das management studio aber (weniger als 1 Sek) und auf mein code-es ist ein Timeout nach 30 Sekunden oder so.
Verbindungs-timeout Befehl timeout sollte nicht verwechselt werden, Verbindungs-timeout ist die maximale Zeit, die es dauert, um die Verbindung zu der db
danke für die Korrektur.
Möchten Sie vielleicht einen Blick auf query-profiler, um zu sehen, was Los ist. Es kann Ihnen einige zusätzliche Hinweise. Können Sie einige Befehle, die Sie ausführen können, über query analyzer, um zu sehen, wenn Sie die Abfrage-plan ist der gleiche wie der ausgeführt wird durch das management studio.
InformationsquelleAutor Sam Meldrum
Versuchen, kompilieren Sie diese Verfahren. Ich habe solche Probleme paar mal und finde nicht die Ursache des Problems, aber neu kompilieren hilft immer.
EDIT:
Neu zu kompilieren proc, gehen Sie zu management-studio, open-Prozedur zu ändern, und drücken Sie die Taste F5 oder ausführen: EXEC sp_recompile 'proc_name'
die besten EXEC sp_recompile 'proc_name'
Ich habe gesehen, dass dies geschieht, um Ansichten zu, wo Sie müssen neu erstellt werden, nachdem die Quell-Tabelle(N) geändert. Definitiv einen Versuch Wert.
Ein anonymer Benutzer versucht, die Bearbeitung dieser Antwort, das war eine unangemessene Bearbeiten und sollte schon einen Kommentar, so dass ich seinen Kommentar hier: "Wir werden auch dieses problem auftreten, und verwendet die oben beschriebene Lösung, während kämpfen, um zu finden, die Ursache, sondern die Ursache endete als SQL-Server-parameter sniffing. Das Problem und Lösung sind hier beschrieben dannykendrick.blogspot.co.nz/2012/08/..."
InformationsquelleAutor Michal Dymel
Kann diese beziehen sich Häufig auf:
Den SET-Optionen können dazu führen, dass bestimmte index-Typen nicht verwendet werden kann (Indizes für persistente berechnete Spalten, zum Beispiel, darunter "gefördert" xml/udf-Abfragen)
Parameter sniffing ist definitiv noch ein problem mit SQL-Server (bis einschließlich 2012). Ich habe in der Lage zu replizieren diese leicht auf allen Versionen von SQL. Deklarieren einer lokalen Variablen für jede gespeicherte Prozedur parameter und Einstellung Localparam1 = Param1 behebt timeouts in jedem Fall. Es wurde stört mich seit Jahren.
oder benutzen Sie einfach das
OPTIMIZE FOR
query hint...InformationsquelleAutor Marc Gravell
Ist Sie Befehls-timeout eingestellt? Hat sich etwas in der db vor kurzem geändert, dass die Ursache dieses proc länger dauert?
Wenn Sie haben, um zu diagnostizieren, locking Probleme, müssen Sie so etwas wie sp_lock.
Kannst du die Quelle deiner procct?
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx
Sie können legen Sie es auf 0, was bedeutet, es wird nicht timeout
Auch, wenn Ihr schnell im studio, vielleicht eine Transaktion blockiert wird. Sie brauchen, um zu diagnostizieren mit sp_lock
InformationsquelleAutor Sam Saffron
Ok - dies ist, wie ich es fest in das Ende.
Einen gruppierten index für eine Tabelle mit 45 Millionen Datensätzen war töten mein SQL-server - jedes einfügen von code war, was in den böse-timeouts beschrieben in der Antwort. Die Erhöhung der timeout-Toleranz war nicht gonna lösen mein Skalierbarkeit, also ich spielte mit Indizes und machen Sie den gruppierten index für den Primärschlüssel nicht gruppierten löste die situation.
Ich würde schätzen Kommentare auf diese, um besser zu verstehen, wie das problem behoben wurde.
Ja, es war eine integer - es war gruppierte standardmäßig soweit ich weiß (ich wusste es nicht gruppierten explizit)
InformationsquelleAutor JohnIdol
Möglicherweise müssen Sie update statistics auf der Datenbank. Auch hat die Indizierung der Tabelle in letzter Zeit geändert?
Überprüfen Sie den Ausführungsplan der sp zu finden Sie, wenn Sie den Engpass. Auch wenn es lief ok vor, kann es wahrscheinlich sein, abgestimmt, um effizienter ausgeführt werden.
Auch, wie viel Daten Sie zurückkehren? Wir hatten Probleme mit schlecht entworfene SQL in der Vergangenheit, die nicht zeigen, bis die kumulative Bericht ab, dass mehr Daten in der Ergebnismenge. Nicht zu wissen, wht, Ihre sps zu tun, es ist schwer zu sagen, ob dies eine Möglichkeit, aber es ist erwähnenswert, für Sie zu untersuchen.
InformationsquelleAutor HLGEM
SQL Server unbegrenzt warten vor der Rückgabe an den Benutzer. Mehr als wahrscheinlich, es war ein client-timeout-Eigenschaft festlegen. Zum Beispiel können Sie eine timeout-Eigenschaft für das ADO-command-Objekt.
InformationsquelleAutor Andy Jones
Bekommen Sie SQL profiler auf, vergleichen Sie die Ergebnisse zwischen laufen Sie in Management studio, und über Ihre app.
InformationsquelleAutor AndySw