Vai al contenuto

Esercizi controllo concorrenza

Da Wikiversità, l'apprendimento libero.
esercitazione
esercitazione
Esercizi controllo concorrenza
Tipo di risorsa Tipo: esercitazione
Materia di appartenenza Materia: Basi di dati 2

Esercizi relativi alla lezione Proprietà ACID/Controllo di concorrenza.

Classificazione di scheduling CSR/VSR

[modifica]

Esercizio 1

[modifica]

Si determini se il seguente scheduling è VSR e/o CSR, e in caso negativo si proponga - se esiste - una soluzione:

r3(x) w4(x) r2(z) r1(x) w1(y) w2(y) w2(z) w3(y)

Soluzione

Suddividiamo per risorsa le azioni delle transazioni:

  • x:r3,w4,r1
  • y:w1,w2,w3
  • z:r2,w2

E generiamo il grafo dei conflitti:

Questo grafo è evidentemente ciclico, quindi lo schedule non è in CSR. È VSR? Dobbiamo verificare se i cicli sono causati da coppie di scritture cieche. Nel nostro testo evidenziamo una sola coppia di scritture cieche w1,w2 relative alla risorsa y. Possiamo quindi invertire l'arco 1-2 che però non elimina il ciclo formato da 1-3-4. Lo schedule non è quindi in VSR (non possiamo eliminare tutti i cicli con le scritture cieche) e di conseguenza non può essere trasformato in CSR.

Esercizio 2

[modifica]

Si determini se il seguente scheduling è VSR e/o CSR, e in caso negativo si proponga - se esiste - una soluzione:

r1(x) w2(t) r1(y) w3(y) r4(z) w4(z) w1(t) r4(x) w5(t) w4(x) r6(y) w3(z) w2(z) r6(t) w6(y)

Soluzione

Suddividiamo per risorsa le azioni delle transazioni:

  • x:r1,r4,w4
  • y:r1,w3,r6,w6
  • z:r4,w4,w3,w2
  • t:w2,w1,w5,r6

E disegniamo il grafo dei conflitti:

Il grafo è ciclico:

  • 1-4-2
  • 1-3-2
  • 1-4-3-2

Per semplificare il problema eliminiamo il nodo 6 perché pozzo[1] quindi non può essere parte di un ciclo. Eliminiamo anche il nodo 5 (anch'esso diventato pozzo dopo l'eliminazione del 6).

Possiamo notare che gli archi 4-3 e 2-1 sono causati da scritture cieche. Notiamo che però 4-3 è causa anche di r4w3 quindi non possiamo invertirne la direzione. Possiamo invece invertire 2-1, che rende di fatto il grafico completamente aciclico.

Possiamo concludere che:

  • Il grafo iniziale non è in CSR ;
  • Il grafo iniziale è in VSR;
  • Invertendo w2(t) w1(t) in w1(t) w2(t) lo schedule risultante è CSR.

Esercizio 3

[modifica]

Si determini se il seguente scheduling è VSR e/o CSR, e in caso negativo si proponga - se esiste - una soluzione:

r1(x) w4(k) r2(x) w3(y) r4(y) w1(x) w1(z) r2(k) w6(t) w2(t) r6(x) w2(z) w5(t) r6(y) w6(z)

Soluzione

Suddividiamo per risorsa le azioni delle transazioni:

  • x:r1,r2,w1,r6
  • y:w3,r4,r6
  • z:w1,w2,w6
  • t:w6,w2,w5
  • k:w4,r2

E disegnamo il grafo dei conflitti:

Il grafo è evidentemente ciclico: ciclo 1-2 e 2-6. Quindi non è in CSR.

Vediamo se è in VSR:

  • per la risorsa z possiamo scambiare la scrittura cieca w1,w2,w6 in w2,w1,w6, risolvendo il conflitto 1->2
  • per la risorsa t possiamo scambiare la scrittura cieca w6,w2,w5 in w2,w6,w5, risolvendo il conflitto 6->2
Lo schedule è in VSR.

Classificazione di scheduling 2PL e TS

[modifica]

Esercizio 1

[modifica]

Dato il seguente scheduling, stabilire se è 2PL, 2PLStrict o nessuno dei due.

r1(x) w1(z) r2(y) r2(x) w2(z) r1(y) r3(z) r3(y) w2(y) w1(x) w3(x)

Soluzione

Costruiamo la seguente tabella:

Tempo x y z
1 r1
2 w1
3 r2
4 r2
5 w2
6 r1
7 r3
8 r3
9 w2
10 w1
11 w3

Da questa tabella possiamo dedurre che:

  • La transazione 1 deve acquisire un w-lock su x necessariamente dopo t4 (in particolare eseguire escalation dell'r-lock acquisito a t1);
  • La transazione 2 deve rilasciare l'r-lock per x prima che la transazione 1 effettui escalation;
  • Per y, le transazioni 2,1,3 condividono l'r-lock ma 1 e 3 devono rilasciarlo prima di 9.

Quindi esprimendolo in formule abbiamo che:

  • 4<U2(x)<L1(x)<10
  • 6<U1(y)<8<U3(y)<9

quindi:

  • 6<U1(y)<8<U3(y)<L2(y)<9

Ma se fosse in 2PL, risulterebbe:

  • L1(x)<U1(y)
  • L2(y)<U2(x)

ma come visto prima U2(x)<L1(x) e U1(y)<L2(y) che porta a una contraddizione. Quindi lo schedule non è in 2PL e tanto meno in 2PLStrict.

Si poteva anche notare che il grafo dei conflitti generato da questo schedule è ciclico, quindi non CSR e di conseguenza nemmeno 2PL.

Esercizio 2

[modifica]

Stabilire se il seguente scheduling è Mono-TS, Multi-TS o nessuno dei due (il valore a pedice indica il timestamp): r4(x) r2(x) w2(y) w5(x) w4(y) r3(z) r3(y) w3(x) w4(z) r6(z) r9(z) w6(z) w10(z) r5(z) r20(z)

Soluzione

x:r4 r2 w5 w3
y:w2 w4 r3
z:r3 w4 r6 r9 w6 w10 r5 r20

Poiché rispetto alla risorsa z si ha che r9 precede w6 e (9>6) allora si evince che lo scedule NON è Multi-TS.

Di conseguenza NON è Mono-TS.

Note

[modifica]
  1. ↑ Un nodo è detto pozzo se ha solo archi entranti