CMU SCS Carnegie Mellon Univ Dept of Computer

  • Slides: 75
Download presentation
CMU SCS Carnegie Mellon Univ. Dept. of Computer Science 15 -415/615 - DB Applications

CMU SCS Carnegie Mellon Univ. Dept. of Computer Science 15 -415/615 - DB Applications C. Faloutsos – A. Pavlo Lecture#21: Concurrency Control – Part 1 (R&G ch. 17)

CMU SCS Last Class • • Introduction to Transactions ACID Concurrency Control Crash Recovery

CMU SCS Last Class • • Introduction to Transactions ACID Concurrency Control Crash Recovery Faloutsos/Pavlo CMU SCS 15 -415/615 2

CMU SCS Last Class • For Isolation property, serial execution of transactions is safe

CMU SCS Last Class • For Isolation property, serial execution of transactions is safe but slow – We want to find schedules equivalent to serial execution but allow interleaving. • The way the DBMS does this is with its concurrency control protocol. Faloutsos/Pavlo CMU SCS 15 -415/615 3

CMU SCS Today’s Class • • Serializability Two-Phase Locking Deadlocks Lock Granularities Faloutsos/Pavlo CMU

CMU SCS Today’s Class • • Serializability Two-Phase Locking Deadlocks Lock Granularities Faloutsos/Pavlo CMU SCS 15 -415/615 4

CMU SCS Formal Properties of Schedules • Serializable Schedule: A schedule that is equivalent

CMU SCS Formal Properties of Schedules • Serializable Schedule: A schedule that is equivalent to some serial execution of the transactions. • Note: If each transaction preserves consistency, every serializable schedule preserves consistency. Faloutsos/Pavlo CMU SCS 15 -415/615 5

CMU SCS Example T 2 T 1 BEGIN A=A+100 B=B– 100 COMMIT BEGIN A=A*1.

CMU SCS Example T 2 T 1 BEGIN A=A+100 B=B– 100 COMMIT BEGIN A=A*1. 06 B=B*1. 06 COMMIT • Consider two txns: – T 1 transfers $100 from B’s account to A’s – T 2 credits both accounts with 6% interest. • Assume at first A and B each have $1000. Faloutsos/Pavlo CMU SCS 15 -415/615 6

CMU SCS Interleaving Example (Good) Schedule T 1 T 2 TIME BEGIN A=A+100 BEGIN

CMU SCS Interleaving Example (Good) Schedule T 1 T 2 TIME BEGIN A=A+100 BEGIN A=A*1. 06 B=B– 100 COMMIT B=B*1. 06 COMMIT ≡ BEGIN A=A+100 B=B– 100 COMMIT A=1166, B=954 Faloutsos/Pavlo BEGIN A=A*1. 06 B=B*1. 06 COMMIT A=1166, B=954 CMU SCS 15 -415/615 7

CMU SCS Interleaving Example (Bad) Schedule T 1 T 2 TIME BEGIN A=A+100 BEGIN

CMU SCS Interleaving Example (Bad) Schedule T 1 T 2 TIME BEGIN A=A+100 BEGIN A=A*1. 06 B=B*1. 06 COMMIT B=B– 100 COMMIT A=1166, B=960 Faloutsos/Pavlo ≢ A=1166, B=954 or A=1160, B=960 The bank lost $6! CMU SCS 15 -415/615 8

CMU SCS Formal Properties of Schedules • There are different levels of serializability: –

CMU SCS Formal Properties of Schedules • There are different levels of serializability: – Conflict Serializability – View Serializability All DBMSs support this. This is harder but allows for more concurrency. Nobody does this. Faloutsos/Pavlo CMU SCS 15 -415/615 9

CMU SCS Conflicting Operations • We need a formal notion of equivalence that can

CMU SCS Conflicting Operations • We need a formal notion of equivalence that can be implemented efficiently… – Base it on the notion of “conflicting” operations • Definition: Two operations conflict if: – They are by different transactions, – They are on the same object and at least one of them is a write. Faloutsos/Pavlo CMU SCS 15 -415/615 10

CMU SCS Conflict Serializable Schedules • Two schedules are conflict equivalent iff: – They

CMU SCS Conflict Serializable Schedules • Two schedules are conflict equivalent iff: – They involve the same actions of the same transactions, and – Every pair of conflicting actions is ordered the same way. • Schedule S is conflict serializable if: – S is conflict equivalent to some serial schedule. Faloutsos/Pavlo CMU SCS 15 -415/615 11

