Welcome to Sign in | Help

sql 2000, deadlock si index

  •  07-25-2007, 1:34 PM

    sql 2000, deadlock si index

    Am 2 tabele:

    1. X - cimp PK idx1, cimp x1(numar rinduri aprox 2.000.000)

    2. Y - cimp PK  idy1, cimp FK idx1 , cimp idz1, cimp valoare (nr rinduri aprox 3.000.000)
    792

    Am index pe FK idX1 pe tabela Y pentru rapiditate

    Am facut un  script de testare, care consta, in afara de select*uri pe X si pe Y, in urmatoarele:

    inserez in Y cu null pe idx1 de mai multe ori (maxim 10, dupa cite am observat) si cu acelasi idz1

    insert in X si  iau valoarea lui idx1

    fac update pe Y cu  idx1 obtinut where idz1 = valoareIDz1 si idx1 is null

     

    Ei, pe acest update da deadlock daca rulez 2 script-uri concurent .

    Transaction (Process ID 85) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
     

    (Cum stiu ca pe update  - dupa ce am citit pe net tot felul de tot felul despre dead=lock - cum se vad - si l-am vazut, pina la urma, din Sql Server Logs + scriind la print-uri de am turbat ... Am pus si SQL Server Profiler si am vazut si acolo liniile ...)

    Ce e ciudat este ca se updateaza doar 2-10 rinduri 

     

    Daca rulez un singur script nu da eroare

    Daca scot index-ul de pe  IdX1 de pe tabela Y - pot sa rulez si 100 de script-uri concurent  - tot nu da eroare, dar dureaza ca naiba.

     

    Stiti cumva ce as putea face -nu sa schimb codul - este ultima optiune Angry  - ca sa nu mai dea deadlock ?

     Baza de date este SQL 2000

     


    Ignat Andrei
    http://serviciipeweb.ro/iafblog
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems