Mini-Projecto 3
AOBD – 2007/2008
1 - Considere o esquema simplificado (i.e. não foram incluídos os
nomes de todos os atributos) das seguintes tabelas na base de dados
AdventureWorks e ainda a seguinte interrogação SQL.
Purchasing.Vendor(VendorID,Name)
Purchasing.PurchaseOrderHeader(PurchaseOrderID, VendorID)
Purchasing.PurchaseOrderDetail(PurchaseOrderDetailID,PurchaseOrde
rID,ProductID)
Production.Product(ProductID,Name,ListPrice)
SELECT V.Name, P.Name
FROM
Purchasing.Vendor V, Production.Product P,
Purchasing.PurchaseOrderHeader OH,
Purchasing.PurchaseOrderDetail OD
WHERE V.VendorID=OH.VendorID AND
OH.PurchaseOrderID=OD.PurchaseOrderID
AND
OD.ProductID=P.ProductID AND V.Name=’Norstan Bike Hut’ AND
P.ListPrice <=1000;
• Considere um optimizador semelhante ao introduzido nas aulas teóricas (i.e. Sistema R da
IBM). Indique quais as ordenações possíveis para as junções presentes na interrogação,
assumindo que o optimizador iria descartar planos de execução envolvendo produtos cartesianos.
Apenas planos left-deep seriam permitidos:
((V |x| OH ) |x| OD) |x| P
((P |x| OD ) |x| OH) |x| V
((OD |x| OH ) |x| V) |x| P
((OD |x| OH ) |x| P) |x| V
Uma vez que o optimizador do sistema-R iria tentar mover as selecções
para as folhas da árvore do plano de execução, os dois primeiros casos
seriam os mais prováveis de ser considerados, optando-se entre eles de
acordo com a selectividade das condições de selecção dadas sobre V e
P.
b) Qual a informação sobre estas relações que um optimizador iria necessitar para poder escolher
um bom plano de execução para a interrogação. Justifique a sua resposta.
Para estimar o custo, o optimizador iria necessitar de informação
tal como quais os índices existentes (e o seu tipo) sobre os atributos
envolvidos nos joins e selecções. Iria também necessitar
de estatísticas sobre as tabelas em questão, tais como os valores
mínimo e máximo dos índices e a distribuição dos valores, por forma a
calcular a selectividade das condições involvidas nas selecções.
c) Com a informação que tem, indique um possível plano de execução eficiente para a
interrogação, indicando os algoritmos escolhidos a cada passo e justificando a sua escolha.
Não é dada informação sobre o tamanho de cada relação ou sobre a selectividade
das operações de selecção envolvidas. Assumindo que a condição de igualdade
seria mais selectiva que a selecção de um intervalo, um plano eficiente poderia ser
projection((( selection(V) |x| OH ) |x| OD) |x| selection(P))
As selecções podem explorar índices, caso estes existam, e caso contrário seriam
calculadas usando um full-table scan. Os algoritmos de join iriam depender da
existência de índices sobre os atributos de join, por exemplo indices B+ tree sobre
os atributos do join podiam ser interessantes para o algoritmo de join sort-merge.
d) Que índices, e que tipo de índice, poderiam ser úteis para o processamento desta
interrogação.
Um indice clustered do tipo B+tree seria útil para a selecção
pelo intervalo. Um índice hash em V.name seria util para a condição de
igualdade. Índices sobre os atributos dos joins seriam provavelmente
úteis na selecção de um algoritmo de join mais eficiente.
e) Como iria o plano de execução da alínea anterior ser alterado, aquando da introdução de
um clausula
i) DISTINCT,
ii) ORDER BY P.Name ou
iii) GROUP BY P.Name na query.
i) Para suportar a operação DISTINCT, devemos ordenar os resultados (excepto
se estes já se encontrarem numa ordem pretendida) e pesquisar pelas
ocorrências diferentes. Num optimizador do tipo do sistema-R, a determinação do
plano de execução iria levar em conta o facto dos resultados virem um não numa
ordem interessante.
ii) A operação ORDER BY teria efeitos similares aos da pergunta anterior. O
optimizador iria considerar planos de execução que deixassem, como efeito
secundário, os resultados ordenados por P.name, ou então iria explicitamente
ordenar os resultados por P.name.
iii) A operação GROUP BY P.name requer que se ordenem os resultados dos
operadores anteriores por P.name por forma a posteriormente se calcularem os
agregados sobre os conjuntos de tuplos com o mesmo valor para P.name. Mais
uma vez, o optimizador iria considerar planos de execução que deixassem, como
efeito secundário, os resultados ordenados por P.name.
2. Considere o seguinte escalonamento para transacções concorrentes.
a) Liste todos os conflitos que podem ocorrer no escalonamento de transacções apresentado.
•Em T1, R1(a) entra em conflito com W3(a)
•Em T4, R4(a) entra em conflito com W3(a)
•Em T2, W2(b) entra em conflito com W3(b),W5(b)
•Em T5, R5(c) entra em conflito com W4(c)
•Em T3, W3(a) não apresenta conflitos
•Em T3, W3(b) entra em conflito com W5(b)
•Em T2, R2(c) entra em conflito com W4(c)
•Em T5, W5(b) não apresenta conflitos
•Em T2,W2(d) entra em conflito com R1(d)
•Em T4, W4(c) não apresenta conflitos
•Em T1, R(d) não apresenta conflitos
b) Construa o grafo de precedências para o escalonamento apresentado.
O grafo iria conter um nó para cada transacção e os seguintes arcos:
•De T1 para T3 (R1(a) e W3(a))
•De T2 para T1 (W2(d) e R1(d))
•De T2 para T3 (W2(b) e W3(b))
•De T2 para T4 (R2(c) e W4(c))
•De T2 para T5 (W2(b) e W5(b))
•De T3 para T5 (W3(b) e W5(b))
•De T4 para T3 (R4(a) e W3(a))
•De T5 para T4 (R5(c) e W4(c))
T2
T1
T5
T3
T4
c) O escalonamento apresentado é conflict-serializable? Justifique a sua resposta.
Existe um ciclo: T5 -> T4 -> T3 -> T5. O escalonamento
apresentado não é conflict-serializable.
d) Considere as instruções envolvidas no escalonamento apresentado. Coloque as
instruções de trinco apropriadas, obedecendo ao protocolo 2PL.
T1 - Lock-S(a); R1(a); Lock-S(d); R1(d); Unlock(d); Unlock(a);
T2 – Lock-X(b); W2(b); Lock-S(c); R2(c); Lock-X(d); W2(d); Unlock(d);
Unlock(c); Unlock(b)
T3 – Lock-X(a); W3(a); Lock-X(b); W3(b); Unlock(b); Unlock(a);
T4 – Lock-S(a); R4(a); Lock-X(c); W4(c); Unlock(c); Unlock(a);
T5 – Lock-S(c); R5(c); Lock-X(b); W5(b); Unlock(b); Unlock(c);
e) Diga o que entente por serializability e justifique se o protocolo de locking usado na
alínea d garante esta propriedade.
Um escalonamento (i.e. uma ordenação temporal para as operações das várias
transacções) é serializável se apresenta a propriedade serializability property,
i.e. se o seu resultado (i.e. os valores na base de dados) é igual ao resultado das
mesmas transacções executadas sequencialmente sem sobreposição. O
protocolo 2PL assegura conflict serializability, i.e. a equivalência com um
escalonamento série com as mesmas transacções, tal que os dois
escalonamentos tenham os mesmos conjuntos de operações em conflito
cronologicamente ordenados.
f) Podem ocorrer deadlocks sob o resultado da alínea d? Justifique a sua resposta.
O protocolo 2PL não oferece garantias sobre a não-ocorrência de
deadlocks. Por exemplo, um deadlock iria ocorrer no seguinte
escalonamento de operações obtido pela introdução de locks seguindo o
protocolo 2PL.
1 : Lock-X(A)
2 : Write(A)
3:
Lock-X(B)
4:
Write(B)
5 : Lock-X(B)
6:
Lock-X(A)
7 : ...
Num dado conjunto de instruções, um deadlock ocorre se as seguintes
condições forem encontradas:
a) Uma transacção está a usar um recurso e impede que outras o usem também.
b) Uma transacção guarda pelo menos um recurso e espera por outros.
c) As transacções têm um ciclo de dependências entre si, o qual causa
o deadlock.
3 - Considere que aquando de uma falha, o log de recuperação um
sistema de base de dados continha a seguinte informação:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
⟨checkpoint, {}, {} ⟩
⟨T1 , Begin⟩
⟨T1 , Insert , p, undoinfo, redoinfo, 105⟩
⟨T2 , Begin⟩
⟨T2 , Delete , p, undoinfo, redoinfo, 107⟩
⟨T1 , Insert , p, undoinfo, redoinfo, 106⟩
⟨T2 , Delete , p, undoinfo, redoinfo, 108⟩
⟨T1 , Insert , p, undoinfo, redoinfo, 109⟩
⟨T2 , Insert , p, undoinfo, redoinfo, 110⟩
⟨T2 , Abort⟩
⟨T2 , UNDO(Insert), undoinfo, redoinfo, 110⟩
Indique as acções envolvidas em cada passo do algoritmo de recuperação ARIES.
Assuma que no início da recuperação, o PageLSN na versão em disco da página p é 108.
Indique claramente:
•Quais os conteúdos da active-transaction-table e da dirty-page-table, reconstruídas
aquando da fase de análise.
•Qual o valor do RedoLSN.
1.Quais os updates realizados no passo de redo.
•Qual o valor do PageLSN na versão em buffer da página p, aquando do final do redo.
1.Quais as acções executadas durante o passo de undo e quais os registos efectuados no
log.
•Qual o valor do PageLSN na versão em buffer da página p, aquando do fim do undo.
1. Na fase de análise, as tabelas de active transactions e
updated pages são inicializadas como vazias.
Lendo do log, obtemos as
seguintes tabelas:
TT:
{(T1 , 111), (T2 , 114)}
DPT:
{(p, PageLSN= 114, RecLSN = 106)}
2. Obtemos RedoLSN = 106.
3 - Na fase de redo, examinamos o log desde o RedoLSN = 106.
104: ⟨checkpoint, {}, {} ⟩
105: ⟨T1 , Begin⟩
Skip
106: ⟨T1 , Insert , p, undoinfo, redoinfo, 105⟩
107: ⟨T2 , Begin⟩
Skip
108: ⟨T2 , Delete , p, undoinfo, redoinfo, 107⟩
Redo
109: ⟨T1 , Insert , p, undoinfo, redoinfo, 106⟩
Redo
110: ⟨T2 , Delete , p, undoinfo, redoinfo, 108⟩
Redo
111: ⟨T1 , Insert , p, undoinfo, redoinfo, 109⟩
Redo
112: ⟨T2 , Insert , p, undoinfo, redoinfo, 110⟩
113: ⟨T2 , Abort⟩
Redo
114: ⟨T2 , UNDO(Insert), undoinfo, redoinfo, 110⟩
4 - PageLSN=114
5-
(111)
115: T1, UNDO(Insert), ..., 109
(110)
116: T2, UNDO(Delete), ..., 108
(109)
117: T1, UNDO(Insert), ..., 106
(108)
118: T2, UNDO(Delete), ..., 107
(107)
119: T2, End
(106)
120: T1, UNDO(Insert), ..., 105
(105)
121: T1, End
6 – PageLSN = 120
b) Uma dirty-page-table reconstruída no passo de redo do algoritmo ARIES pode não ser
exactamente igual à existente durante na altura da falha? Explique que diferenças podem
ocorrer e indique o porquê da sua ocorrência.
Depois do checkpoint e antes da falha, a página p pode ter sido
enviada para o disco e removida da Dirty Page Table. A tabela
reconstruida pode incluir páginas que não estavam na tabela aquando da
falha, e o RecLSN de uma página p na tabela reconstruída pode assim
ser menor do que o RecLSN na tabela antes da falha.
c) No passo redo do algoritmo ARIES, pode-se dar o caso do PageLSN(p) ser maior ou
igual ao LSN do log record para uma modificação em p, embora na dirty-page-table
tenhamos que recLSN(p) ≤ LSN do log record. Explique a que se pode dever a
ocorrência desta situação.
Isto apenas significa que a página em disco é mais recente do
que o resultado da operação para a qual se está a fazer o redo. A
situação por acontecer, por exemplo, quando de uma falha durante um
processo de recovery.
d) No passo redo do algoritmo ARIES, um update é refeito numa página p apenas se o
PageLSN(p) for menor que o LSN do log record para a modificação. Durante o undo,
o PageLSN(p) não é inspeccionado, por forma a verificar que o update a ser desfeito
ocorreu realmente, isto é, que o PageLSN(p) é maior ou igual que o LSN do log
record. Explique porque é que esta verificação não é necessária.
A fase de redo coloca a base de dados no mesmo estado em que se
encontrava aquando da ocorrência da falha. As páginas com updates
executados por transacções activas (no buffer) aquando da falha estão
correctamente no buffer como resultado da fase de redo. Assim, sabemos
que os uptades a serem desfeitos se encontram no buffer, e não
precisamos de examinar o PageLSN.
e) Quais as acções que devem ser tomadas para uma nova falha que ocorra durante a
execução da recuperação, quando o algoritmo ARIES está no meio de i) a sua fase de
análise, ii) a fase de redo, iii) a fase de undo. Explique porquê.
Em todos os casos, recomeçamos o processo de recovery da mesma forma que aquando da
primeira falha.
• A fase de análise lê o log e inicializa algumas estruturas de dados em memoria (i.e. as tabelas
de transacções activas e de páginas actualizadas). Se uma nova falha ocorre, esta informação
é perdida e teremos de a executar a análise novamente.
ii. A fase de redo coloca a base de dados (no buffer) igual aquando da ocorrência da falha. As
páginas são trazidas do disco e actualizadas em memória. No entanto, é possível que o gestor
do buffer escreva algumas destas páginas em disco em algum momento, e portanto o
PageLSNde uma página em disco pode aumentar durante a fase de redo. Aquando de uma
segunda falha, podem existir menos operações de redo para ser executadas.
iii. Na fase de undo, são escritos os log records para as operações de undo que forem efectuadas.
Alguns destes log records podem estar já actualizados em disco quando a nova falha ocorre, o
que significa que a próxima recuperação pode fazer mais na fase de redo, uma vez que se
pode fazer o redo para todas as operações que estavam em disco. Depois da fase de redo da
nova recuperação, podemos continuar a fazer o undo das transacções que começamos a
desfazer durante a primeira recuperação, mas podemos ter menos operações para desfazer
caso as operações de undo da primeira recuperação tenham sido executadas durante a fase de
redo. Em suma, não é necessário fazer o undo das operações de undo feitas aquando da
primeira recuperação.
f) Durante a execução normal de transacções, muita informação é registada nos logs. Até
que localização (i.e. LSN) é possível apagar o início do ficheiro de log, por forma a
descartar registos antigos? Explique porquê.
Considere-se que TT é a transaction table que foi escrita para o disco, e PT é
a dirty page table criada no mesmo instante durante o checkpoint. Vamos
definir os seguintes LSNs:
n1 = min {O LSN da primeira log entry de T|T ∈ TT}
n2 = min {RecLSN(p) | p ∈ PT}
n3 = Begin-Checkpoint-LSN
Do log, podem ser descartadas as entradas que têm um LSN menor que n =
min {n1 , n2 , n3 }. Só a partir deste ponto temos a garantia que os registos
não serão usados numa tarefa de recuperação.
4 - No contexto do SQL Server 2005, explique em que consiste a técnica de log shipping
e indique para que finalidade pode a mesma ser utilizada. Indique ainda outras técnicas
suportadas pelo SQL Server 2005 para lidar com o mesmo problema.
Log shipping é uma técnica para automatizar o backup das transaction log
files num servidor SQL em produção (com uma dada periodicidade de
tempo) e fazer o restore num servidor standby. Executar continuamente o
backup e o restore das transaction log files faz com que os dois servidores
se encontrem praticamente sincronizados. Em caso de falha no servidor
em produção, basta redireccionar os utilizadores para o servidor que se
encontrava em standby. Uma técnica similar suportada pelo SQL Server
2005 dá pelo nome de database mirroring, envolvendo a gestão de duas
cópias imediatamente sincronizadas da base de dados, em dois servidores
diferentes.
Download

Solução - Técnico Lisboa