Transações FLAT: os clientes interagem com vários servidores, acessando objetos sequencialmente. cada request é concluída antes de prosseguir para a próxima, permitindo acesso sequencial a objetos de servidor. A concorrência é limitada; uma transação espera por um objeto de cada vez.
Abort se um dos servidores não puder confirmar operação.
Transações NESTED: as transações de nível superior podem gerar subtransações (”filhos”), que são executadas em paralelo (concorrentes), em máquinas diferentes, p/ obter ganho de desempenho ou flexibilidade. Subtransações no mesmo nível podem ser executadas concorrentemente, proporcionando maior flexibilidade e concorrência do que as transações planas.
Não é Abortada se um dos servidores não puder confirmar operação (ou em abort de subtransção).
COMMIT Protocols: garante que todas as operações de uma transação sejam realizadas ou nenhuma; coordenador solicita a confirmação ou aborto a todos os participantes até que todos respondam.
Atômico (One-phase): inadequado → não permite que um servidor aborte unilateralmente uma transação. Problemas de controle de concorrência podem levar ao aborto sem que o cliente saiba.
Atômico (two-phase): permite que qualquer participante aborte. 1 — Os participantes votam para confirmar ou abortar. 2 — Se todos votarem para confirmar, a transação é confirmada; se qualquer um votar para abortar, a transação é abortada. Devido à necessidade de atomicidade, se uma parte da transação for abortada, toda a transação deve ser abortada, exemplo:
nodo X retorna resposta negativa na primeira fase → na segunda fase, coord. deve avisar a todos os nodos participante para não completarem a transação.
CONCURRENCY CONTROL: cada servidor gerencia um conjunto de objetos e é responsável por garantir sua consistência durante transações concorrentes.
Lock: mantidos localmente (serv.) ; somente liberada → confirmada ou abortada; ordem ñ importa.
DISTRIBUTED DEADLOCKS: local — deadlocks quando o lock p/ concurrency control. SD — global wait-for pode ser construído a partir dos grafos locais, ñ está em nenhum → deadlock distribuído. deadlock → ciclo no wait-for graph.
Detecção: detecção centralizada de deadlocks → serv. c/ role de detector global de deadlocks → de tempos em tempos cada serv. envia p/ o processo global detecta sua cópia mais recente do wait-for graph, o qual combina com demais cópias recebidas a fim de se encontrar esperas cíclicas.
Phantom deadlocks: falso positivo, por causa da desatualização das info de grafos wait-for no global detector.
Edge chasing: ñ existe papel de global detector, detecção por meio dos local lock managers. Iniciação: serv. envia probe para o serv. de um objeto onde uma transação está bloqueada. Detecção: as sondas são processadas para identificar ciclos (deadlock) no wait-for graph. Resolução: uma transação é abortada para quebrar o deadlock, com base em priori. de trans.
TRANSACTION RECOVERY: prop. atômica das transações → todos os efeitos das transações confirmadas e nenhum dos efeitos das transações incompletas/abortadas reflitam nos objetos acessados por elas.
Durabilidade: requer que os objetos sejam salvos em armazenamento permanente e estejam disponíveis indefinidamente. Portanto, uma confirmação (ack) da solicitação de commit de um cliente implica que todos os efeitos da transação foram registrados em armazenamento permanente, assim como nos objetos voláteis do servidor.
Atomicidade de falhas: requer que os efeitos das transações sejam atômicos mesmo quando o servidor falha. A recuperação está preocupada em garantir que os objetos de um servidor sejam duráveis e que o serviço forneça atomicidade de falha.
Recovery file: tds obj. na transac. armaz. em memória volátil e recovery file. shadow version.
Recovery manager: garantir durabilidade e atomicidade de falhas. Tarefas: