Questão de Banco de Dados — Transações (Locks, ACID, etc.) — FUNDATEC 2025
Banco de Dados›Transações (Locks, ACID, etc.)
Código
qa699103
Banca
FUNDATEC
Órgão
BRDE
Ano
2025
Cargo
Ana Sist ( )
Sobre o controle de concorrência, é correto afirmar que:
AO timestamp ocorre quando cada transação em um conjunto de duas ou mais transações espera por algum item que esteja bloqueado por alguma outra transação do conjunto.
BO grafo “espera-por” requer que cada transação bloqueie todos os itens de que ela necessita para avançar; se nenhum dos itens pode ser obtido, nenhum será bloqueado.
CUm impasse é um identificador único criado pelo Sistema Gerenciador de Banco de Dados para identificar uma transação. Os valores são designados na ordem em que as transações são submetidas ao sistema.
DUm problema que pode ocorrer quando se usa bloqueio é a inanição (starvation) que ocorre quando uma transação não pode continuar por um período indefinido, enquanto outras transações no sistema continuam normalmente.
EO controle de concorrência bloqueio de duas fases conservador mantém os valores antigos de um item de dado quando ele é atualizado.
Revelar gabarito e comentário▾
GabaritoD — Um problema que pode ocorrer quando se usa bloqueio é a inanição (starvation) que ocorre quando uma transação não pode continuar por um período indefinido, enquanto outras transações no sistema continuam normalmente.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Controle de concorrência: bloqueios, deadlock, inanição e timestamps
Gabarito: letra D. A inanição (starvation) é exatamente o problema descrito na alternativa: uma transação não consegue prosseguir por um período indefinido enquanto outras transações continuam sendo executadas normalmente — situação típica quando um algoritmo de escalonamento de bloqueios favorece repetidamente outras transações em detrimento de uma específica. As demais alternativas trocam os conceitos de deadlock, timestamp, bloqueio de duas fases e grafo de precedência.
O controle de concorrência é o mecanismo que o SGBD utiliza para garantir que transações executadas simultaneamente não interfiram umas nas outras, preservando a propriedade de isolamento do ACID. O objetivo central é produzir escalonamentos seriáveis — ou seja, execuções intercaladas que produzam o mesmo resultado que alguma execução serial das mesmas transações. Para isso, o mecanismo mais tradicional é o bloqueio (lock), que controla o acesso concorrente aos dados: o lock de leitura (compartilhado) permite que várias transações leiam o mesmo dado, enquanto o lock de escrita (exclusivo) permite que apenas uma transação altere o dado.
O protocolo mais conhecido baseado em bloqueios é o 2PL (Two-Phase Locking), que divide a execução em duas fases: a fase de crescimento, em que a transação adquire todos os bloqueios de que precisa, e a fase de encolhimento, em que libera os bloqueios e não pode adquirir novos. Esse protocolo garante a serialização, mas não previne deadlocks — o impasse ocorre quando duas ou mais transações ficam esperando indefinidamente por recursos bloqueados umas pelas outras, formando um ciclo de espera. Por exemplo: T1 bloqueia o recurso A, T2 bloqueia o recurso B, T1 tenta acessar B e fica esperando, T2 tenta acessar A e fica esperando — nenhuma consegue prosseguir.
Além do deadlock, o uso de bloqueios pode gerar outros problemas, como a inanição (starvation) e o livelock. A inanição ocorre quando uma transação é repetidamente preterida na obtenção de um bloqueio, ficando impossibilitada de avançar por tempo indefinido, enquanto outras transações continuam sendo atendidas normalmente. Já o livelock é uma situação em que as transações ficam executando continuamente sem progredir, como no fenômeno do comboio descrito na literatura. Para evitar a inanição, uma política comum é garantir que as transações sejam atendidas na ordem em que solicitaram o bloqueio (política FIFO).
Outra abordagem de controle de concorrência é o uso de timestamps, em que cada transação recebe um identificador único baseado no momento em que iniciou. A regra básica é: se a transação A iniciou antes da transação B, o sistema deve se comportar como se A fosse executada totalmente antes de B. Quando há conflito, a transação mais nova pode ser reiniciada. Essa técnica evita deadlocks, mas pode causar reinicializações em cascata e não é adequada para todos os sistemas.
A banca explora exatamente a confusão entre esses conceitos: deadlock, timestamp, bloqueio de duas fases e inanição. Guarde as definições precisas de cada um — é nelas que as alternativas se dividem.
Conceito
Definição
Palavra-chave
Deadlock (impasse)
Espera circular: cada transação espera por item bloqueado por outra do conjunto
Espera circular
Timestamp
Identificador único criado pelo SGBD, designado na ordem de submissão das transações
Identificador único
Bloqueio de duas fases conservador
Exige que a transação adquira todos os bloqueios antes de executar; se não obtém todos, não bloqueia nenhum
Adquirir todos antes
Inanição (starvation)
Transação preterida indefinidamente, não consegue continuar enquanto outras progridem
Transação preterida
Grafo espera-por
Estrutura para detectar deadlock: nós = transações, arestas = espera por recurso
Detecção de deadlock
Versionamento
Mantém valores antigos de um item quando ele é atualizado
Valores antigos
Controle de concorrência: Bloqueio (lock) (Compartilhado (leitura), Exclusivo (escrita)); Protocolo 2PL (Fase de crescimento, Fase de encolhimento); Problemas (Deadlock (espera circular), Inanição (preterida indefinidamente), Livelock (executa sem progredir)); Timestamp (Identificador único, Ordem de início)
Alternativa A — ❌ Incorreta
A descrição apresentada — "cada transação em um conjunto de duas ou mais transações espera por algum item que esteja bloqueado por alguma outra transação do conjunto" — é a definição clássica de deadlock (impasse), não de timestamp. O timestamp é um identificador único atribuído a cada transação, usado para ordenar a execução concorrente, e não um estado de espera circular. A alternativa troca o conceito de deadlock pelo de timestamp.
Alternativa B — ❌ Incorreta
A descrição — "requer que cada transação bloqueie todos os itens de que ela necessita para avançar; se nenhum dos itens pode ser obtido, nenhum será bloqueado" — corresponde ao bloqueio de duas fases conservador (conservative 2PL), também chamado de bloqueio preventivo, que exige que a transação adquira todos os bloqueios antes de começar a executar. O grafo espera-por (wait-for graph) é uma estrutura de dados usada para detectar deadlocks: cada nó representa uma transação e cada aresta indica que uma transação está esperando por um recurso bloqueado por outra. Se o grafo contiver um ciclo, há deadlock. A alternativa mistura os dois conceitos.
Alternativa C — ❌ Incorreta
A descrição — "um identificador único criado pelo SGBD para identificar uma transação, com valores designados na ordem em que as transações são submetidas" — é a definição de timestamp, não de impasse. O impasse (deadlock) é a situação de espera circular entre transações, como descrito na alternativa A. A alternativa troca o conceito de timestamp pelo de impasse.
Alternativa D — ✅ Correta ⟵ GABARITO
A alternativa descreve corretamente a inanição (starvation): uma transação não consegue continuar por um período indefinido enquanto outras transações no sistema continuam normalmente. Isso ocorre quando o escalonador de bloqueios favorece repetidamente outras transações, impedindo que uma transação específica obtenha o bloqueio de que necessita. É um problema distinto do deadlock — na inanição não há ciclo de espera, apenas uma transação preterida indefinidamente.
Alternativa E — ❌ Incorreta
A descrição — "mantém os valores antigos de um item de dado quando ele é atualizado" — refere-se à técnica de versionamento ou ao mecanismo de log de transação (usado para recuperação), não ao bloqueio de duas fases conservador. O bloqueio de duas fases conservador é um protocolo de bloqueio que exige que a transação adquira todos os bloqueios antes de executar, como explicado na alternativa B. A alternativa troca o conceito de bloqueio conservador pelo de versionamento.
NÃO CAIA NESSA!
A banca embaralha os conceitos de deadlock, timestamp, bloqueio conservador e inanição. O candidato que não domina as definições precisas acaba marcando a alternativa A (deadlock) ou a C (timestamp) por reconhecimento parcial. A chave é identificar a palavra-chave de cada conceito: deadlock = espera circular; timestamp = identificador único; bloqueio conservador = adquirir todos os bloqueios antes; inanição = transação preterida indefinidamente.
PEGA ESSA DICA!
Para fixar, monte uma tabela mental com os quatro conceitos e suas palavras-chave. Na prova, leia a alternativa e pergunte: "isso descreve uma espera circular? um identificador? uma política de bloqueio? uma transação preterida?" — a resposta aponta o conceito correto.