CMU SCS Conflict Serializability Intuition • Schedule S is conflict serializable if: – You

CMU SCS Conflict Serializability Intuition • Schedule S is conflict serializable if: – You are able to transform S into a serial schedule by swapping consecutive nonconflicting operations of different transactions. Faloutsos/Pavlo CMU SCS 15 -415/615 12

CMU SCS Conflict Serializability Intuition TIME Schedule T 1 T 2 BEGIN R(A) W(A)

CMU SCS Conflict Serializability Intuition TIME Schedule T 1 T 2 BEGIN R(A) W(A) R(B) W(B) COMMIT Serial Schedule T 1 T 2 BEGIN R(A) W(A) ≡ BEGIN R(A) W(A) R(B) W(B) COMMIT Faloutsos/Pavlo CMU SCS 15 -415/615 BEGIN R(A) W(A) R(B) W(B) COMMIT 13

CMU SCS Conflict Serializability Intuition Schedule T 1 T 2 TIME BEGIN R(A) W(A)

CMU SCS Conflict Serializability Intuition Schedule T 1 T 2 TIME BEGIN R(A) W(A) COMMIT Faloutsos/Pavlo Serial Schedule T 1 T 2 COMMIT ≢ BEGIN R(A) W(A) COMMIT CMU SCS 15 -415/615 BEGIN R(A) W(A) COMMIT 14

CMU SCS Serializability • Q: Are there any faster algorithms to figure this out

CMU SCS Serializability • Q: Are there any faster algorithms to figure this out other than transposing operations? Faloutsos/Pavlo CMU SCS 15 -415/615 15

CMU SCS Dependency Graphs • One node per txn. • Edge from Ti to

CMU SCS Dependency Graphs • One node per txn. • Edge from Ti to Tj if: Ti Tj – An operation Oi of Ti conflicts with an operation Oj of Tj and – Oi appears earlier in the schedule than Oj. • Also known as a “precedence graph” Faloutsos/Pavlo CMU SCS 15 -415/615 16

CMU SCS Dependency Graphs • Theorem: A schedule is conflict serializable if and only

CMU SCS Dependency Graphs • Theorem: A schedule is conflict serializable if and only if its dependency graph is acyclic. Faloutsos/Pavlo CMU SCS 15 -415/615 17

CMU SCS Example #1 Schedule T 1 T 2 BEGIN R(A) W(A) TIME Faloutsos/Pavlo

CMU SCS Example #1 Schedule T 1 T 2 BEGIN R(A) W(A) TIME Faloutsos/Pavlo A BEGIN T 1 R(A) W(A) R(B) W(B) COMMIT Dependency Graph T 2 B The cycle in the graph reveals the problem. The output of T 1 depends on T 2, and vice-versa. CMU SCS 15 -415/615 18

CMU SCS Example #2 – Lost Update Schedule T 1 T 2 BEGIN R(A)

CMU SCS Example #2 – Lost Update Schedule T 1 T 2 BEGIN R(A) A = A-1 Dependency Graph A BEGIN T 1 TIME R(A) A = A-1 W(A) COMMIT T 2 A W(A) COMMIT Faloutsos/Pavlo CMU SCS 15 -415/615 19

CMU SCS Example #3 – Threesome Schedule T 1 T 2 TIME BEGIN R(A)

CMU SCS Example #3 – Threesome Schedule T 1 T 2 TIME BEGIN R(A) W(A) R(B) W(B) COMMIT Faloutsos/Pavlo BEGIN R(B) W(B) COMMIT Dependency Graph T 3 BEGIN R(A) W(A) COMMIT T 1 B T 2 A T 3 CMU SCS 15 -415/615 20

CMU SCS Example #3 – Threesome • Q: Is this equivalent to a serial

CMU SCS Example #3 – Threesome • Q: Is this equivalent to a serial execution? • A: Yes (T 2, T 1, T 3) – Notice that T 3 should go after T 2, although it starts before it! Faloutsos/Pavlo CMU SCS 15 -415/615 21

CMU SCS Example #4 – Inconsistent Analysis TIME Schedule T 1 T 2 BEGIN

CMU SCS Example #4 – Inconsistent Analysis TIME Schedule T 1 T 2 BEGIN R(A) A = A-10 W(A) R(B) B = B+10 W(B) COMMIT Faloutsos/Pavlo Dependency Graph A BEGIN T 1 R(A) sum = A R(B) sum += B ECHO(sum) COMMIT T 2 B Is it possible to create a schedule similar to this that is “correct” but still not conflict serializable? CMU SCS 15 -415/615 22

