none
LOCK TABLE/RECORD ON SQL 2005 RRS feed

  • Domanda

  • Ciao a tutti.

    Ho un problema che mi sta assilando da un po'.

    Da un cliente è installato un gestionale e una serie di applicazioni; non ho idea di come accedano al database ne se fanno uso o meno di transazioni o lock su record o tabelle.

    Ogni tanto, ieri è successo due volte nel giro di 1/2 giornata, una tabella (testedocumenti) ad uso del gestionale resta bloccata. Ne consegue che qualsiasi azione di insert viene compromessa, il gestionale si blocca in fase di salvataggio.

    Se però, da gestionale provo a modificare un record - la modifica avviene senza problemi.

    Altra cosa "interessante", il lock sembra agire a livello di record. Nella tabelle possono essere inseriti diversi record per tipo documento; solo alcuni tipi documento risultano bloccati in inserimento.

    C'è modo di capire chi e come attiva il lock sulla tabella in questione?

    Per rimuovere il lock, devo perforza riavviare il servizio di SQL o c'è un altro modo meno drastico?

    Riavviare il servizio di SQL comporta l'interruzione delle connessioni anche hai client che usano il gestionale in interrogazione; se fosse possibile vorrei evitarlo.

    Grazie.

    • Spostato Irina Turcu mercoledì 11 luglio 2012 13:34 Topic SQL Server. (Da:Sviluppo su Windows)
    martedì 10 luglio 2012 15:46

Risposte

  • Ciao Fabio,

    Da un cliente è installato un gestionale e una serie di applicazioni; non ho idea di come accedano al database ne se fanno uso o meno di transazioni o lock su record o tabelle.

    per scoprire qualcosa in più potresti utilizzare SQL Server Profiler che permette di acquisire gli eventi gli avvengono in SQL Server.

    Ogni tanto, ieri è successo due volte nel giro di 1/2 giornata, una tabella (testedocumenti) ad uso del gestionale resta bloccata. Ne consegue che qualsiasi azione di insert viene compromessa, il gestionale si blocca in fase di salvataggio.

    Se però, da gestionale provo a modificare un record - la modifica avviene senza problemi.

    Potrebbe (non conoscendo il gestionale in questione il condizionale è d'obbligo :) ) trattarsi di un lock logico che il gestionale applica e non rimuove dopo il salvataggio. Se la successiva operazione di UPDATE non controlla il lock logico va a buon fine :) perchè la transazione sul DB è stata committata correttamente.

    Per controllare eventuali lock puoi utilizzare la stored procedure beta_lockinfo di Erland Sommarskog... ti permette di scoprire da chi è bloccata una risorsa (ad esempio la tabella testedocumenti) e "chi è bloccato e da chi".

    Altra cosa "interessante", il lock sembra agire a livello di record. Nella tabelle possono essere inseriti diversi record per tipo documento; solo alcuni tipi documento risultano bloccati in inserimento.

    Anche in questo caso potrebbe trattarsi di un lock logico impostato dal gestionale oppure potrebbe esserci un Trigger che implementa/rafforza una logica. Per scoprire gli oggetti Trigger definiti su una tabella puoi utilizzare:

    EXEC sp_helptrigger 'nome_tabella'

    C'è modo di capire chi e come attiva il lock sulla tabella in questione?

    Sempre con la stored procedure beta_lockinfo.

    Ciao!


    Sergio Govoni
    SQL Server MVP
    MVP Profile: http://mvp.microsoft.com/profiles/Sergio.Govoni
    Blog: http://community.ugiss.org/blogs/sgovoni

    martedì 17 luglio 2012 23:06
    Moderatore

Tutte le risposte

  • Ciao Fabio,

    Da un cliente è installato un gestionale e una serie di applicazioni; non ho idea di come accedano al database ne se fanno uso o meno di transazioni o lock su record o tabelle.

    per scoprire qualcosa in più potresti utilizzare SQL Server Profiler che permette di acquisire gli eventi gli avvengono in SQL Server.

    Ogni tanto, ieri è successo due volte nel giro di 1/2 giornata, una tabella (testedocumenti) ad uso del gestionale resta bloccata. Ne consegue che qualsiasi azione di insert viene compromessa, il gestionale si blocca in fase di salvataggio.

    Se però, da gestionale provo a modificare un record - la modifica avviene senza problemi.

    Potrebbe (non conoscendo il gestionale in questione il condizionale è d'obbligo :) ) trattarsi di un lock logico che il gestionale applica e non rimuove dopo il salvataggio. Se la successiva operazione di UPDATE non controlla il lock logico va a buon fine :) perchè la transazione sul DB è stata committata correttamente.

    Per controllare eventuali lock puoi utilizzare la stored procedure beta_lockinfo di Erland Sommarskog... ti permette di scoprire da chi è bloccata una risorsa (ad esempio la tabella testedocumenti) e "chi è bloccato e da chi".

    Altra cosa "interessante", il lock sembra agire a livello di record. Nella tabelle possono essere inseriti diversi record per tipo documento; solo alcuni tipi documento risultano bloccati in inserimento.

    Anche in questo caso potrebbe trattarsi di un lock logico impostato dal gestionale oppure potrebbe esserci un Trigger che implementa/rafforza una logica. Per scoprire gli oggetti Trigger definiti su una tabella puoi utilizzare:

    EXEC sp_helptrigger 'nome_tabella'

    C'è modo di capire chi e come attiva il lock sulla tabella in questione?

    Sempre con la stored procedure beta_lockinfo.

    Ciao!


    Sergio Govoni
    SQL Server MVP
    MVP Profile: http://mvp.microsoft.com/profiles/Sergio.Govoni
    Blog: http://community.ugiss.org/blogs/sgovoni

    martedì 17 luglio 2012 23:06
    Moderatore
  • Ciao Sergio e grazie.

    Abbiamo più volte "sperato" di trovare la causa attraverso il profiler, ma purtroppo senza esito.

    Di trigger sulle tabelle ce ne sono diversi, il database del gestionale era stato progettato per SysBase e purtroppo le intergrità referenziali erano state implementate con dei trigger.

    C'è da dire che alcuni utenti, si sono "autocostruiti" interrogazioni (in excel/access) per estrarre delle informazioni dal gestionale. Qualcuno si è anche installato il SSMS di Sql Express collegandolo all'istanza SQL principale.

    Da quando abbiamo informato il cliente che avremmo avviato una serie di tools per monitorare gli accessi al database del gestionale, non si sono più verificati blocchi.

    Cmq la store che mi hai consigliato è estremamente interessante. Per ora ti ringrazio.

    Fabio.

    giovedì 19 luglio 2012 08:27
  • Da quando abbiamo informato il cliente che avremmo avviato una serie di tools per monitorare gli accessi al database del gestionale, non si sono più verificati blocchi.

    Eheh... questo è tipico :)

    Comunque, se l'edizione di SQL Server è 2008 (o superiore) valuta anche il tool Data Collector, nasce per monitorare le performance, ma se ti segnalano un blocco/rallentamento e non hai in quel momento SQL Profiler attivo (ed è corretto non averlo!)... non hai strumenti per indagare.

    Se hai bisogno siamo qui :)

    Ciao!


    Sergio Govoni
    SQL Server MVP
    MVP Profile: http://mvp.microsoft.com/profiles/Sergio.Govoni
    Blog: http://community.ugiss.org/blogs/sgovoni


    giovedì 19 luglio 2012 22:08
    Moderatore