Welcome to Sign in | Help

Re: Blocaje

  •  10-29-2008, 10:17 AM

    Re: Blocaje

    step:
    situatia 1: era un view (select), o procedura stocata ( select ) si mai era o procedura stocata care facea insert si care avea begin tran ... pe server primele doua nu era un tranzactie , in client -nu aveam tranzactie (cel putin in ultimele versiuni ale mele) toate cele 3 procese erau pe server in blocaj si cand a eliminat primele doua -s-a deblocat si al 3 proces situatia


    Potzi sa ne spui ce methodologie ai avut cind ai investigat blocajele respective? Cum ai vazut ca 3 procese sint blocate, cum ai eliminat primele 2 etc etc.
    Fara sa ne spui detaliile ne ramine doar sa ghicim ce ai facut. Un scenariu ar fi ca te-ai conectat cu SSMS, ai rulat sp_who, sp_who2 sau altceva asemanator, ai vazut ca 3 procese erau 'blocate'. Asta ar insemna ca in coloana BlkBy exista ceva. Sa zicem ca ai vazut ca SPID 51 (selectul), 52 (procedura) si 53 (insertul) erau 'blocate', deci aveau o valoare in BlkBy.  Cine le bloca? Era o relatie circulara (51 si 52 blocate de 53, 53 blocate de 51 de ex care ar insemna un deadlock) ? Erau intr-o relatie lineara (51 blocat de 53 si 53 blocat de 52 de ex) si in acest caz, cine il bloca pe ultimul din serie? Erau blocate de un al 4-lea SPID (si in acest caz cine era acest al 4-lea spid si ce facea)?

    Pina nu stim astfel de detalii toate sfaturile care le vei primi vor fi banuieli si incercari. E drept, venind de la niste oameni cu experienta si care au sansa (mare) sa nimereasca exact problema, dar la fel de bine ne putem invirti in cerc o saptamina fara nici un progress.

    Eu in primul rind tzi-as recomanda sa urmezi metodologia descrisa in KB 271509 'How to monitor blocking in SQL Server'. Instaleaza procedura sp_blocker_pss80 din articol si urmeaza sfaturile de acolo despre cum sa o rulezi periodic si apoi vezi daca procedura indica vreun batch ca fiind mereu cauza blocarilor, si putem continua de acolo.

    Si nu in ultimul rind ia in considerare ca exista si altfel de blocaje decit cele cauzate de locks. In primul rind exista blocaje cauzate de filegrowth cind bazat ta de date sau log-ul sau umplut si sint periodic expandate. Uitate in perfmon counters pentru database ca sa vezi daca exista 'Log Growths' (select * from sys.dm_os_performance_counters where counter_name = 'Log Growths') sau daca exista database grow events (astea trebuie sa le cautzi in ERRORLOG din pacate). Alte cauza care pot genera blocaje pot fi limitari de resurse: memorie (caz in care in ERRORLOG ar aparea erori 701 sau 801/802), CPU (caz in care in work_queue_count in sys.dm_os_schedulers ar incepe sa creasca), retea (daca clientul nu proceseaza suficient de rapid resultatele). Script-ul de la KB 271509 poate identifica toate aceste cazuri din fericire.

    Cit despre dirty reads si NOLOCK, daca asta e ce doresti dezinstaleaza SQL acuma si treci la MS Access.



    http://rusanu.com
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems