← Questões de Banco de Dados

Banco de Dados · FGV · 2022

Questão comentada de Banco de Dados

No contexto do processamento de transações de bancos de dados, suponha que uma transação Ta detém um bloqueio compartilhado no registro Ra e que uma transação Tb detém um bloqueio exclusivo no registro Rb. Nessas condições, considere as seguintes afirmativas. I. Uma solicitação de Ta por um bloqueio exclusivo em Rb coloca Ta em estado de espera. II. Uma solicitação de Tb por um bloqueio compartilhado em Ra será garantida. III. Uma solicitação de Tb por um bloqueio exclusivo em Ra coloca Tb em estado de espera. IV. Uma solicitação de Ta por um bloqueio compartilhado em Rb coloca Ta será garantida. Estão corretas as afirmativas

Gabarito: E

Em controle de concorrência, tudo gira em torno da compatibilidade dos bloqueios. Bloqueio compartilhado (S) permite leitura concorrente, enquanto bloqueio exclusivo (X) é mais rígido: se alguém já tem X, ninguém mais entra nem para leitura naquele item. Em geral, S com S é compatível, mas X com qualquer outro bloqueio no mesmo registro não é. No enunciado, Ta já tem S em Ra e Tb já tem X em Rb. Então, quando Ta pede X em Rb, ela fica esperando, porque Rb já está travado exclusivamente por Tb. Isso confirma a afirmativa I. Quando Tb pede S em Ra, o pedido é atendido, porque Ra está com S em poder de Ta, e S com S é compatível. Logo, a afirmativa II está correta. Já quando Tb pede X em Ra, não há compatibilidade com o S de Ta, então Tb espera, o que torna a III correta. Por fim, Ta pedir S em Rb não seria garantido, porque Rb está sob X de Tb. Ou seja, a IV está errada. Esse raciocínio bate com a regra clássica de compatibilidade de locks usada em SGBDs e ensinada nos modelos de transações com duas fases de bloqueio.

Continue treinando

Questões relacionadas