DAV B04 - Databasteknik KaU - Datavetenskap - DAV B04 - MGö 193 Tekniker för concurrency control Olika slags lås (locks) Tidsstämpling (timestamps) KaU - Datavetenskap - DAV B04 - MGö 194 Binära lås 2 tillstånd, låst (locked) och olåst (unlocked) Ett lås till varje databasvariabel (post, item) X Växlar tillstånd med lock_item(x) och unlock_item(x) Viktigt att det är atomära (odelbara) operationer Om låset redan är låst läggs man i väntekö KaU - Datavetenskap - DAV B04 - MGö 195 Karlstads Universitet, Datavetenskap 1
Regler för lås lock_item(x) innan någon read_item(x) eller write_item(x) utförs i T unlock_item(x) efter att alla read_item(x) eller write_item(x) utförts i T KaU - Datavetenskap - DAV B04 - MGö 196 Regler för lås lock_item(x) om den redan har ett lås på X unlock_item(x) om den inte har ett lås på X KaU - Datavetenskap - DAV B04 - MGö 197 Regler för lås Reglerna garanterar att högst en transaktion i taget kan låsa en variabel! I databashanteraren finns en tabell där man för varje lås anger < data item, LOCK, transaktion som håller låset > KaU - Datavetenskap - DAV B04 - MGö 198 Karlstads Universitet, Datavetenskap 2
Delade/exklusiva lås Shared/Exclusive (or Read/Write) Locks Läsning av samma datapost kan tillåtas för flera transaktioner, låset kan delas, en räknare vet hur många transaktioner som låst (läser) samma post 3 tillstånd, read-locked, write-locked och unlocked KaU - Datavetenskap - DAV B04 - MGö 199 Regler för delade/exklusiva lås read_lock(x) eller write_lock(x) innan någon read_item(x) utförs i T write_lock(x) innan någon write_item(x) utförs i T unlock(x) efter att alla read_item(x) och write_item(x) är utförda KaU - Datavetenskap - DAV B04 - MGö 200 Regler för delade/exklusiva lås read_lock(x) om den redan har ett lås på X write_lock(x) om den redan har ett lås på X unlock(x) om den inte har ett lås på X KaU - Datavetenskap - DAV B04 - MGö 201 Karlstads Universitet, Datavetenskap 3
Two-phase locking protocol Alla låsningar (read_lock och write_lock) föregår första unlock i transaktionen Garanterar serialiserbarhet Dock kan deadlock inträffa KaU - Datavetenskap - DAV B04 - MGö 202 Deadlock Prevention Protocols Varje transaktion förses med tidstämpel TS(T) Antag att T i försöker låsa X som redan är låst av T j Nu finns två varianter, i båda dessa varianter undviks deadlock wait-die wound-wait KaU - Datavetenskap - DAV B04 - MGö 203 wait-die Om TS(T i ) < TS(T j ), (dvs. T i är äldre än T j ) så får T i vänta annars (dvs. T i är yngre än T j ) avbryts T i (abort) och återstartas senare med samma tidstämpel KaU - Datavetenskap - DAV B04 - MGö 204 Karlstads Universitet, Datavetenskap 4
wound-wait Om TS(T i ) < TS(T j ), (dvs. T i är äldre än T j ) så avbryt T j (T i wounds T j ) och återstarta senare med samma tidstämpel annars (dvs. T i är yngre än T j ) låt T i vänta KaU - Datavetenskap - DAV B04 - MGö 205 Utan tidstämpel No waiting Om transactionen inte kan få ett lås avbryts den omedelbart och återstartas efter viss fördröjning utan att kontrollera om deadlock kommer att uppstå Cautious waiting Antag att T i försöker låsa X men att X redan är låst av T j Om T j inte är blockerad (inte väntar på någon annan låst variabel) så blockeras T i och får vänta annars avbryts T i KaU - Datavetenskap - DAV B04 - MGö 206 Deadlock Detection and Timeouts Upptäck deadlock genom att konstruera waitfor graph Deadlock omm det finns cykler i grafen Lösningar victim selection timeouts KaU - Datavetenskap - DAV B04 - MGö 207 Karlstads Universitet, Datavetenskap 5
Victim selection Någon måste offras Undvik transaktionen som gått länge och gjort många uppdateringar KaU - Datavetenskap - DAV B04 - MGö 208 Timeouts Avbryt transaktionen om den väntat för länge KaU - Datavetenskap - DAV B04 - MGö 209 Starvation En transaktion får vänta orimligt länge på grund av låg prioritet eller annat Lösningar FCFS : first-come-first-serve i väntekö Prioritet : ge högre prioritet åt den som väntat länge KaU - Datavetenskap - DAV B04 - MGö 210 Karlstads Universitet, Datavetenskap 6