Welcome to Sign in | Help
in Search

deadlock - SQL Server 2005

Last post 01-12-2009, 4:39 PM by Alex. 28 replies.
Page 1 of 2 (29 items)   1 2 Next >
Sort Posts: Previous Next
  •  12-29-2008, 4:37 PM 6471

    deadlock - SQL Server 2005

    salut,

    pe o statie cu:

    Windows Server 2000

    MS SQL Server 2005 Standard Edition

    am o gramada de deadlock-uri. Au inceput sa apara aceste deadlockuri imediat dupa ce am trecut pe sql server 2005, pe sql server 2000 nu se intampla asa ceva, chiar nu aveam deadlockuri...ce nu-i place?

    aveti idee ce trebuie sa verific?

    Max degree of paralellism cat trebuie setat? cand se umbla la setare asta? nu stiu daca are legatura dar intreb si eu?

    multumesc.

    alex.

  •  12-30-2008, 4:35 PM 6473 in reply to 6471

    Re: deadlock - SQL Server 2005

    Pai arata-ne cine cu cine face deadlock (ie. deadlock graph-ul si statement-urile implicate in deadlock) si poate putem sa te ajutam cumva.
    http://msdn.microsoft.com/en-us/library/ms178104(SQL.90).aspx

    http://rusanu.com
  •  01-02-2009, 10:11 PM 6475 in reply to 6471

    Re: deadlock - SQL Server 2005

    Asemanator am intalnit si eu
    S-a trecut de la 2000 la 2005 -
    si dupa aproximativ o luna , au inceput blocaje.

    Ulterior s-a descoperit ca log ul era cam mare vreo 70 G si dupa ce s-a micsorat - s-a "linistit" treaba

    Nu stiu daca te ajuta treaba asta , dar asta am intalnit
  •  01-05-2009, 11:20 AM 6476 in reply to 6475

    Re: deadlock - SQL Server 2005

    salut,

    nu e vorba de log, am verificat si nu este deloc mare, la o baza de 30 Gb logul are ~ 1 Gb si se executa automat la 15 minute backup de log (se fac f multe insert-uri, update-uri)

    am modificat pana la urma max degree of paralelism = 2 (serverul are 4 procesoare)

    as vrea sa las maxx degree of paralelism = 0 (default) si sa folosesc option (maxdop 2) dar nu stiu exact unde sa folosesc optiunea asta

    multumesc.

    alex.

    p.s. LMA!!!!!!

     

     

  •  01-05-2009, 12:14 PM 6477 in reply to 6476

    Re: deadlock - SQL Server 2005

    BOL is your friend...Smile...vezi "Query Hint (Transact-SQL)".
  •  01-05-2009, 12:24 PM 6478 in reply to 6477

    Re: deadlock - SQL Server 2005

    ma refer ca nu stiu exact cum sa aflu toate procedurile/locurile unde ar trebui sa folosesc optiunea asta.

    alex.

  •  01-05-2009, 3:28 PM 6479 in reply to 6476

    Re: deadlock - SQL Server 2005

    Parerea mea este ca modificind optiuni ale serverului fara nici un fel de idee de ce se produc deadlock-uri este nu contraproductiv, ci chiar daunator. Si daca nu cunosti foarte bine ce fac aceste optiuni, atunci este si mai daunator. In treacat, maxdop este exact ultimul loc unde se rezolva un deadlock.
    Deci as propune:
    1) stabileste clar daca este vorba de deadlock si nu altceva
    2) obtine graph-ul de deadlock
    3) analizeaza obiectele implicate in deadlock sau spune-ne noua despre ce e vorba ca sa te putem ajuta.

    http://rusanu.com
  •  01-05-2009, 4:06 PM 6480 in reply to 6479

    Re: deadlock - SQL Server 2005

    ai dreptate, am sa-ti urmez sfatul....revin

    multumesc

    alex.

  •  01-07-2009, 2:38 PM 6486 in reply to 6480

    Re: deadlock - SQL Server 2005

    aceste 2 proceduri "se bat cap in cap":

    CREATE PROCEDURE ChangeStatus

    @Index bigint,

    @StatusCode int,

    @MessageResponse varchar(4000)

    AS

    declare @message varchar(255),@errormessage varchar(255),@return int,@debug int

    select @return=0,@message='',@errormessage=''

    if not exists (select 1 from tbl1 where MessageCode=@Index)

    begin

    return -10300

    end

    begin tran

    update tbl1 set StatusCode = @StatusCode , MessageResponse=@MessageResponse where MessageCode=@Index

    if(@@error!=0)

    begin

    rollback tran

    return -10301

    end

    commit tran

    return @return

     

     

     

    CREATE PROCEDURE GetItemNotAuthorized

    AS

    if((select top 1 Continut from VERSIUNE where Descriere = 'STOP_TRAN_OUT') != 'TRUE')

    return 0

    declare @message varchar(255),@errormessage varchar(255),@return int,@debug int

    declare @Index bigint /*Subtransaction Code*/

    select @return=0,@message='',@errormessage=''

    select top 1 convert(bigint, MessageCode),MessageText from tbl1 where StatusCode = 1

    order by MessageCode desc

    return @return

    ceva sfaturi daca pot modifica ceva

    multumesc

    alex.

     

  •  01-07-2009, 3:03 PM 6488 in reply to 6479

    Re: deadlock - SQL Server 2005

    si mai am si eu 2 intrebari:

    1. daca deadlockul apare pt ca pe aceeasi tabela se face in acelasi timp si select si update, credeti ca ajuta cu ceva daca updateul il fac pe tabela si selectul pe tabela il fac printr-un view?

    2. la un index care e pe disable cand ii dau enable el face si rebuild (necesita timp)?

    multumesc

    alex.

  •  01-07-2009, 3:19 PM 6490 in reply to 6486

    Re: deadlock - SQL Server 2005

    Ai cumva posibilitatea sa uploadezi si deadlock graph-ul?
    Ce indexi exista pe tbl1 (inclusiv clustered-ul) ?
    Cite record-uri exista in tbl1, cite StatusCode distincte si cite recorduri au StatusCode = 1 ?

    Cel mai important ar fi sa avem deadlock graph-ul.

    Asa la o prima impresie, fara informatii suficiente, ar parea ca ce se intimpla este un conflict intre un seek pentru update pe MessageCode (index secundar) si update in cluster (StatusCode) pe de-o parte si scan pe index secundar (MessageCode) cu lookup in cluster (dupa StatusCode). Daca intr-adevar asta e problema ar putea fi rezolvata prin mutarea lui MessageCode ca prima cheie in cluster sau prin adaugarea ca included field al lui StatusCode in indexul secundar (sau chiar punerea lui StatusCode in cheia indexului, pe prima pozitie).

    http://rusanu.com
  •  01-07-2009, 3:46 PM 6491 in reply to 6490

    Re: deadlock - SQL Server 2005

    daca reusesc sa-mi dau seama cum fac rost de deadlock graph...da

    astia sunt indexii care exista pe tabela respectiva....nu am cluster

    CREATE NONCLUSTERED INDEX [iModifiedDate] ON [dbo].tbl1

    (

    [ModifiedDate] ASC

    )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

    CREATE NONCLUSTERED INDEX [iStatusCode] ON [dbo].tbl1

    (

    [StatusCode] ASC

    )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

    CREATE NONCLUSTERED INDEX [iTransactionCode] ON [dbo].tbl1

    (

    [TransactionCode] ASC

    )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

    CREATE UNIQUE NONCLUSTERED INDEX [iUniq] ON [dbo].tbl1

    (

    [MessageCode] ASC

    )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

    sunt cam 200.000 de inregistrari, 6 StatusCode distincte, in StatusCode = 1 intra inregistrarea propriu-zisa si apoi acest StatusCode trece prin toate cele 6 stari...prin update

    multumesc.

    alex.

  •  01-07-2009, 4:22 PM 6492 in reply to 6491

    Re: deadlock - SQL Server 2005

    creeaza un index clustered dupa StatusCode, MessageCode

    http://rusanu.com
  •  01-07-2009, 4:24 PM 6493 in reply to 6491

    Re: deadlock - SQL Server 2005

    si fa-i DROP la iStatusCode, probabil e inutil la cit e de neselectiv. Este folosit cumva, apare in sys.dm_db_index_usage_stats ?

    http://rusanu.com
Page 1 of 2 (29 items)   1 2 Next >
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems