Welcome to Sign in | Help

locking on update

  •  03-31-2012, 11:42 AM

    locking on update

    Salut,

    Incerc sa inteleg cum functioneaza lock impreuna cu update. Nu am reusit sa gasesc nimic care sa imi confirme teoria.

    presupunem ca am urmatorul update:

    update table set col3 = 1 where col1 = 2 and col2 = 3 and col3 = 1

    Ce se intampla under the hood atat in varianta index seek cu/fara predicate cat si in varianta index scan ?

    I. Daca se face index seek fara predicate inseamna ca se gaseste automat randul/randurile care ne intereseaza. Pentru a face seeking se pune shared lock pe randuri si dupa ce s-a obtinut result setul se trece la updlock si se face update-ul ?
    Sau se face seeking cu updlock in mod automat.

    II. Daca se face index seek cu predicate inseamna ca se gaseste un result set pe care ulterior mai aplica o filtrare pentru a obtine ce ne intereseaza. Pentru a face seeking se pune shared lock pe randuri dupa care se aplica filtrarea (tot cu shared lock) si dupa ce s-a obtinut result setul necesar se trece la updlock si se face update-ul ?
    Sau se face seeking cu shared lock si filtrarea cu updlock. Sau altfel ?

    III Dar la index scan care presupune parcurgerea tuturor inregistrarilor ? Ma indoiesc ca aici s-ar pune direct updlock.


    Intreb pentru ca intr-un mediu multithreading este posibil cumva ca threaduri complet separate sa faca acelasi update de 2 ori ? Adica dupa ce 2 sau multe threaduri fac cautarea in acelasi timp (si daca cautarea se face cu shared lock este permis acelasi lucru) obtin result setul necesar dupa care trec la update unde o sa avem un updlock si se serializeaza accesul. Oricum dat fiind ca toate thredurile au obtinut resultsetul nu mai conteaza ca updateul se face serializat... tot se face de mai multe ori.

    Ce parere aveti ?
    Mersi,
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems