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

 

 

Suponha duas transações T1 e T2:

 

BEGIN TRANSACTION T1

UPDATE Banco

SET Saldo = Saldo– 100)

WHERE Conta = 10

UPDATE Banco

SET Saldo = Saldo + 100

WHERE Conta = 20

COMMIT TRANSACTION T1

 

BEGIN TRANSACTION T2

UPDATE Banco

SET Saldo = Saldo – 200

WHERE Conta = 20

UPDATE Banco

SET Saldo = Saldo FROM + 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 Conta10.Saldo

WRITE Conta10.Saldo

READ Conta20.Saldo

WRITE Conta20.Saldo

 

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 = Saldo – 200

WHERE Conta = 30

UPDATE Banco

SET Saldo = Saldo + 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) 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

 

8) 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