Escolar Documentos
Profissional Documentos
Cultura Documentos
▪ COMMIT: finaliza a transação atual tornando permanentes todas as alterações de dados pendentes.
▪ SAVEPOINT <nome_savepoint>: marca um ponto de gravação dentro da transação atual, sendo utilizado para dividir uma
transação em partes menores.
Duas operações em um schedule estão Sa = r1(X); r2(X); w1(X); r1(Y); w2(X); w1(Y)
2. Para cada caso em S onde Tj executa um read_item(X) depois de Ti executar um write_item(X), crie uma aresta (Ti → Tj) no grafo de precedência.
3. Para cada caso S onde Tj executa um write_item(X) após Ti executar um read_item(X), crie uma aresta (Ti → Tj) no grafo de precedência.
4. Para cada caso S onde Tj executa um write_item(X) após Ti executar um write_item(X), crie uma aresta (Ti → Tj) no grafo de precedência.
5. O schedule é serializável se, e somente se, o grafo de precedência não tiver ciclos.
Exemplo: escalonamento f
X, Y
Transação T1 Transação T2 Transação T3
T1 T2
read_item(Y);
read_item(Z);
read_item(X);
write_item(X); Z, Y
write_item(Y); Y
write_item(Z);
read_item(Z); T3
read_item(Y);
write_item(Y);
read_item(Y); f é serializável
write_item(Y);
read_item(X);
write_item(X); Schedule serial equivalente: T3 →T1 →T2
Suporte para Transações em SQL, exemplo
EXEC SQL WHENEVER SQLERROR GOTO UNDO;
EXEC SQL INSERT INTO FUNCIONARIO (PNOME, UNOME, SSN, DNO, SAL)
VALUES ('Ana', 'Silva', '1233215', 2, 5000);
EXEC SQL UPDATE FUNCIONARIO SET SAL = SAL * 1.1 WHERE DNO = 2;
GOTO THE_END;
THE_END: ...;
Consiste em primeiro inserir uma linha na tabela FUNCIONARIO e, depois, atualizar o salário de
todos os funcionários do departamento 2. Se houver algum erro em qualquer uma das instruções
SQL, a transação inteira é cancelada. Ou seja, nesse caso, qualquer salário seria restaurado ao valor
anterior e a linha inserida seria removida.
Técnicas de Bloqueio – Bloqueio Binário
✓ bloqueado (locked);
✓ desbloqueado (unlocked).
➢ O comando de espera coloca a transação em uma fila de espera pelo item X até que
lock_item(X):
senão início
goto B;
fim;
unlock_item(X):
Wait-die (esperar-morrer)
❑ Se TS(Ti) < TS(Tj), ou seja, Ti mais antiga do que Tj, então Ti é
autorizada a esperar e Tj é abortada (morre) e reiniciada
depois, com o mesmo valor de registro de timestamp.
Wound-wait (ferir-esperar)
❑ Se TS(Ti) < TS(Tj), ou seja, Ti mais antiga do que Ti, aborta Tj (Ti
fere Tj) e a reinicia mais tarde, com o mesmo rótulo de tempo.
Deadlocks – Prevenção – com Registros de Timestamp
Resumindo:
❑ Em ambas as técnicas, a transação mais nova é abortada.
❑ Em esperar-morrer, a transação mais antiga espera, enquanto
a mais nova é abortada e reiniciada com o mesmo rótulo de
tempo.
❑ Em ferir-esperar a transação mais antiga apodera-se da mais
nova ao abortá-la.
As duas técnicas podem fazer com que algumas transações sejam
abortadas e reiniciadas sem necessidade – nem sempre elas
causariam um deadlock.
Detecção de Deadlocks – Grafo de Espera
espera.
executada no momento.
▪ Uma aresta direcionada (nó Ti → nó Tj) é criada no grafo de espera sempre que
❑ Starvation ocorre quando uma transação não pode continuar sua execução em um intervalo
1. O esquema de espera para itens bloqueados for injusto, priorizando algumas transações em
relação a outras;
▪ Solução 1: quanto mais uma transação espera, mais se deve aumentar a sua prioridade de
execução.
▪ Solução 2: utilizar um esquema de fila de tal forma que a primeira transação a chegar será a
2. A mesma transação, no processo de seleção de vítima, for escolhida como vítima repetidamente.
inúmeras vezes.