O fragmento consiste em linhas que satisfazem um predicado de consulta.

Fonte das imagens: StackOverflow.
SUPPLIER copiada para localização 2, onde sofrerá JOIN com PURCHASEORDER. Resultado será enviado para localização 3.
Observação: aspectos de replicação (fragmentos idênticos são alocados a diferentes nós) e transparência (único banco de dados lógico, sendo isolados das complexidades da distribuição) devem ser considerados.
A execução de mais de uma transação de forma concorrente requer a presença de algum mecanismo para o controle de concorrência.
Um escalonamento
Para cada transação
O escalonamento preserva a ordem das instruções dentro de cada transação, mas permite uma ordenação arbitrária de instruções entre transações diferentes.
openTransaction();
x = 0;
x = x + 1;
closeTransaction();
openTransaction();
x = 0;
x = x + 2;
closeTransaction();
openTransaction();
x = 0;
x = x + 3;
closeTransaction();
Execução 1:
x = 0; x = x + 1; x = 0; x = x + 2; x = 0; x = x + 3; // Legal
Execução 2:
x = 0; x = 0; x = x + 1; x = x + 2; x = 0; x = x + 3; // Legal
Execução 3:
x = 0; x = 0; x = x + 1; x = 0; x = x + 2; x = x + 3; // Ilegal
Note que: a Execução 1 é legal e serializada. Já a Execução 2 é legal, porém não serializada.
Um escalonamento não-serial que é equivalente a um escalonamento serial.
Equivalência: Dois escalonamentos
A serializabilidade é uma propriedade usada para verificar se a concorrência preserva a consistência (teste por grafo de precedência).
O escalonador aplica um protocolo de escalonamento.
Protocolo otimista: Conflitos entre transações simultâneas são considerados excepcionais.
Protocolo pessimista: Assume que transações provavelmente irão interferir e causar conflitos.
O objetivo do travamento (locking) é garantir que, quando diferentes transações concorrentes tentam acessar o mesmo objeto do banco de dados, o acesso seja concedido apenas de forma que não ocorram conflitos.
x-lock) ou travamento de escrita: uma única transação adquire o privilégio exclusivo de interagir com aquele objeto. Nenhuma outra transação pode ler ou escrever o objeto.s-lock) ou travamento de leitura: garante que nenhuma outra transação atualizará o objeto enquanto o travamento estiver ativo.
Matriz de compatibilidade
| Solicitação / Existente | Sem travamento | Compartilhado | Exclusivo |
|---|---|---|---|
| Compartilhado | Sim | Sim | Não |
| Exclusivo | Sim | Não | Não |
O gerenciador de travamentos implementa um protocolo de travamento:
O gerenciador de travamentos também usa uma tabela de travamentos:
O gerenciador de travamentos deve garantir justiça no escalonamento, evitando, por exemplo, starvation.
O Two-Phase Locking Protocol (2PL) funciona da seguinte forma:

Fonte da Imagem: beginnersbook.com
Depois que uma transação começa a liberar travamentos, ela não pode adquirir novos travamentos.
O objeto para travamento pode ser:
tupla;
coluna;
tabela;
bloco de disco;
entre outros.
Há um trade-off entre sobrecarga de travamento e vazão das transações:
Bancos de dados distribuídos permitem armazenar e processar dados em múltiplos nós, favorecendo escalabilidade, disponibilidade e autonomia local.
Em bancos de dados distribuídos, o controle de concorrência é mais complexo porque dados, transações e bloqueios podem estar espalhados por diferentes nós.
Material Adicional: Transactions with Two-Phase Locking (aula do Prof. Andy Pavlo)
Dúvidas e Discussão
Uma empresa possui filiais em São Paulo, Recife e Porto Alegre. Cada filial acessa majoritariamente os dados de seus próprios clientes, mas a matriz precisa executar relatórios nacionais. Que estratégia de fragmentação poderia ser adotada? Quais seriam os benefícios e os desafios dessa decisão?
**Resposta esperada:** Um banco de dados distribuído é aquele em que os dados estão armazenados em múltiplos nós interconectados por uma rede, mas podem ser acessados de forma integrada pelos usuários e aplicações. Diferentemente de um banco centralizado, no qual os dados ficam em um único local, o banco distribuído permite dividir e alocar dados em diferentes servidores. Uma organização pode optar por essa abordagem para melhorar desempenho, aproximando os dados dos usuários; aumentar disponibilidade, pois a falha de um nó não necessariamente compromete todo o sistema; melhorar escalabilidade; e preservar autonomia local de unidades organizacionais diferentes.
**Resposta esperada:** A fragmentação pode melhorar o desempenho porque permite armazenar dados próximos dos usuários ou aplicações que mais os acessam, reduzindo tempo de resposta e tráfego de rede. Também pode permitir processamento paralelo, já que diferentes fragmentos podem ser consultados simultaneamente em nós distintos. No entanto, a fragmentação pode tornar consultas globais mais complexas, especialmente quando uma consulta precisa combinar fragmentos espalhados por vários nós. Isso pode aumentar o custo de comunicação e exigir estratégias mais sofisticadas de otimização.
**Resposta esperada:** Um escalonamento serial executa todas as operações de uma transação antes de iniciar a próxima. Ele é simples e tende a evitar interferências, mas limita a concorrência e pode reduzir o desempenho. Um escalonamento não serial intercala operações de diferentes transações. Ele pode ser desejável porque permite melhor uso dos recursos do sistema e maior vazão de transações. No entanto, precisa ser controlado para garantir que o resultado final seja correto.
**Resposta esperada:** Um escalonamento é serializável quando, mesmo sendo não serial e intercalando operações de diferentes transações, produz um resultado equivalente ao de alguma execução serial das mesmas transações. A serializabilidade é importante porque permite conciliar concorrência e correção. O sistema pode executar transações de forma intercalada para melhorar desempenho, desde que o resultado final seja equivalente a uma ordem sequencial válida.
**Resposta esperada:** O Two-Phase Locking, ou 2PL, é um protocolo de controle de concorrência baseado em bloqueios. Na fase de crescimento, a transação pode adquirir novos bloqueios, mas não pode liberar bloqueios. Na fase de encolhimento, a transação pode liberar bloqueios, mas não pode adquirir novos. Essa regra ajuda a garantir que o escalonamento produzido seja serializável, evitando interferências incorretas entre transações concorrentes.
**Resposta esperada:** Uma estratégia adequada seria a fragmentação horizontal por região ou filial, armazenando em cada nó os clientes mais acessados localmente. Isso reduziria o tempo de resposta para consultas locais e diminuiria a necessidade de comunicação com outros nós. O desafio é que relatórios nacionais precisariam combinar dados de todas as filiais, exigindo consultas distribuídas, união de fragmentos e possível aumento no custo de comunicação. Portanto, a estratégia beneficia operações locais, mas torna consultas globais mais complexas.