Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Banco de Dados 2 
10/03 
 
 
 
 
 
 
 
 
 
Bruno Glanzmann 
Vitor Belloni 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22.1) 
Protocolo de bloqueio em duas fases é quando uma transação segue todas as 
operações de bloqueio, read_lock e write_lock, que precedem a primeira operação 
de desbloqueio na transação. A serialização é garantida se cada transação em um 
schedule seguir o protocolo de bloqueio em duas fases, além disso, o protocolo de 
bloqueio, ao impor as regras de bloqueio em duas fases, também impõe a 
serialização. 
 
22.2) 
Existem 4 variações de bloqueios em duas fases: básico, conservador, estrito e 
rigoroso. O estrito e o rigoroso geralmente são os preferidos, pois são as duas 
variações que garantem schedules estritos, em que uma transação T não libera 
nenhum de seus bloqueios até que haja uma confirmação ou aborto. 
 
22.3) 
O deadlock ocorre quando cada transação T em um conjunto de duas ou mais 
transações está esperando por algum item que está bloqueado por alguma outra 
transação, assim, criando uma fila de espera. Este problema pode ser lidado através 
de alguns métodos, como o protocolo de prevenção de deadlock, que requer que 
cada transação bloqueie todos os itens que precisar com antecedência, ou o 
detecção de deadlock, em que o sistema verifica se um estado de deadlock 
realmente existe ou o método de timeouts, onde caso uma transação espere por um 
tempo maior que o período limite, o sistema pressupõe que a transação pode entrar 
em deadlock e a aborta. Já a inanição, acontece quando uma transação não pode 
prosseguir por um período indefinido enquanto outras transações continuam 
normalmente, e a solução é usar um esquema de fila, onde a primeira transação 
que chegar será a primeira a ser atendida. 
 
22.4) 
Um bloqueio binário pode ter dois estados ou valores: bloqueado e desbloqueado 
ou 1 e 0. Um bloqueio distinto é associado a cada item do banco de dados X. Se o 
valor do bloqueio em X for 1, o item X não pode ser acessado por uma operação de 
banco de dados que requisita o item. Se o valor de bloqueio em X for 0, o item pode 
ser acessado quando requisitado, e o valor do bloqueio é mudado para 1. No 
bloqueio exlcusivo/compartilhado, existem três operações de bloqueio: read_lock(X), 
write_lock(X), unlock(X). Um bloqueio associado item X, lock(X), agora tem três 
estados possíveis: bloqueado para leitura, bloqueado para gravação ou 
desbloqueado. Um item bloqueado para leitura também é chamado de bloqueado 
para compartilhamento, pois outras transações podem ler o item, enquanto um item 
bloqueado para gravação é chamado bloqueio exclusivo, visto que uma única 
transação mantém exclusivamente o bloqueio no item. Esse método é preferível, 
pois o bloqueio binário é muito restritivo para itens de banco de dados porque, no 
máximo, uma transação pode manter um bloqueio em determinado item. 
 
22.5) 
No protocolo esperar-morrer, uma transação mais antiga tem permissão para 
esperar por uma transação mais nova, enquanto uma transação mais nova que 
solicita um item mantido por uma transação mais antiga é abortada e reiniciada. Já 
a técnica esperar-ferir faz o contrário, uma transação mais nova tem permissão para 
esperar por uma mais antiga, enquanto uma transação mais antiga que solicita um 
item mantido por uma transação mais nova apodera-se da transação mais nova ao 
abortá-la. 
 
22.6) 
O protocolo de espera cuidadosa foi proposto para tentar reduzir o número de 
abortos/reinícios desenecessários através da seguinte regra: Se Tj não estiver 
bloqueada, então Ti está bloqueada e tem permissão para esperar, caso contrário, 
aborta Ti. No protocolo sem espera, se uma transação for incapaz de obter um 
bloqueio, ela é imediatamente abortada e, depois reiniciada após certo atraso de 
tempo sem verificar se um deadlock realmente ocorrerá ou não. Nesse caso, 
nenhuma transação espera, de modo que nenhum deadlock ocorrerá. No método de 
timeout, se uma transação esperar por um período maior que o período de timeout 
definido pelo sistema, o sistema pressupõe que a transação pode entrar em 
deadlock e a aborta independentemente de um deadlock realmente existir ou não. 
 
22.7) 
Rótulo de tempo é um identificador exclusivo criado pelo SGBD para identificar uma 
transação. Eles podem ser gerados de várias maneiras, uma possiblidade é utilizar 
um contador que é incrementado toda vez que seu valor é atribuído a uma 
transação, outra maneira é usar o valor atual de data/hora do clock do sistema e 
garantir que dois valores de rótulo de tempo quaisquer sejam gerados durante a 
mesma batida do clock. 
 
22.8) 
A ideia deste protocolo é ordenar as transações com base em seus rótulos de 
tempo, em que um schedule que as transações participam é então serializável, e o 
único schedule serial equivalente permitido tem as transações na ordem de seus 
valores de rótulo de tempo. A ordenação de rótulo de tempo estrita é uma variação 
da TO básica e a diferença entre eles é que a estrita garante que os schedules 
sejam tanto estritos quanto serializáveis. 
 
 
22.10) 
É um tipo de bloqueio que não é compatível com os bloqueios de leitura, de modo 
que a transação pode ter que esperar sua confirmação até que todos os itens 
bloqueados para a gravação sejam liberados por quaisquer transações de leitura, a 
fim de obter os bloqueios de certificação. Quando eles são adquiridos, a versão 
confirmada X do item de dados é definida como o valor da versão X', a versão X' é 
descartada e os bloqueios de certificação são então liberados. A vantagem é que 
esse esquema evita a propagação de abortos, pois as transações só têm permissão 
para ler a versão X que foi gravada por uma transação confirmada. Porém a 
desvantagem é que podem ocorrer deadlocks se o upgrading de um bloqueio de 
leitura para um bloqueio de gravação for permitido. 
 
22.11) 
Eles diferem no sentido de que neste técnica, nenhuma verificação é feita enquanto 
a transação está executando. Também são chamadas de técnica de validação, pois 
ao final da execução de toda transação existe a fase de validação para verificar se 
houve alguma violação na atualização da transação. Existem três fases, a de leitura, 
onde uma transação pode ler valores do itens de dados confirmados com base no 
banco de dados. A fase de validação, onde acontece a verificação para garantir que 
a serialização não será violada. E por fim a de gravação, onde as atualizações são 
aplicadas ao banco de dados. 
 
22.12) 
Afeta diretamente pelo seu tamanho, pois quanto maior o tamanho do item de 
dados, menor será o grau de concorrência exigido. O fator que afeta a seleção do 
tamanho de granularidade é o tipo de transação envolvida no processo. 
 
22.13) 
Bloqueio de granularidade múltipla 
 
22.14) 
O protocolo de bloqueio de granularidade múltipla é usado para garantir a 
serialização através dos modos de bloqueio de intenção. E é usado especialmente 
quando se processa uma mistura de transações que inclui transações curtas que 
acessam apenas alguns itens e transações longas que acessam arquivos inteiros. 
 
22.15) 
São bloqueios usados para tornar o bloqueio de granularidade múltipla prático. A 
ideia desse tipo de bloqueio é que uma transação indique, junto com o caminho da 
raiz até o nó desejado, que tipo de bloqueio ela exigirá de um dos descendentes do 
nó. 
 
22.16) 
Os latches são usados quando há a necessidade de garantir a integridade física de 
uma página quando ela está sendo gravada do buffer para o disco. 
 
 
 
22.17) 
É um tipo de registro que apareceu de repente no banco de dados ao ser inserido. 
O problema que ele causa é que pode acabar bloqueando todos os registros do 
banco de dados antes que T tenha inserido um novo registro. 
 
22.18) 
Através do bloqueio de índice, se a entrada do índice for bloqueada antes que o 
próprio registro possa ser acessado, então o conflito no registro fantasma pode ser 
detectado, pois a transação T' solicitaria um bloqueio de leitura na entrada de índice 
paraa Dnr=5, e T solicitaria um bloqueio de gravação na mesma entrada antes que 
elas pudessem colocar os bloqueios nos registros atuais. Como os bloqueios de 
índice estão em conflito, o conflito fantasma seria detectado. 
 
22.19) 
É uma técnica mais geral que bloqueia o acesso a todos os registros que satisfazem 
um predicado, ou seja, uma condição qualquer de uma maneira semelhante, porém, 
os bloqueios de predicado provaram ser difíceis de implementar de modo eficiente. 
 
22.20) O grafo serializável precisa ser acíclico para garantir a serialização de 
conflitos dos schedules. Deve-se levar em consideração as fases de expansão e as 
fases de encolhimento, na fase de expansão ele obtém bloqueios mas não libera 
nenhum, já na fase de encolhimento acaba ocorrendo o contrário. 
 
 
22.22) O bloqueio estrito em duas fases ocorre caso todas as operações de 
bloqueio (read lock, write lock) precedem a primeira operação de desbloqueio na 
transação. O bloqueio estrito em duas fases garante schedules estritos pois, para 
seguir o protocolo de duas fases as operações write lock e unlock não ocorrem de 
maneira seguida na mesma tornando impossível a reescrita das transações 
tornando os schedules estritos. 
 
22.23) Esperar-morrer: Se uma transação solicitar um recurso que está bloqueado 
por outra transação, o SGBD simplesmente verifica o registro de data e hora de 
ambas as transações e permite que a transação mais antiga aguarde até que o 
recurso esteja disponível para execução. 
Suponha que existam duas transações T1 e T2, e seja o timestamp de qualquer 
transação T TS (T). Agora, se houver um bloqueio em T2 por alguma outra 
transação e T1 estiver solicitando recursos mantidos por T2, o DBMS executará as 
seguintes ações: 
Verifica se TS (T1)