Benutzer mit den meisten Antworten
Frage zu einer SQL Blockade

Frage
-
Guten Tag,
ich hatte grade bei einem Kunden SQl Blockade (SQl Server 2008 Enterprise 64 bit).
Gesehen habe ich das über sp_who blkby.
Das Statement was blockiert hat, war:UPDATE sql_queue SET sqe_process_date = { ts '2012-11-29 13:34:18' }, sqe_state = 1 WHERE PKsqe_id = 8186077
Das Statement, was blockiert wurde, war
DECLARE @num integer SET NOCOUNT ON EXEC @num = sp_GetOneNumber @loc_id=127, @token='invoice' SELECT @num SET NOCOUNT OFF
Die Definition der sp_getonenumber is:
ALTER PROCEDURE [dbo].[sp_GetOneNumber] @loc_id INT, @token VARCHAR(40) ASBEGIN DECLARE @num INTEGER -- Existiert für den Standort ein eigener Nummernkreis? IF EXISTS(SELECT PKnum_id FROM dbo.numbers WHERE num_token = @token AND FKnum_loc_id = @loc_id) BEGIN -- Ja, Nummernkreis des Standorts verwenden UPDATE dbo.numbers WITH (READCOMMITTED) SET @num = num_value = num_value + 1 WHERE num_token = @token AND FKnum_loc_id = @loc_id IF @@ROWCOUNT = 0 GOTO on_error RETURN @num END ELSE BEGIN -- Nein, allgemeinen Nummernkreis verwenden UPDATE dbo.numbers WITH (READCOMMITTED) SET @num = num_value = num_value + 1 WHERE num_token = @token AND FKnum_loc_id = -1 --@loc_id IF @@ROWCOUNT = 0 GOTO on_error RETURN @num END on_error: RAISERROR ('sp_GetOneNumber failed ! No record found. Token:%s Id:%d', 11, 1, @token, @loc_id)END
Die Tabelle sql_queue und numbers haben nichts miteinander zu tun, es bestehen keine Verbindungen.
Wenn die aber keine Verbindung haben, wie kann es sein, dass die eine die andere blockiert.
Bin wie immer für jeden Hinweis dankbar.
Grüße aus Berlin
Gregor Schönhard
Antworten
-
Hallo Gregor,
da die Prozedur von der Funktion her Teil eines Ausführungsstapels ist:
Wird die sql_queue in einer früheren / späteren Anweisung angesprochen?Und wie sind die Transaktionen gekapselt, die dort ablaufen?
Detaillierte Informationen zu Sperren kann Erland Sommarskogs beta_lockinfo liefern.
Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 19. Dezember 2012 14:54
Alle Antworten
-
Hallo Gregor,
da die Prozedur von der Funktion her Teil eines Ausführungsstapels ist:
Wird die sql_queue in einer früheren / späteren Anweisung angesprochen?Und wie sind die Transaktionen gekapselt, die dort ablaufen?
Detaillierte Informationen zu Sperren kann Erland Sommarskogs beta_lockinfo liefern.
Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 19. Dezember 2012 14:54
-
Hallo Kaperto Admin,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.