|
@@ -1,7 +1,7 @@
|
|
|
# DB2 - lesson 02
|
|
|
#### Paraboschi
|
|
|
##### 12 October 2015
|
|
|
-## Concurrency Control
|
|
|
+## Concurrency Control pt.I
|
|
|
|
|
|
### Advantages of Concurrency
|
|
|
|
|
@@ -31,35 +31,39 @@ e(Tx) = end transaction x
|
|
|
|
|
|
### Problems due to concurrency
|
|
|
Given these two transactions:
|
|
|
->T1: UPDATE account
|
|
|
+```
|
|
|
+T1: UPDATE account
|
|
|
SET balance = balance + 3
|
|
|
WHERE client = 'Smith'
|
|
|
|
|
|
->T2: UPDATE account
|
|
|
+T2: UPDATE account
|
|
|
SET balance = balance + 3
|
|
|
WHERE client = 'Smith'
|
|
|
+```
|
|
|
|
|
|
#### Execution with lost UPDATE
|
|
|
As the name states, one or more changes to the data are lost.
|
|
|
The error is produced by:
|
|
|
- R1 R2 W1 W2
|
|
|
- R1 R2 W2 W1
|
|
|
-
|
|
|
-> D=100
|
|
|
- T1: R(D,V1)
|
|
|
- V1 = V1 + 3
|
|
|
- T2: R(D,V2)
|
|
|
- V2 = V2 + 6
|
|
|
- T1: W(V1,D)
|
|
|
- T2: W(V2,D)
|
|
|
- D=103
|
|
|
- D=106!
|
|
|
+```
|
|
|
+D=100
|
|
|
+T1: R(D,V1)
|
|
|
+V1 = V1 + 3
|
|
|
+T2: R(D,V2)
|
|
|
+V2 = V2 + 6
|
|
|
+T1: W(V1,D)
|
|
|
+T2: W(V2,D)
|
|
|
+D=103
|
|
|
+D=106!
|
|
|
+```
|
|
|
|
|
|
#### Dirty read
|
|
|
The read of the second transaction happen before the rollback of T1,
|
|
|
therefore a wrong value is used for T2.
|
|
|
- R1 W1 R2 abort1 W2
|
|
|
-> D=100
|
|
|
+```
|
|
|
+D=100
|
|
|
T1: R(D,V1)
|
|
|
T1: V1 = V1 + 3
|
|
|
T1: W(V1,D) D=103
|
|
@@ -67,33 +71,40 @@ T2: R(D,V2)
|
|
|
T1: ROLLBACK
|
|
|
T2: V2 = V2 + 6
|
|
|
T2: W(V2,D) D=109!
|
|
|
+```
|
|
|
|
|
|
#### Nonrepeatable read
|
|
|
The first read (to V1) and the second read (to V3) of the same value D give different results because D is changed in the meantime.
|
|
|
- R1 R2 W2 R1
|
|
|
->D=100
|
|
|
+```
|
|
|
+D=100
|
|
|
T1: R(D,V1)
|
|
|
T2: R(D,V2)
|
|
|
T2: V2 = V2 + 6
|
|
|
T2: W(V2,D) D=106
|
|
|
T1: R(D,V3) V3<>V1!
|
|
|
+```
|
|
|
|
|
|
#### Ghost update
|
|
|
T1 reads X and Y, T2 writes Y and Z, T1 has still the old value of Y.
|
|
|
- R1 R1 R2 R2 W2 W2 R1
|
|
|
-> X+Y+Z=100, X=50, Y=30, Z=20
|
|
|
+```
|
|
|
+X+Y+Z=100, X=50, Y=30, Z=20
|
|
|
T1: R(X,V1), R(Y,V2)
|
|
|
T2: R(Y,V3), R(Z,V4)
|
|
|
T2: V3 = V3 + 10, V4=V4-10
|
|
|
T2: W(V3,Y), W(V4,Z) (Y=40, Z=10)
|
|
|
T1: R(Z,V5) (for T1, V1+V2+V5=90!)
|
|
|
+```
|
|
|
|
|
|
#### Phantom insert
|
|
|
This anomaly is due to the insertion of a "phantom" tuple that satisfies the conditions of a previous query.
|
|
|
- R1 W2 (new data) R1
|
|
|
->T1: C=AVG(B:A=1)
|
|
|
+```
|
|
|
+T1: C=AVG(B:A=1)
|
|
|
T2: Insert (A=1,B=2)
|
|
|
T1: C=AVG(B: A=1)
|
|
|
+```
|
|
|
|
|
|
### Schedule
|
|
|
Sequence of input/output operations performed by concurrent transactions.
|
|
@@ -110,9 +121,9 @@ $r_2,w_2\in T_2$
|
|
|
- __Serial schedule__: the actions of each transaction occur in contiguous sequences
|
|
|
- __Serializable schedule__: Produces the same results as some serial schedule on the same transactions (by *schedule equivalence*)
|
|
|
- The class of acceptable schedules produced by a scheduler depends on the cost of equivalence checking, because scheduling must happen in real-time and the more is optimized my sheduling the more computational power I will need to obtain it.
|
|
|
-### CSR and VSR
|
|
|
+## CSR and VSR
|
|
|
$CSR\subset VSR$
|
|
|
-#### View-serializability
|
|
|
+### View-serializability
|
|
|
###### NOTE: what is a read-from operation?
|
|
|
- $r_i(x)$ *reads-from* $w_j(x)$ in a schedule S when $w_j(x)$ precedes $r_i(x)$ in S and there is no $w_k(x)$ between $r_i(x)$ and $w_j(x)$ in S
|
|
|
|
|
@@ -132,7 +143,7 @@ But is vast and costly to evaluate
|
|
|
#### CSR
|
|
|
Is a subset of VSR solutions, used because it contains costs.
|
|
|
|
|
|
-##### Example of View-serializability
|
|
|
+#### Example of View-serializability
|
|
|
```
|
|
|
S3: w0(x) r2(x) r1(x) w2(x) w2(z)
|
|
|
S4: w0(X) r1(x) r2(x) w2(x) w2(z)
|
|
@@ -150,7 +161,7 @@ Meanwhile S5 and S6 are view serializable because in both schedules:
|
|
|
- r2(x) reads from w1(x)
|
|
|
- w1(z) is the final write
|
|
|
|
|
|
-##### Another Example
|
|
|
+#### Another Example
|
|
|
```
|
|
|
S7: r1(x) r2(x) w1(x) w2(x)
|
|
|
S8: r1(X) r2(x) w2(x) r1(x)
|
|
@@ -162,22 +173,25 @@ S9: r1(x) r1(y) r2(z) r2(y) w2(y) w2(z) r1(z)
|
|
|
- S9 correspond to a ghost update
|
|
|
- They are all non view serializable
|
|
|
|
|
|
-##### Complexity
|
|
|
+#### Complexity
|
|
|
Deciding view-equivalence of two given schedules can be done in polynomial time
|
|
|
Deciding View-serializability of a generic schedule is a NP-complete problem
|
|
|
|
|
|
-#### CSR
|
|
|
+### CSR
|
|
|
|
|
|
-An action ai is conflicting with aj (i!=j) if both are operations on common data and at least one of them is a write operation.
|
|
|
+An action ai is __conflicting__ with aj (i!=j) if both are operations on common data and at least one of them is a write operation.
|
|
|
- read-write conflicts (rw, wr)
|
|
|
- write-write conflicts (ww)
|
|
|
|
|
|
-Two schedules are conflict-equivalent if they contain the same operations and all conflicting operation pair occur in the same order.
|
|
|
-One schedule is conflict-serializable if it is conflict-equivalent to a serial schedule.
|
|
|
+__Conflict-equivalent schedules__ $S_i\approx_c S_j$:
|
|
|
+- $S_i$ and $S_J$ contain the same operations
|
|
|
+- all conficting operations pairs occur in the same order
|
|
|
+
|
|
|
+One schedule is __conflict-serializable__ if it is *conflict-equivalent* to a serial schedule.
|
|
|
|
|
|
CSR is the set of conflict-equivalent schedules.
|
|
|
|
|
|
-##### CSR and VSR
|
|
|
+#### CSR and VSR
|
|
|
|
|
|
Every conflict-serializable schedule is also view-serializable, but the converse is not necessarily true
|
|
|
|
|
@@ -188,11 +202,3 @@ Let S1 and S2 be two conflict-equivalent schedules:
|
|
|
- They have the same reads-from relations, if they didn't, there would be at least one read-write pair with a different order
|
|
|
|
|
|
So this implies that S1 and S2 are also view-equivalent.
|
|
|
-
|
|
|
-#### Testing conflict-serializability
|
|
|
-
|
|
|
-It is done with a conflict graph that has:
|
|
|
-- One node for each transaction Ti
|
|
|
-- One arc from Ti to Tj if it exists at least one conflict between an action of Ti and an action of Tj such as ai precedes aj.
|
|
|
-
|
|
|
-A schedule is in CSR iff its conflict graph is acyclic.
|