Welcome to Sign in | Help
in Search

Blocaje

Last post 11-08-2008, 2:14 PM by step. 28 replies.
Page 2 of 2 (29 items)   < Previous 1 2
Sort Posts: Previous Next
  •  10-29-2008, 9:33 AM 5964 in reply to 5962

    Re: Blocaje

    step:
    procedura stocata SELECT dbo.Detalii.ProdusID, SUM(dbo.Detalii.Cantit) AS cantitE, dbo.BC.Predator FROM dbo.BC INNER JOIN dbo.Detalii ON dbo.BC.ID = dbo.Detalii.ID INNER JOIN dbo.NirD ON dbo.Detalii.ReceptieID = dbo.NirD.ID INNER JOIN dbo.NIR ON dbo.NirD.NirID = dbo.NIR.nirID WHERE (dbo.BC.AnulatDe IS NULL) GROUP BY dbo.Detalii.ProdusID, dbo.BC.Predator, dbo.NirD.NirID HAVING (dbo.Detalii.ProdusID = @produsID) AND (dbo.BC.Predator = @Predator) AND (dbo.NirD.NirID = @id) view ul SELECT SUM(dbo.Detalii.Cantit) AS Cantit, dbo.Detalii.ProdusID, dbo.Detalii.SarjaID, dbo.BC.ID, 0 AS Modif FROM dbo.Detalii INNER JOIN dbo.BC ON dbo.BC.ID = dbo.Detalii.ID GROUP BY dbo.Detalii.ProdusID, dbo.Detalii.SarjaID, dbo.BC.ID

    Dupa cite vad , amindoua folosesc aceleasi 2 tabele :Detalii si BC  - si probabil de aceea ai lock-ul ...
    E vreuna care nu trebuie sa fie executata "real-time" - de ex., am impresia ca procedura stocata este folosita pentru raportare dupa parametri ...

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  10-29-2008, 10:17 AM 5965 in reply to 5956

    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
  •  10-29-2008, 11:30 AM 5966 in reply to 5965

    Re: Blocaje

    Multam pt sfaturi;
    blocajele au fost descoperite din Activity Monitor .

    In ceea ce priveste dirty reads -pot sa il folosesc -mai ales pt situatiile statistice -pt ca nu sunt acordate permisiuni de update/delete .

  •  10-29-2008, 12:53 PM 5967 in reply to 5966

    Re: Blocaje

    step:
    In ceea ce priveste dirty reads -pot sa il folosesc -mai ales pt situatiile statistice -pt ca nu sunt acordate permisiuni de update/delete .

    Daca sunt situatii statistice ... si sunt de acum x zile ( unde x>0) poti sa te gindesti la o alta BD, in care sa replici datele la 12 noaptea ( de ex.) si sa citesti de acolo. Totusi, te-as sfatui, cum zice remus , sa dai mai multe detalii referitoare la
    step:

    blocajele au fost descoperite din Activity Monitor .


    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  10-29-2008, 12:56 PM 5968 in reply to 5967

    Re: Blocaje

    ignatandrei:

    Daca sunt situatii statistice ... si sunt de acum x zile ( unde x>0) poti sa te gindesti la o alta BD, in care sa replici datele la 12 noaptea ( de ex.) si sa citesti de acolo.

    Nu ca vreau sa fiu gica contra :) dar mai simplue sa faci un Snapshot database (create database ... as snapshot of ...)

    http://rusanu.com
  •  10-29-2008, 12:57 PM 5969 in reply to 5966

    Re: Blocaje

    step:
    Multam pt sfaturi; blocajele au fost descoperite din Activity Monitor.

    Si ce procese blocau pe cine? Coloanele 'Blocked By' si 'Blocking' in Activity Monitor.

    http://rusanu.com
  •  10-29-2008, 1:55 PM 5970 in reply to 5968

    Re: Blocaje

    rremus:
    ignatandrei:

    Daca sunt situatii statistice ... si sunt de acum x zile ( unde x>0) poti sa te gindesti la o alta BD, in care sa replici datele la 12 noaptea ( de ex.) si sa citesti de acolo.

    Nu ca vreau sa fiu gica contra :) dar mai simplue sa faci un Snapshot database (create database ... as snapshot of ...)

    scuze,Remus

    Pentru mine "replici datele " era un termen generic ... care putea insemna orice (snapshot, log shipping, database mirroring, backup and restore, solutie custom intr-o aplicatie ...) Stiu ca nu am folosit termenul corect, insa nu imi dau seama care ar fi ...

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  10-29-2008, 2:08 PM 5971 in reply to 5969

    Re: Blocaje

    ok; stau cu ochii pe Activity MOnitor;

    am lasat tranzactii explicite doar in punctele "critice"

    si astept ....


  •  10-29-2008, 6:23 PM 5974 in reply to 5971

    Re: Blocaje

    Si astept, si astept ...
    Si aflu ca cei din compania respectiva au intrat in concediu fortat cateva zile (cu criza au scazut comenzile)



  •  10-29-2008, 10:53 PM 5975 in reply to 5974

    Re: Blocaje

    step:
    Si astept, si astept ... Si aflu ca cei din compania respectiva au intrat in concediu fortat cateva zile (cu criza au scazut comenzile)

    Mda... de ce nu faci tu exact ce face aplicatia intr-o aplicatie .NET , care lanseaza 100 de thread-uri...poate reusesti sa reproduci problema.
    Pe de alta parte- iata problema rezolvata Stick out tongue

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  10-30-2008, 11:22 AM 5980 in reply to 5974

    Re: Blocaje

    step:
    Si astept, si astept ... Si aflu ca cei din compania respectiva au intrat in concediu fortat cateva zile (cu criza au scazut comenzile)

    tocmai a aparut un articol despre blocaje... vezi daca merge
    http://www.sqlservercentral.com/articles/Blocking/64474/

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  11-04-2008, 11:21 AM 6024 in reply to 5980

    Re: Blocaje

    Intru si eu in discutie, poate cu ocazia asta ma mai lamuresc. Tot probleme cu blocaje pe un server SQL 2005. Dupa indelungi cautari si incercari am facut o procedura stocata care imi returneaza informatii despre cine blocheaza si pe cine blocheaza. Problema e ca nu reusesc sa adaptez procedura sa vad exact ce parametri sunt folositi. Dau un exemplu:
    Query1:
    create table ##TblTest (SomeColumn int)
    go
    begin transaction
    insert into ##TblTest (SomeColumn) values (1)

    waitfor delay '0:01:40' /* hold the transaction open for 40 seconds */
    go
    commit transaction

    Query2:
    SELECT * FROM ##tblTest WHERE somecolumn=1

    La rularea procedurii imi apare ca primul query il blocheaza pe al doilea.Folosing sys.dm_exec_sql_text imi la al doilea proces imi afiseaza query-ul ca fiind:
    (@1 tinyint)SELECT * FROM [##tblTest] WHERE [somecolumn]=@1
    Deci, nu stiu ce valoare are @1. Am incercat si cu Inputbuffer dar tot nu afiseaza ce se intampla pentru cazurile 'real life' de ex, cand se salveaza o factura, se executa o procedura... totul e cu parametri @x

    Atasez procedura poate aveti mai multa inspiratie:

    Create PROCEDURE [dbo].[sp_GetBlockingStatus]
    AS

    BEGIN
    SET NOCOUNT ON;

    WITH Blocking(SPID, SPIDCareBlocheaza, Query, RowNo, LevelRow)
    AS
    (
    SELECT s.SPID,
    s.BlockingSPID,
    s.Definition,
    ROW_NUMBER() OVER(ORDER BY s.SPID),
    0 AS LevelRow
    FROM (SELECT s.spid, BlockingSPID = s.blocked, DatabaseName = DB_NAME(s.dbid),
    s.program_name, s.loginame, ObjectName = OBJECT_NAME(objectid,s.dbid),
    Definition = CAST(text AS VARCHAR(MAX))
    FROM sys.sysprocesses s CROSS APPLY sys.dm_exec_sql_text (sql_handle)
    WHERE s.spid > 50 ) s
    JOIN
    (SELECT s.spid, BlockingSPID = s.blocked, DatabaseName = DB_NAME(s.dbid),
    s.program_name, s.loginame, ObjectName = OBJECT_NAME(objectid,s.dbid),
    Definition = CAST(text AS VARCHAR(MAX))
    FROM sys.sysprocesses s CROSS APPLY sys.dm_exec_sql_text (sql_handle)
    WHERE s.spid > 50 ) s1 ON s.SPID = s1.BlockingSPID
    WHERE s.BlockingSPID = 0
    UNION ALL
    SELECT r.SPID,
    r.BlockingSPID,
    r.Definition,
    d.RowNo,
    d.LevelRow + 1
    FROM (SELECT s.spid, BlockingSPID = s.blocked, DatabaseName = DB_NAME(s.dbid),
    s.program_name, s.loginame, ObjectName = OBJECT_NAME(objectid,s.dbid),
    Definition = CAST(text AS VARCHAR(MAX))
    FROM sys.sysprocesses s CROSS APPLY sys.dm_exec_sql_text (sql_handle)
    WHERE s.spid > 50 ) r
    JOIN Blocking d ON r.BlockingSPID = d.SPID
    WHERE r.BlockingSPID > 0
    )
    SELECT SPID, SPIDCareBlocheaza, Query, RowNo, LevelRow FROM Blocking
    ORDER BY RowNo, LevelRow
    END
  •  11-04-2008, 11:43 AM 6026 in reply to 6024

    Re: Blocaje

    alinescoo:
    Intru si eu in discutie, poate cu ocazia asta ma mai lamuresc.

    cel mai bine este sa deschizi un nou thread...

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  11-08-2008, 2:14 PM 6105 in reply to 6026

    Re: Blocaje

    Se pare ca s-au cam rezolvat problemele

    log-ul de tranzactie era cu "steroizi" -avea o dimensiune maricica -aprox 73 G

    Dupa micsorarea lui -s-a linistit treaba.
    Dar cum a ajuns la dimensiunea asta nu am idee.

    Din cate stiu eu -planul de backup este aceelasi de ani de zile

    Bine ca s-a rezolvat ;)
    S
Page 2 of 2 (29 items)   < Previous 1 2
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems