Avatar billede hrc Mester
13. september 2010 - 12:52 Der er 5 kommentarer og
1 løsning

Blocking Transactions forts. #2

jeg troede sjang og arne_v havde løst problemet for mig, men kunden har stadig blocking-transactions (hvilket bare understreger at det er mandag i dag).

Vi satte dengang "read_committed_snapshot" til "on" men undervejs stødte jeg på et andet flag instilling, som jeg umiddelbart mener må sættes før det virker: "allow_snapshot_isolation".

Men er det tilfældet? Jeg har ikke set eksempler hvor de begge indgår.

Hvordan kan man i øvrigt se hvilke flag der er sat?
Avatar billede hrc Mester
13. september 2010 - 13:00 #1
Det ser ud til jeg skal sætte begge jvf: http://technet.microsoft.com/en-us/library/ms175095.aspx

Lader spørgsmålet stå hvis der dukker konstruktive kommentarer op.
Avatar billede HenrikSjang Nybegynder
13. september 2010 - 20:55 #2
Det burde ikke være nødvendigt at sætte ALLOW_SNAPSHOT_ISOLATION til on. Forskellen på de to er:

(Det blev en lidt lang smørre.. håber det giver mening)

SQL Serveren kører standard med READ COMMITTED isolation level, og denne har default blocking issues, hvor writer blokerer for readere. Ved at slå READ_COMMITTED_SNAPSHOT til, ændres denne opførsel, og der sker nu row level versioning, og man læser nu committed data fra et snapshot.

Der findes så også en helt anden type isolation level, som hedder SNAPSHOT ISOLATION level, og den er et niveau "grovere"/"bedre"  end bare at køre med READ_COMMITTED_SNAPSHOT sat til on.
Forskellen er, at read_committed_snapshot kun garanterer statement-level consistency, hvorimod SNAPSHOT ISOLATION garanterer batch-level consistency.
Hvis du inde i en batch 2 gange laver præcis den samme select statement mod en tabel, så kan du godt få 2 forskellige resultater, hvis der er nogen der har skrevet i tabellen imellem de to selects.
Men hvis du så explicit ændrer isolation level til snapshot isolation, så vil snapshot'et gælde over hele din batch. Dvs, at hvis du inde i en batch først laver en select fra en tabel, så gør du noget andet, og så laver du en select igen. Så vil du være garanteret, at begge resultater er ens, da snapshot'et holder dataene hele batch'en igennem.

For at bruge snapshot isolation level, skal man dog først tillade at man kan bruge den - og det er netop det som ALLOW_SNAPSHOT_ISOLATION gør. Hvis du har enablet det, vil du kunne bruge den nye isolation level sådan her:

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

Og det skal gøres hver gang du opretter en ny connection til db'en. Denne nye SNAPSHOT ISOLATION LEVEL har jeg personligt ikke set i brug nogle steder.
Avatar billede hrc Mester
13. september 2010 - 21:13 #3
sjang: Tak skal du have. Jeg forstod det, jubii! Lægger du et svar?
Avatar billede HenrikSjang Nybegynder
13. september 2010 - 22:04 #4
jep :)
Avatar billede Syska Mester
13. september 2010 - 22:08 #5
Nu er jeg bare med på en lytter ...

Overstående var en super forklaring, så meget jeg da forstår af det.

Men hrc, dit problem er vel stadig ikke løst eller ?
Avatar billede hrc Mester
14. september 2010 - 11:13 #6
Jo. Kunden var lidt hurtig på aftrækkeren. Det viste sig at dem, der passer på kundens serverpark, var kommet til at slå "min" server ned. Det var ikke mit problem da det kom til stykket.

Men jeg ville stadig gerne vide om (og forstå) ovenstående flag.

(hvorfor kan man ikke uddele points og skrive kommentarer i samme hug? Det har man da kunne tidligere)
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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