Avatar billede smudger Novice
08. april 2010 - 17:32 Der er 9 kommentarer og
1 løsning

Transaktioner

Jeg har foelgende SQL Saetning:

BEGIN TRANSACTION

UPDATE Users
SET UserCurrentWorkId = (laengere varende sql saetning)
WHERE UserId = @Id

COMMIT


Den laengere varende sql saetning tager ca. 5 sek.

Der maa ikke vaere 2 personer der koerer denne sql saetning samtidig. Derfor har jeg lagt den i en transaktion, men jeg tror ikke det virker. Det virker som om at "laengere varende sql saetning" bliver eksikveret samtidig og kun update delen venter paa den anden transaktion bliver faerdig. Kan dette vaere sandt og hvordan loeser jeg dette?
Avatar billede arne_v Ekspert
08. april 2010 - 17:45 #1
Hvilket transaction isolation level bruger du?
Avatar billede janus_007 Nybegynder
08. april 2010 - 22:20 #2
Eller lav det med et update join istedet :)
Avatar billede smudger Novice
12. april 2010 - 17:24 #3
arne_v>> Jeg bruger standard transactions level.


janus_007>> Vil dette saette lock paa alle tabellerne under selektering/opdatetering?
Avatar billede arne_v Ekspert
12. april 2010 - 20:06 #4
Standard er saa vidt jeg ved READ COMMITTED.

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

eller

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

(afhaengig af hvad den SELECT laver)

burde loese problemet.

Teknisk set er det ikke garanteret at der kun vil koere en af gengen, men det er garanteret at effekten paa data vil vaere som om det var.
Avatar billede smudger Novice
13. april 2010 - 17:58 #5
-- Teknisk set er det ikke garanteret at der kun vil koere en af gengen, men det er garanteret at effekten paa data vil vaere som om det var.

arne_v>>
Vil det ogsaa virke hvis hvis det update saetningen updater er noget data i "laengere varende sql saetning"?
Avatar billede arne_v Ekspert
13. april 2010 - 19:05 #6
Ja.
Avatar billede smudger Novice
25. april 2010 - 03:25 #7
Arne_v>> Lad os antage at vi saetter trans niveauet til goer serializable.

Jeg laeser foelgende om dette niveau:

Therefore, the transaction acquires a read lock for the entire table and no new rows can be inserted into it until the transaction releases the lock.

Dvs at 2 sessioner kan godt laese fra disse raekker samtidig... eller har jeg misforstaaet det?
Avatar billede arne_v Ekspert
25. april 2010 - 03:37 #8
Ja.
Avatar billede smudger Novice
29. april 2010 - 22:58 #9
svar => point.
Avatar billede arne_v Ekspert
30. april 2010 - 01:22 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester