Festlegen des Abfragetimeouts für eine gespeicherte Prozedur in SQL Server 2005

8

Kann jemand das Timeout für eine gespeicherte Prozedur festlegen? Einige Beispiele auf dem NET, z. B. sp_configure 'Remote Query Timeout', 5, aber das hat nicht funktioniert. Ich habe auch einige Befehle "DBPROP_COMMANDTIMEOUT" und "DBPROP_GENERALTIMEOUT" gefunden, aber ich weiß nicht, ob sie die richtigen sind und wie sie in meinem Transact-SQL-Code verwendet werden.

    
Johnny Lamho 01.09.2009, 00:18
quelle

5 Antworten

5

Wie Chris Tybur sagte, können Sie nicht das Abfrage-Timeout für einen gespeicherten proc in gespeicherten Proc oder auf dem SQL Server.

CommandTimeout ist ein Client-Konzept: Der Client bricht die Abfrage nach einer bestimmten Zeit ab. Es gibt keinen Zeitgeber oder Mechanismus für einen gespeicherten Prozess, um sich selbst / irgendeine Abfrage abzubrechen). SQL Server ermöglicht eine Abfrage für immer ausgeführt werden.

Das " Zeitlimit für Remoteabfrage " ist genau das: Zeitüberschreitung, wenn SQL Server eine Remoteverbindung herstellt aufrufen, wenn SQL Server selbst der Client eines anderen Servers ist. Es steht in der Beschreibung:

  

Dieser Wert gilt für einen ausgehenden   Verbindung initiiert von der Datenbank   Engine als Remote-Abfrage Dieser Wert   hat keine Auswirkungen auf die Anfragen von   das Datenbankmodul.

Eine aktuelle Frage mit guten Informationen: Timeout-Einstellung für SQL Server

    
gbn 01.09.2009 04:01
quelle
3

Ich habe noch nie von einem Timeout für die Ausführung einer gespeicherten Prozedur auf der Serverseite gehört. Normalerweise würden Sie das Zeitlimit für den Befehl angeben, der die Prozedur in dem von Ihnen verwendeten Datenprovider wie ADO.NET ausführt.

    
Chris Tybur 01.09.2009 00:44
quelle
3

Warte - die eigentliche Frage ist: "Was passiert, was du verhindern willst?" Jeder hat sich auf die Server-Seite konzentriert, aber in Wirklichkeit wissen wir nicht, warum Sie diese Frage stellen (und es ist wichtig).

Und noch ein "Warum": Warum möchten Sie eine Zeitüberschreitung für eine "gespeicherte Prozedur" festlegen? Warum nicht eine Ansicht, eine Funktion oder eine Abfrage? Haben Sie den Begriff "Stored Procedure" aus einem bestimmten Grund verwendet oder wären Sie nur daran interessiert zu erfahren, wie Sie in T-SQL eine Zeitüberschreitung einstellen?

Ich frage, weil ich mich frage, ob Sie Locking-Probleme haben und vielleicht SET LOCK_TIMEOUT 1000 oder WITH (NOLOCK) möglicherweise das ist, was Sie wirklich brauchen. Ohne weitere Informationen kann ich nicht sagen. Wenn du uns mehr Feedback geben kannst, warum du fragst, was passiert und was letztendlich passieren soll, wenn deine "Auszeit" erreicht ist, können wir vielleicht mehr helfen.

Bottom line: Ja, Sie können ein Timeout in T-SQL setzen und ja, Sie können die Ausführung einer gespeicherten Prozedur mit T-SQL stoppen. Aber ich weiß nicht genug über das, was Sie Ratschläge geben möchten, wo Sie suchen oder Ihnen mehr Informationen geben können. Ich habe ein bisschen Angst, dass ich schon zu viel gesagt habe:)

    
Scott Whigham 03.09.2009 16:10
quelle
1

Dieser Artikel enthält eine sehr gute Erklärung zu Abfragetimeouts und deren Bedeutung ist nur ein clientseitiges Konzept. Sie können das Abfragetimeout im SQL Server-Verwaltungsstudio über das Menü Extras | Optionen festlegen.

    
Dave Barker 01.09.2009 00:48
quelle
0

Sie müssen das Zeitlimit festlegen, wenn Sie die gespeicherte Prozedur auf dem Client ausführen. So weit der SQL Server geht, lässt er die gespeicherte Prozedur für immer laufen, es sei denn, sie wird aufgefordert, sie abzubrechen.

    
mrdenny 01.09.2009 03:08
quelle