CMU SCS Example #4 – Inconsistent Analysis TIME Schedule T 1 T 2 BEGIN

CMU SCS Example #4 – Inconsistent Analysis TIME Schedule T 1 T 2 BEGIN R(A) A = A-10 W(A) R(B) B = B+10 W(B) COMMIT Faloutsos/Pavlo Dependency Graph A BEGIN T 1 R(A) if(A≥ 0): sum = A cnt++ R(B) if(B≥ 0): sum += B cnt++ ECHO(cnt) COMMIT T 2 B T 2 counts the number of active accounts. CMU SCS 15 -415/615 23

CMU SCS View Serializability • Alternative (weaker) notion of serializability. • Schedules S 1

CMU SCS View Serializability • Alternative (weaker) notion of serializability. • Schedules S 1 and S 2 are view equivalent if: – If T 1 reads initial value of A in S 1, then T 1 also reads initial value of A in S 2. – If T 1 reads value of A written by T 2 in S 1, then T 1 also reads value of A written by T 2 in S 2. – If T 1 writes final value of A in S 1, then T 1 also writes final value of A in S 2. Faloutsos/Pavlo CMU SCS 15 -415/615 24

CMU SCS View Serializability Schedule T 1 T 2 T 3 TIME BEGIN R(A)

CMU SCS View Serializability Schedule T 1 T 2 T 3 TIME BEGIN R(A) BEGIN W(A) Dependency Graph A T 1 A BEGIN W(A) COMMIT Faloutsos/Pavlo COMMIT W(A) COMMIT CMU SCS 15 -415/615 A A T 3 T 2 A 25

CMU SCS View Serializability Schedule T 1 T 2 T 3 TIME BEGIN R(A)

CMU SCS View Serializability Schedule T 1 T 2 T 3 TIME BEGIN R(A) BEGIN W(A) COMMIT Schedule T 1 T 2 T 3 COMMIT W(A) COMMIT ≡ VIEW BEGIN R(A) W(A) COMMIT Allows all conflict serializable schedules + “blind writes” Faloutsos/Pavlo CMU SCS 15 -415/615 BEGIN W(A) COMMIT 26

CMU SCS Serializability • View Serializability allows (slightly) more schedules than Conflict Serializability does.

