Avatar billede smudger Novice
09. april 2010 - 17:27 Der er 6 kommentarer

Row locking

Jeg har 10 SP'er, GetWork1, GetWork2, GetWork3 osv.

Lad os tage GetWork1 from eksempel:

SP'en traekker et nyt job ud af db'en. Vi er mange der bruger denne SP, men til et hvert tidspunkt maa der kun vaere een person som eksekverer SP'en.

Min ide var at goere foelgende inden i GetWork1:

Begin transaction

Update dummytabel
SET    dummycolumn = 0
where  dummyid = 'GetWork1'

/*
get next work to do
*/

commit



Goer jeg dette for flere GetWorkX, saa spaerer de for hinanden hvilket ikke er oenskeligt. Skal jeg oprette en dummytabel for hver?
Avatar billede erikjacobsen Ekspert
09. april 2010 - 17:48 #1
En rowlock er kun et hint, som mssql kan vælge skal være en pagelock. Så, ja, løsningen er nok at lave en tabel til hver.
Avatar billede smudger Novice
09. april 2010 - 19:31 #2
Det viser sig at der er en anden maade...

Hvis man saetter primarykey paa dummyid, saa virker det!!!

Grunden til dette kan ses hvis man kigger paa de locks der bliver sat med og uden primarykey. Disse typer af locks kan ses vha flg sql saetning.

SELECT * FROM sys.dm_tran_locks where resource_type != 'DATABASE'
Avatar billede Syska Mester
09. april 2010 - 19:42 #3
Ja, så får du rowlocking ... da PK er unik.
Du kunne også lave et Unik Index.

Men for at være mere interesseret i dit spm og måske selv blive klogere ... hvordan er det lige din dummytable gør så du kun kan køre en GetWorkX item af gangen ?

Jeg må have fredags syge siden jeg ik' kan se det ... er sikkert logisk.

mvh
Avatar billede Syska Mester
09. april 2010 - 19:42 #4
ohh, er det fordi den lock bliver holdt indtil commit bliver kaldt ?

mvh
Avatar billede smudger Novice
09. april 2010 - 20:35 #5
buzzzz> yes, det er derfor
Avatar billede smudger Novice
29. april 2010 - 23:05 #6
svar => point
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