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