none
Frage zu einer SQL Blockade RRS feed

  • 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

    Donnerstag, 29. November 2012 13:00

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

    Donnerstag, 29. November 2012 13:53
    Beantworter

Alle Antworten