deadlock due to transactions within a single SPID

  • I got a deadlock scenario and so I took a snap shot of the syslockinfo table. I found out an interesting scenario where the deadlock is because of two transactions within the same spid.

    rsc_text rsc_bin rsc_valblk rsc_dbid rsc_indid rsc_objid rsc_type rsc_flag req_mode req_status req_refcnt req_cryrefcnt req_lifetime req_spid req_ecid req_ownertype req_transactionID req_transactionUOW

    1:31840 0x00060200607C00000100000000000000 0x00000000000000000000000000000000 2 0 0 6 0 5 1 1 0 0 113 0 1 96462284 00000000-0000-0000-0000-000000000000

    1:31840 0x00060200607C00000100000000000000 0x00000000000000000000000000000000 2 0 0 6 0 5 3 1 0 67108864 113 0 1 96594607 00000000-0000-0000-0000-000000000000

    For the first one the lock was granted(transactionID:96462284)

    but for the next one(transactionId:96594607) it was put in wait state and SQL server detected it as a deadlock.

    I just wanted some clarifications.

    1) what is the significance of req_transactionID column in syslockinfo table?

    2) what is the relationship between req_transactionId column and spid column?

    3) In case of nested transactions what will be the values of these 2 columns and what will be the relationship between them in that scenario?

    4) In this case the deadlock is occurring while executing a SP(the nested level of calls go till 3rd level).

    5) Will there be contention for locks between transactions within a single spid.

    it is something like this:

    sp_cache

    sp_cache1

    while

    sp_cache2

    end while

    the deadlock occurred when executing sp_cache 2.

    At that time there were only two transactionId values in the syslockinfo table for this spid,They were:

    1) 96462284

    2)96594607

    If some body could please help me it would be really helpful for me.

    Thanks in advance!!

  • Just my input.

    If an spid can execute more than one transaction, it is not weird that a deadlock is created by one spid since two transactions can lock each other.

    To avoid deadlock, we should have a better workflow in executing our scripts. Shorter transaction batches are also recommended. Proper isolation level should be set when needed some times.

  • just to add...

    also avoid using dynamic sql in your procs, because it may be executed in different context.

     

    Johan

    Learn to play, play to learn !

    Dont drive faster than your guardian angel can fly ...
    but keeping both feet on the ground wont get you anywhere :w00t:

    - How to post Performance Problems
    - How to post data/code to get the best help[/url]

    - How to prevent a sore throat after hours of presenting ppt

    press F1 for solution, press shift+F1 for urgent solution 😀

    Need a bit of Powershell? How about this

    Who am I ? Sometimes this is me but most of the time this is me

  • Here is a handy reference for the system tables to start you off:

    http://www.microsoft.com/sql/prodinfo/previousversions/systables.mspx

    RegardsRudy KomacsarSenior Database Administrator"Ave Caesar! - Morituri te salutamus."

Viewing 4 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic. Login to reply