Det er i en Stored Procedure jeg har det her problem. Jeg får mange requests ind og laver et tjek (en if/else) i min stored procedure som afgør om en record skal oprettes eller om den findes i forvejen.
Hvis en record findes ( IF ), skal et felt i den record tælles op med én. Hvis den ikke findes ( ELSE ) skal den oprettes.
Problemet er, at flere tråde når at spørge min procedure om der findes en record. flere af dem får svaret nej, inden den første der spurgte kommer ned og opretter en record i min ELSE. Resultatet er, at der oprettes 2-3 records hvilket giver mig problemer.
Det har fungeret fint indtil nu, jeg har først opdaget problematikken efter loaded på webserveren er steget markant.
Jeg kan naturligvis kode mig ud af det i min applikation, men jeg ville gerne have låsen nede i min Stored Procedure.
Men kan du ikke uddybe det lidt for mig? Jeg har nemlig selv tænkt tanken med transactions, men alligevel kan jeg ikke rigtig se hvordan det løser problemet. Selv om tråden kører i en transaction, kan andre tråde jo sagtens oprette en ny transaction og tilgå min stored procedure. Er det ikke rigtigt?
lad os antage at du gaar paa transaction level serializable
det betyder at alle SELECT i din transaction vil returnere det samme antal raekker og de samme data i raekkerne hvis de blev udfoert paa et senere tidspunkt i transaktionen
det goer at databasen er noedt til at forhindre andre processer i at lave insert indtil transaktionen er faerdig
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.