CMU SCS Serializability • View Serializability allows (slightly) more schedules than Conflict Serializability does. – But is difficult to enforce efficiently. • Neither definition allows all schedules that you would consider “serializable”. – This is because they don’t understand the meanings of the operations or the data (recall example #4) Faloutsos/Pavlo CMU SCS 15 -415/615 27

CMU SCS Serializability • In practice, Conflict Serializability is what gets used, because it

CMU SCS Serializability • In practice, Conflict Serializability is what gets used, because it can be enforced efficiently. • To allow more concurrency, some special cases get handled separately at the application level. Faloutsos/Pavlo CMU SCS 15 -415/615 28

CMU SCS Schedules All Schedules View Serializable Conflict Serializable Serial Faloutsos/Pavlo 15 -415/615 29

CMU SCS Schedules All Schedules View Serializable Conflict Serializable Serial Faloutsos/Pavlo 15 -415/615 29

CMU SCS Today’s Class • • Serializability Two-Phase Locking Deadlocks Lock Granularities Faloutsos/Pavlo CMU

CMU SCS Today’s Class • • Serializability Two-Phase Locking Deadlocks Lock Granularities Faloutsos/Pavlo CMU SCS 15 -415/615 30

CMU SCS Executing with Locks TIME T 1 T 2 BEGIN X-LOCK(A) R(A) W(A)

CMU SCS Executing with Locks TIME T 1 T 2 BEGIN X-LOCK(A) R(A) W(A) UNLOCK(A) Granted (T 1→A) Released (T 1→A) BEGIN X-LOCK(A) W(A) UNLOCK(A) S-LOCK(A) R(A) UNLOCK(A) COMMIT Faloutsos/Pavlo Lock Manager CMU SCS 15 -415/615 Granted (T 2→A) Released (T 2→A) Granted (T 1→A) Released (T 1→A) 31

CMU SCS Two-Phase Locking • Phase 1: Growing – Each txn requests the locks

CMU SCS Two-Phase Locking • Phase 1: Growing – Each txn requests the locks that it needs from the DBMS’s lock manager. – The lock manager grants/denies lock requests. • Phase 2: Shrinking – The txn is allowed to only release locks that it previously acquired. It cannot acquire new locks. Faloutsos/Pavlo CMU SCS 15 -415/615 32

CMU SCS Two-Phase Locking • The txn is not allowed to acquire/upgrade locks after

CMU SCS Two-Phase Locking • The txn is not allowed to acquire/upgrade locks after the growing phase finishes. Transaction Lifetime Growing Phase Faloutsos/Pavlo Shrinking Phase TIME CMU SCS 15 -415/615 33

CMU SCS Two-Phase Locking • The txn is not allowed to acquire/upgrade locks after

CMU SCS Two-Phase Locking • The txn is not allowed to acquire/upgrade locks after the growing phase finishes. Transaction Lifetime 2 PL Violation! Growing Phase Faloutsos/Pavlo Shrinking Phase TIME CMU SCS 15 -415/615 34

CMU SCS Executing with 2 PL TIME T 1 T 2 BEGIN X-LOCK(A) R(A)

CMU SCS Executing with 2 PL TIME T 1 T 2 BEGIN X-LOCK(A) R(A) W(A) Granted (T 1→A) BEGIN X-LOCK(A) R(A) UNLOCK(A) COMMIT Denied! Released (T 1→A) W(A) UNLOCK(A) COMMIT Faloutsos/Pavlo Lock Manager CMU SCS 15 -415/615 Granted (T 2→A) Released (T 2→A) 35

CMU SCS Two-Phase Locking • 2 PL on its own is sufficient to guarantee

CMU SCS Two-Phase Locking • 2 PL on its own is sufficient to guarantee conflict serializability (i. e. , schedules whose precedence graph is acyclic), but, it is subject to cascading aborts. Faloutsos/Pavlo CMU SCS 15 -415/615 36

CMU SCS 2 PL – Cascading Aborts TIME Schedule T 1 T 2 BEGIN

CMU SCS 2 PL – Cascading Aborts TIME Schedule T 1 T 2 BEGIN X-LOCK(A) X-LOCK(B) R(A) W(A) UNLOCK(A) X-LOCK(A) R(A) W(A) R(B) ⋮ W(B) ABORT Faloutsos/Pavlo This is a permissible schedule in 2 PL, but we have to abort T 2 too. This is all wasted work! CMU SCS 15 -415/615 37

CMU SCS 2 PL Observations • There are schedules that are serializable but would

CMU SCS 2 PL Observations • There are schedules that are serializable but would not be allowed by 2 PL. • Locking limits concurrency. • May lead to deadlocks. • May still have “dirty reads” – Solution: Strict 2 PL Faloutsos/Pavlo CMU SCS 15 -415/615 38

CMU SCS Strict Two-Phase Locking • The txn is not allowed to acquire/upgrade locks

CMU SCS Strict Two-Phase Locking • The txn is not allowed to acquire/upgrade locks after the growing phase finishes. • Allows only conflict serializable schedules, but it is actually stronger than needed. Release all locks at end of txn. Growing Phase Faloutsos/Pavlo Shrinking Phase CMU SCS 15 -415/615 TIME 39

CMU SCS Strict Two-Phase Locking • A schedule is strict if a value written

CMU SCS Strict Two-Phase Locking • A schedule is strict if a value written by a txn is not read or overwritten by other txns until that txn finishes. • Advantages: – Does not incur cascading aborts. – Aborted txns can be undone by just restoring original values of modified tuples. Faloutsos/Pavlo CMU SCS 15 -415/615 40

CMU SCS Examples • T 1: Move $50 from Andy’s account to his bookie’s

CMU SCS Examples • T 1: Move $50 from Andy’s account to his bookie’s account. • T 2: Compute the total amount in all accounts and return it to the application. • Legend: – A → Andy’s account. – B → The bookie’s account. Faloutsos/Pavlo CMU SCS 15 -415/615 41

CMU SCS Non-2 PL Example TIME T 1 T 2 BEGIN X-LOCK(A) R(A) S-LOCK(A)

CMU SCS Non-2 PL Example TIME T 1 T 2 BEGIN X-LOCK(A) R(A) S-LOCK(A) A=A-50 W(A) UNLOCK(A) R(A) UNLOCK(A) S-LOCK(B) X-LOCK(B) R(B) UNLOCK(B) R(B) ECHO(A+B) B=B+50 COMMIT W(B) UNLOCK(B) COMMIT Initial State A=100, B=100 T 2 Output 150 42

CMU SCS 2 PL Example TIME T 1 T 2 Initial State BEGIN X-LOCK(A)

CMU SCS 2 PL Example TIME T 1 T 2 Initial State BEGIN X-LOCK(A) R(A) S-LOCK(A) A=100, B=100 A=A-50 W(A) X-LOCK(B) UNLOCK(A) R(A) S-LOCK(B) T 2 Output R(B) B=B+50 W(B) UNLOCK(B) R(B) COMMIT UNLOCK(A) UNLOCK(B) ECHO(A+B) COMMIT 200 43

CMU SCS Strict 2 PL Example TIME T 1 BEGIN X-LOCK(A) R(A) A=A-50 W(A)

CMU SCS Strict 2 PL Example TIME T 1 BEGIN X-LOCK(A) R(A) A=A-50 W(A) X-LOCK(B) R(B) B=B+50 W(B) UNLOCK(A) UNLOCK(B) COMMIT T 2 BEGIN S-LOCK(A) Initial State A=100, B=100 T 2 Output 200 R(A) S-LOCK(B) R(B) ECHO(A+B) UNLOCK(A) UNLOCK(B) COMMIT 44

CMU SCS Schedules All Schedules View Serializable Conflict Serializable Avoid Cascading Abort Faloutsos/Pavlo Strict

CMU SCS Schedules All Schedules View Serializable Conflict Serializable Avoid Cascading Abort Faloutsos/Pavlo Strict 2 PL Serial 15 -415/615 45

CMU SCS Today’s Class • • Serializability Two-Phase Locking Deadlocks Lock Granularities Faloutsos/Pavlo CMU

CMU SCS Today’s Class • • Serializability Two-Phase Locking Deadlocks Lock Granularities Faloutsos/Pavlo CMU SCS 15 -415/615 46

CMU SCS It Just Got Real, Son TIME T 1 Faloutsos/Pavlo T 2 BEGIN

CMU SCS It Just Got Real, Son TIME T 1 Faloutsos/Pavlo T 2 BEGIN X-LOCK(A) S-LOCK(B) R(B) S-LOCK(A) R(A) X-LOCK(B) CMU SCS 15 -415/615 Lock Manager Granted (T 1→A) Granted (T 2→B) Denied! 47

CMU SCS Deadlocks • Deadlock: Cycle of transactions waiting for locks to be released

CMU SCS Deadlocks • Deadlock: Cycle of transactions waiting for locks to be released by each other. • Two ways of dealing with deadlocks: – Deadlock detection – Deadlock prevention Faloutsos/Pavlo CMU SCS 15 -415/615 48

CMU SCS Deadlock Detection • The DBMS creates a waits-for graph: – Nodes are

CMU SCS Deadlock Detection • The DBMS creates a waits-for graph: – Nodes are transactions – Edge from Ti to Tj if Ti is waiting for Tj to release a lock • The system periodically check for cycles in waits-for graph. Faloutsos/Pavlo CMU SCS 15 -415/615 49

CMU SCS Deadlock Detection TIME Schedule T 1 T 2 Waits-for Graph T 3

CMU SCS Deadlock Detection TIME Schedule T 1 T 2 Waits-for Graph T 3 BEGIN S-LOCK(A) S-LOCK(D) X-LOCK(B) S-LOCK(C) S-LOCK(B) T 1 T 2 T 3 X-LOCK(C) X-LOCK(A) Faloutsos/Pavlo CMU SCS 15 -415/615 50

CMU SCS Deadlock Detection • How often should we run the algorithm? • How

CMU SCS Deadlock Detection • How often should we run the algorithm? • How many txns are typically involved? • What do we do when we find a deadlock? Faloutsos/Pavlo CMU SCS 15 -415/615 51

CMU SCS Deadlock Handling • Q: What do we do? • A: Select a

CMU SCS Deadlock Handling • Q: What do we do? • A: Select a “victim” and rollback it back to break the deadlock. Faloutsos/Pavlo CMU SCS 15 -415/615 52

CMU SCS Deadlock Handling • Q: Which one do we choose? • A: It

CMU SCS Deadlock Handling • Q: Which one do we choose? • A: It depends… – By age (lowest timestamp) – By progress (least/most queries executed) – By the # of items already locked – By the # of txns that we have to rollback with it • We also should consider the # of times a txn has been restarted in the past. Faloutsos/Pavlo CMU SCS 15 -415/615 53

CMU SCS Deadlock Handling • Q: How far do we rollback? • A: It

CMU SCS Deadlock Handling • Q: How far do we rollback? • A: It depends… – Completely – Minimally (i. e. , just enough to release locks) Faloutsos/Pavlo CMU SCS 15 -415/615 54

CMU SCS Deadlock Prevention • When a txn tries to acquire a lock that

CMU SCS Deadlock Prevention • When a txn tries to acquire a lock that is held by another txn, kill one of them to prevent a deadlock. • No waits-for graph or detection algorithm. Faloutsos/Pavlo CMU SCS 15 -415/615 55

CMU SCS Deadlock Prevention • Assign priorities based on timestamps: – Older → higher

CMU SCS Deadlock Prevention • Assign priorities based on timestamps: – Older → higher priority (e. g. , T 1 > T 2) • Two different prevention policies: – Wait-Die: If T 1 has higher priority, T 1 waits for T 2; otherwise T 1 aborts (“old wait for young”) – Wound-Wait: If T 1 has higher priority, T 2 aborts; otherwise T 1 waits (“young wait for old”) Faloutsos/Pavlo CMU SCS 15 -415/615 56

CMU SCS Deadlock Prevention T 1 T 2 BEGIN X-LOCK(A) ⋮ ⋮ T 1

CMU SCS Deadlock Prevention T 1 T 2 BEGIN X-LOCK(A) ⋮ ⋮ T 1 Wound-Wait T 1 waits T 2 aborted Wait-Die Wound-Wait T 2 aborted T 2 waits T 2 BEGIN X-LOCK(A) ⋮ Faloutsos/Pavlo Wait-Die CMU SCS 15 -415/615 57

CMU SCS Deadlock Prevention • Q: Why do these schemes guarantee no deadlocks? •

CMU SCS Deadlock Prevention • Q: Why do these schemes guarantee no deadlocks? • A: Only one “type” of direction allowed. • Q: When a transaction restarts, what is its (new) priority? • A: Its original timestamp. Why? Faloutsos/Pavlo CMU SCS 15 -415/615 58

CMU SCS Today’s Class • • Serializability Two-Phase Locking Deadlocks Lock Granularities Faloutsos/Pavlo CMU

CMU SCS Today’s Class • • Serializability Two-Phase Locking Deadlocks Lock Granularities Faloutsos/Pavlo CMU SCS 15 -415/615 59

CMU SCS Lock Granularities • When we say that a txn acquires a “lock”,

CMU SCS Lock Granularities • When we say that a txn acquires a “lock”, what does that actually mean? – On an Attribute? Tuple? Page? Table? • Ideally, each txn should obtain fewest number of locks that is needed… Faloutsos/Pavlo CMU SCS 15 -415/615 60

CMU SCS Database Lock Hierarchy Database Table 1 Tuple 1 Attr 1 Faloutsos/Pavlo Table

CMU SCS Database Lock Hierarchy Database Table 1 Tuple 1 Attr 1 Faloutsos/Pavlo Table 2 … Tuple 2 Attr 2 … CMU SCS 15 -415/615 Tuple n Attr n 61

CMU SCS Example • T 1: Get the balance of Andy’s shady offshore bank

CMU SCS Example • T 1: Get the balance of Andy’s shady offshore bank account. • T 2: Increase Christos’ bank account balance by 1%. • Q: What locks should they obtain? Faloutsos/Pavlo CMU SCS 15 -415/615 62

CMU SCS Example • Q: What locks should they obtain? • A: Multiple –

CMU SCS Example • Q: What locks should they obtain? • A: Multiple – Exclusive + Shared for leafs of lock tree. – Special Intention locks for higher levels Faloutsos/Pavlo CMU SCS 15 -415/615 63

CMU SCS Intention Locks • Intention locks allow a higher level node to be

CMU SCS Intention Locks • Intention locks allow a higher level node to be locked in S or X mode without having to check all descendent nodes. • If a node is in an intention mode, then explicit locking is being done at a lower level in the tree. Faloutsos/Pavlo CMU SCS 15 -415/615 64

CMU SCS Intention Locks • Intention-Shared (IS): Indicates explicit locking at a lower level

CMU SCS Intention Locks • Intention-Shared (IS): Indicates explicit locking at a lower level with shared locks. • Intention-Exclusive (IX): Indicates locking at lower level with exclusive or shared locks. Faloutsos/Pavlo CMU SCS 15 -415/615 65

CMU SCS Intention Locks • Shared+Intention-Exclusive (SIX): The subtree rooted by that node is

CMU SCS Intention Locks • Shared+Intention-Exclusive (SIX): The subtree rooted by that node is locked explicitly in shared mode and explicit locking is being done at a lower level with exclusive-mode locks. Faloutsos/Pavlo CMU SCS 15 -415/615 66

CMU SCS Compatibility Matrix T 2 Wants T 1 Holds IS IX S SIX

CMU SCS Compatibility Matrix T 2 Wants T 1 Holds IS IX S SIX X Faloutsos/Pavlo IS IX S SIX X ✔ ✔ X X X ✔ X X X X X CMU SCS 15 -415/615 67

CMU SCS Example – Two-level Hierarchy Read Andy’s record in R. Update Christos’ record

CMU SCS Example – Two-level Hierarchy Read Andy’s record in R. Update Christos’ record in R. T 1 T 2 T 1 IS T 2 T 1 IX S Tuple 1 Table R T 2 X Tuple 2 … Read Faloutsos/Pavlo Tuple n Write CMU SCS 15 -415/615 68

CMU SCS Example – Threesome • Assume three txns execute at same time: –

CMU SCS Example – Threesome • Assume three txns execute at same time: – T 1: Scan R and update a few tuples. – T 2: Read a single tuple in R. – T 3: Scan all tuples in R. Table R Tuple 1 Faloutsos/Pavlo Tuple 2 … CMU SCS 15 -415/615 Tuple n 69

CMU SCS Example – Threesome Scan R and update a few tuples. Scan all

CMU SCS Example – Threesome Scan R and update a few tuples. Scan all tuples in R. T 1 T 2 IS S Faloutsos/Pavlo T 2 T 3 SIX T 2 T 3 Read a single tuple in R. S Table R T 1 X Tuple 1 Tuple 2 Read … CMU SCS 15 -415/615 Tuple n Read+Write Read 70

CMU SCS Multiple Lock Granularities • Useful in practice as each txn only needs

CMU SCS Multiple Lock Granularities • Useful in practice as each txn only needs a few locks. • Intention locks help improve concurrency: – Intention-Shared (IS): Intent to get S lock(s) at finer granularity. – Intention-Exclusive (IX): Intent to get X lock(s) at finer granularity. – Shared+Intention-Exclusive (SIX): Like S and IX at the same time. Faloutsos/Pavlo CMU SCS 15 -415/615 71

CMU SCS Locking in Practice • You typically don’t set locks manually. • Sometimes

CMU SCS Locking in Practice • You typically don’t set locks manually. • Sometimes you will need to provide the DBMS with hints to help it to improve concurrency. • Also useful for doing major changes. Faloutsos/Pavlo CMU SCS 15 -415/615 72

CMU SCS LOCK TABLE Postgres LOCK TABLE <table> IN <mode> MODE; My. SQL LOCK

CMU SCS LOCK TABLE Postgres LOCK TABLE <table> IN <mode> MODE; My. SQL LOCK TABLE <table> <mode>; • Explicitly locks a table. • Not part of the SQL standard. – Postgres Modes: SHARE, EXCLUSIVE – My. SQL Modes: READ, WRITE Faloutsos/Pavlo CMU SCS 15 -415/615 73

CMU SCS SELECT. . . FOR UPDATE SELECT * FROM <table> WHERE <qualification> FOR

CMU SCS SELECT. . . FOR UPDATE SELECT * FROM <table> WHERE <qualification> FOR UPDATE; • Perform a select and then sets an exclusive lock on the matching tuples. • Can also set shared locks: – Postgres: FOR SHARE – My. SQL: LOCK IN SHARE MODE Faloutsos/Pavlo CMU SCS 15 -415/615 74

CMU SCS Concurrency Control Summary • Conflict Serializability ↔ Correctness • Automatically correct interleavings:

CMU SCS Concurrency Control Summary • Conflict Serializability ↔ Correctness • Automatically correct interleavings: – Locks + protocol (2 PL, S 2 PL. . . ) – Deadlock detection + handling – Deadlock prevention Faloutsos/Pavlo CMU SCS 15 -415/615 75