Due transazioni di tipo REPEATABLE READ che fanno, si accodano oppure ...

giovedì 25 febbraio 2010 - 13.24

ridaria Profilo | Expert

Domanda.

Supponiamo che sullo stesso dtabase mentre una transazione di tipo REPEATABLE READè in corso ne arriva un'altra dello stesso tipo, sugli stessi dati, che cosa accade alla seconda transazione.

Si accoda alla prima e poi viene eseguita, oppure viene respinta ed annullata con generazione di errore?


Grazie a tutti

Riccardo D'Aria

lbenaglia Profilo | Guru

>Supponiamo che sullo stesso dtabase mentre una transazione di
>tipo REPEATABLE READè in corso ne arriva un'altra dello stesso
>tipo, sugli stessi dati, che cosa accade alla seconda transazione.
>
>Si accoda alla prima e poi viene eseguita, oppure viene respinta
>ed annullata con generazione di errore?

Dipende dal valore di LOCK_TIMEOUT:
http://msdn.microsoft.com/en-us/library/ms177413.aspx

>Grazie a tutti
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert

Ok studiato il concetto del lock_timeout
.


MA come faccio ad impostarlo ad un valore diverso da -1 visto che il mio sql lo ha impostato a -1 e cio non va bene!

Ho provato con SELECT @@lock_timeout 18000 dal managenent di sql. Il cambio è andato bene, ma la mia applicazione (software che interroga il db) continua a restare in attesa almeno 20 secondi prima di restituirmi l'errore.


Ciao Grazie

Riccardo D'Aria

lbenaglia Profilo | Guru

>Ho provato con SELECT @@lock_timeout 18000 dal managenent di
>sql. Il cambio è andato bene, ma la mia applicazione (software
>che interroga il db) continua a restare in attesa almeno 20 secondi
>prima di restituirmi l'errore.
18000ms = 18s
Il Lock Timeout si legge interrogando la variabile globale @@LOCK_TIMEOUT e si imposta con il comando SET LOCK_TIMEOUT = valore.
Inoltre è una impostazione a livello di connessione, quindi se me la imposti da SSMS la tua applicazione client continuerà ad usare -1.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert

ok innanzitutto ho scritto male ma la avevo impostata a 1800 ms, quindi ad 1, 8 secondi!

Lo avevo intuito e letto che era una impostazione a livello di connessione ecco perchè non mi funzionava e la mia applicazione client mi restava in attesa tanto tempo!


Quello che volevo sapere, pensavo tu l'avessi intuito:

come diavolo la setto?

La devo settare all'apertura di ogni connessione con il db?

Devo lanciare una query sql con una connesione aperta ogni volta che parte la mia applicazione client?

Devo lanciarla ad ogni interrogazione del database?

Grazie


Riccardo D'Aria

ridaria Profilo | Expert

ciao ci sto provando così, ma non cambia resta sempre in attesa per una 20 ina di secondi e più
m_sql = "update AnagBanche set nome=@nome,Filiale=@Filiale,IntestatarioConto=@IntestatarioConto,IBAN=@IBAN where id = " & idrec & " SET LOCK_TIMEOUT 7000;"

Ciao e Grazie

Riccardo D'Aria

ridaria Profilo | Expert

Ho risolto l'impostazione del lock timeout:


bisogna impostare:
Set Lock_Timeout tempo all'innizio della query sql

Grazie comunque.
Riccardo D'Aria
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5