You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: samenvatting.md
+55-2
Original file line number
Diff line number
Diff line change
@@ -710,10 +710,63 @@ Twee roosters zijn __view equivalent__ als
710
710
- en de laatste write moet hetzelfde is
711
711
712
712
## Concurrentiecontrole
713
+
Het is niet altijd mogelijk om een rooster te serializeren of dit te testen. Daarom worden er enkele regels (protocols) gebruikt om serializeerbaarheid te verzekeren.
714
+
713
715
### Vergrendeling (locking)
714
-
### Tijdstempels en multiversie-technieken
716
+
717
+
Een slot beperkt toegang tot een element.
718
+
719
+
Het eenvoudigste soort slot is een __binair slot__ dat meer twee toestanden heeft (wel/geen toegang).
720
+
Bij een binair slot moet iedere transactie wachten tot het slot vrij is en het slot vrij geven als de transactie klaar is.
721
+
722
+
Een __read/write lock__ of __gedeeld/exclusief slot__ heeft drie toestanden en kan lezen en schrijven apart beperken. Een transactie mag altijd lezen als er het de staat van het slot gedeeld is. Om de schrijven moet de transactie exclusieve toegang hebben.
723
+
724
+
Met deze regels alleen wordt geen serialiseerbaarheid gegarandeerd.
725
+
726
+
__Twee fasen vergrendeling__ is een protocol waarbij een transactie eerst al zijn locks op vraagt voor een lock vrij te geven. Er zijn dus twee fases de expanding phase en de shrinking phase.
727
+
728
+
Een __deadlock__ is een situatie waarbij twee locks op elkaar wachten waardoor niets kan gebeuren.
729
+
730
+
Een variant van twee fasen vergrendeling neemt locks alvorens iets te schrijven. Dit vermijd deadlocks maar is niet altijd mogelijk. Omdat het volgende doel van een lock kan afhangen van een andere waarde.
731
+
732
+
### Tijdstempels en Multiversie-technieken
733
+
734
+
Ook tijdstempels (timestaps) zijn een techniek om deadlocks te voorkomen.
735
+
736
+
Een mogelijkheid is om enkel de oudste transactie te laten wachten op en lock.
737
+
738
+
Men kan ook gewoon wachten niet toelaten maar de transactie afbreken als die geen lock krijgt en later herstarten.
739
+
740
+
Een transactie zou ook alleen maar mogen wachten als die transactie waar op gewacht wordt niet aan het wachten is. Dit is __voorzichtig wachten__.
741
+
742
+
Er kan ook een __timeout__ zijn die een transactie afbreekt als die te lang moet wachten.
743
+
744
+
Een andere optie is om aan __deadlock detectie__ te doen. Hierbij worden deadlock niet voorkomen maar een van de processen wordt afgebroken als er een deadlock voordoet. Maar __starvation__ is hierbij een probleem als steeds hetzelfde proces afgebroken wordt.
745
+
746
+
Men kan ook deadlocks voorkomen door geen gebruik te maken van locks en enkel van tijdstempels.
747
+
748
+
Bij __multiversie__ concurrentiecontrole worden meerdere versies van een waarde bijgehouden, zo kan een oude versie nog gelezen worden.
749
+
715
750
### Optimistische concurrentiecontrole
751
+
752
+
Bij optimistische concurrentiecontrole wordt de transactie op een kopie van de data uitgevoerd en later uitgevoerd als het serialiseerbaar is. Zoniet wordt de transactie gewoon herstart.
753
+
716
754
### Granulariteit van items
717
-
### Concurrentiecontrole in SQL
755
+
Als we spreken over het lezen, schrijven of het nemen van een lock op een item kunnen we ons afvragen over wat we juist spreken.
756
+
757
+
Bij het kiezen van dit item hebben we dus een keuze we spreken over __granulaiteit__
758
+
759
+
- Database (grove granulariteit)
760
+
- bestand
761
+
- blok
762
+
- record
763
+
- veld (fijne granulariteit)
764
+
765
+
Hoe groter het item hoe minder mogelijk, hoe fijner het item hoe meer overhead.
766
+
767
+
__Intention locks__ zijn locks die een lock op lager nivewu toelaat.
0 commit comments