Exercícios – Transações e Controle de Concorrência

 

 

Suponha duas transações T1 e T2:

 

BEGIN TRANSACTION T1

UPDATE Banco

SET Saldo = ((SELECT Saldo FROM Banco WHERE Conta = 10) – 100)

WHERE Conta = 10

UPDATE Banco

SET Saldo = ((SELECT Saldo FROM Banco WHERE Conta = 20) + 100)

WHERE Conta = 20

COMMIT TRANSACTION T1

 

BEGIN TRANSACTION T2

UPDATE Banco

SET Saldo = ((SELECT Saldo FROM Banco WHERE Conta = 20) – 200)

WHERE Conta = 20

UPDATE Banco

SET Saldo = ((SELECT Saldo FROM Banco WHERE Conta = 30) + 200)

WHERE Conta = 30

COMMIT TRANSACTION T2

 

1)  As instruções de leitura e escrita dos dados da transação T1, obtidas a partir da SQL, são as seguintes:

 

READ Conta 10

WRITE Conta 10

READ Conta 20

WRITE Conta 20

 

Seguindo o exemplo acima, obtenha as instruções de leitura e escrita dos dados da transação T2.

 

2) Determine as possíveis escalas de execução concorrente serializáveis em conflito e/ou em visão.

 

3) Proponha escalas de execução concorrente serializáveis usando os protocolos:

a) bloqueio em duas fases, com granularidade de bloqueio por tupla.

b) timestamps

 

4) Verifique se existe a possibilidade de deadlock ao executar T1 e T2 de modo concorrente.

 

5) Suponha uma nova transação T3 concorrente com T1 e T2 e mostre que existe a possibilidade de deadlock ao usar o bloqueio em duas fases:

 

BEGIN TRANSACTION T3

UPDATE Banco

SET Saldo = ((SELECT Saldo FROM Banco WHERE Conta = 30) – 200)

WHERE Conta = 30

UPDATE Banco

SET Saldo = ((SELECT Saldo FROM Banco WHERE Conta = 10) + 200)

WHERE Conta = 10

COMMIT TRANSACTION T3

 

6) Recupere o deadlock verificados na questão anterior abortando a transação com o menor tempo de execução. Mostre uma possível escala de execução a partir da recuperação do deadlock.

 

7) Proponha uma escala de execução concorrente serializável para T1, T2 e T3 usando multi-versão.

 

8) Com que granularidade de bloqueio é possível executar concorrentemente T1, T2 e a transação T4?

 

BEGIN TRANSACTION T4

SELECT AVG(Saldo) FROM Banco

COMMIT TRANSACTION T4

 

9) Verifique se a escala abaixo:

 

T5

T6

T7

Read(A)

 

 

 

Read(A)

 

Write(B)

 

 

 

Write(A)

 

 

 

Read(B)

 

 

Write(A)

 

a)      É serializável em conflito

b)      É recuperável

c)      Evita rollback em cascata