Número: Nome: -------------------------------------------------------------------------------------------------------------- INSTITUTO SUPERIOR TÉCNICO Administração e Optimização de Bases de Dados Exame - Solução Julho 9 -------------------------------------------------------------------------------------------------------------- A duração deste exame é de H3. É um exame com consulta. O número total de pontos é. Marque as suas respostas NA FOLHA DE EXAME. Escreva o seu número e nome no topo de cada página. Escreva todas as fórmulas. Para o uso oficial somente 3 4 5 SUM 5 5 5 3
Número: Nome:. (v) Miscelânea Indique, nas alíneas seguintes, quais as verdadeiras e as falsas. Cada alínea certa tem a cotação completa de.5 valores. Por cada alínea errada são descontados. valores da cotação total da pergunta. a) O SQL Server 8 permite a utilização do query hint FASTFIRSTROW, levando a que o optimizador de interrogações opte por uma estratégia de execução que maximiza a velocidade de retorno do primeiro tuplo. V b) O optimizador do SQL Server 8 iria, em princípio, optar por um algoritmo merge join em lugar de um hash join no caso de uma das tabelas envolvidas numa junção ser grande e a outra pequena. F c) Num índice do tipo árvore B+, a estrutura da árvore final depende da ordem porque são inseridas as chaves (i.e., se as chaves forem inseridas por uma ordem diferente, a árvore resultante poderá ser diferente). V d) Num índice do tipo extendable hashing, a estrutura final depende da ordem pela qual são inseridas as chaves (i.e., se as chaves forem inseridas por uma ordem diferente, a estrutura resultante poderá ser diferente). Assuma que não existem overflow buckets e que a ordem das chaves nos buckets não é relevante. F e) Numa caso de uma relação não ordenada que não cabe totalmente em memória, para executar uma selecção é mais eficiente ordenar a tabela e executar uma pesquisa binária do que executar um scan total à tabela. F f) A fase de REDO do algoritmo de recuperação ARIES inicia-se na localização correspondente ao último checkpoint. F g) O estado de um SGBD, depois da execução do terminada a execução do algoritmo de recuperação ARIES, reflecte sempre os efeitos de todas as transacções que tenham feito o commit antes de um crash do sistema. V h) Uma relação normalizada conduz sempre a interrogações mais eficientes do que uma relação desnormalizada. F
Número: Nome: 3. (5v) Índices.. (.5 valores) Num SGBD relacional é possível existirem dois índices primários sobre a mesma tabela? Justifique a sua resposta. Não. Os índices primários caracterizam-se por ter uma chave de pesquisa na mesma ordem que aquela que é usada para a ordenação física dos dados da relação. Como apenas pode haver uma única ordem na disposição física dos dados, apenas pode existir um único índice primário para cada relação... (3.5 valores) Considere uma estrutura de dados extendable hash com 4 valores em cada bucket, que representa um índice para um atributo do tipo inteiro. Assuma que a função de dispersão associada à estrutura de dados é a seguinte: h(x) = x mod a) ( valores) Partindo de uma tabela vazia, desenhe o resultado dos vários passos de inserção à medida que insere os elementos,,, 3, 6,, 4, 7, e 5. Inserção do,, e 3 3... Inserção do 6, seguindo-se o 6 3 6 4 3 Inserção do 4
Número: Nome: 4 6 4 3 7 Inserção do 7 e do 6 4 Inserção do 5 3 7 5
Número: Nome: 5 b) (.5 valores) Insira o valor 8 sobre a estrutura resultante da alínea anterior. 8 3 3 7 5 3 6 4
Número: Nome: 6 3. (5v) Processamento e optimização de interrogações 3.. ( valor) Considere duas relações R e R. Assuma que R pode ser contida totalmente em memória e que R é demasiado grande para caber totalmente em memória. Usaria o mesmo algoritmo para ordenar ambas as relações? Justifique a sua resposta. Não. Para a relação que cabe totalmente em memoria, usaria o algoritmo quicksort para ordenar a relação. Para a relação que não cabe totalmente em memoria, usaria o algoritmo sort-merge. O desempenho médio do quicksort é melhor do que o sort-merge, mas apenas assumindo um tempo de acesso constante para todos os objectos a ordenar. Este pressuposto pode ser verdadeiro no caso de objectos armazenados em RAM, mas falha no caso de objectos armazenados em disco (o tempo de acesso para leituras sequenciais é muito menor do que para leituras aleatórias). 3.. ( valor) Considere um optimizador de interrogações semelhante ao proposto pelo Sistema R da IBM. Indique, justificando a sua resposta, duas razões possíveis para o optimizador poder produzir planos de execução sub-óptimos. Duas respostas possíveis seriam: O optimizador do sistema R apenas considera planos de execução left-deep. No entanto, planos de execução diferentes podem ser mais eficientes, explorando por exemplo funcionalidades tais como o paralelismo na execução das operações. As estimativas de custo para as operações envolvidas são apenas valores aproximados. As estimativas não levam em conta aspectos tais como a existência de valores em cache, ou a proximidade física dos dados armazenados no disco. 3.3. (3 valores) Considere as relações R(A,B,C), R(C,D,E) e R3(E,F), respectivamente com chave primária A, C e E. Considere também que a relação R contém 5 tuplos, a relação R contém tuplos e a relação R3 contém 6 tuplos. a) ( valor) Estime, justificando com os cálculos necessários, o tamanho máximo em termos do número de tuplos para a relação resultante da seguinte operação: R x R x R3
Número: Nome: 7 Vamos fazer o join de R com R pelo atributo C, e depois fazer o join do resultado anterior com R3 pelo atributo E. Para a operação R x R, têm-se que em R o atributo C pode tomar 5 valores (distintos ou não) e em R o atributo C toma obrigatoriamente valores distintos. O resultado da operação tem um tamanho máximo de 5 tuplos (e.g., para cada um dos 5 valores distintos de C em R, existe um valor correspondente em R). Temos depois 5 valores para o atributo E em R x R, distintos ou não, e para cada um deles pode existir uma correspondências no atributo E de R3. O número total de tuplos é então, no máximo, de 5. b) ( valor) Indique uma estratégia eficiente para calcular a junção das 3 relações. Justifique a sua resposta. Assumindo que o SGBD cria automaticamente um índice primário sobre os atributos chave das relações envolvidas: - Índex nested loop join entre R e R (com R como a ínner relation) - Índex nested loop join entre o resultado do passo anterior e R3 (com R3 como a inner relation), potencialmente explorando o pipelining dos resultados. Note-se que a alternativa de fazer primeiro a junção entre R e R3 (usando o índice em R3) também poderia explorar um algoritmo do tipo nested loop join, mas teria um custo mais elevado pois a inner relation em R x R3 tem um número de tuplos maior e o número de tuplos de R x R é menor que o número de tuplos de R x R3. Assumindo que não existem índices, todos os joins poderiam ser efectuados através do algoritmo nested loop join. A estratégia mais eficiente passaria por juntar R com R primeiro (usando R como a inner relation), pois o número de tuplos desta junção é menor do que o de R x R3, restringindo-se assim tão cedo quanto possível o número de tuplos a considerar na segunda junção. c) ( valor) Suponha que, ao desenhar a base de dados, foi decidido que em vez das três relações R, R e R3, teríamos apenas uma única relação R(A,B,C,D,E,F), equivalente ao resultado da operação R x R x R3. Indique, justificando, quais as vantagens e desvantagens desta abordagem? Vantagens : - Melhor desempenho na obtenção dos tuplos correspondentes á operação de join (custo de um scan à tabela, em lugar do custo associado às operações de junção)
Número: Nome: 8 Desvantagens: - Problemas inerentes à desnormalização dos dados (i.e., armazenamento de informação redundante e anomalias na actualização da informação). - Potencias problemas em termos de contenção no acesso aos dados (i.e. locks, mesmo que efectuados ao nível dos tuplos, seriam sempre efectuados sobre quantidades maiores de informação). 3 Pior desempenho para interrogações que apenas necessitassem de aceder a algumas das colunas da relação R. 4. (5v) Transacções, controlo de concorrência e gestão de recuperação 4.. (.5 valores) Considere o algoritmo de recuperação ARIES. Responda a cada uma das seguintes alíneas, justificando claramente a sua resposta. a) O que fazem os checkpoints periódicos e qual a sua principal vantagem. A operação de checkpointing, no ARIES, escreve um registo de checkpoint no ficheiro de log, em memoria estável, que contem a lista de transacções activas e a lista de páginas modificadas existentes em buffer. Os checkpointings periódicos diminuem o tamanho do log a analisar durante a recuperação, ajudando assim a minimizar o tempo necessário à execução da recuperação, b) Qual o propósito de se criarem compensation log records (CLRs). Os CLRs registam no log as operações de UNDO efectuadas durante a recuperação, levando a que o algoritmo de recuperação não faça UNDO de passos que já tenham sido desfeitos anteriormente. c) Ao executar o algoritmo, como é que um sistema sabe quais as transacções que devem ser desfeitas? Usando a tabela de transacções construída aquando da fase de análise, o algoritmo identifica todas as transacções activas aquando do crash do sistema (i.e., as transacções que não fizeram ainda o commit respectivo). Esta tabela contem a lista de transacções activas na altura de checkpointing. A esta lista, são acrescentadas as transacções que se iniciaram após o checkpointing e não fizeram commit até á ocorrência da falha. 4.. (3.5 valores) Considere as seguintes 3 transacções e o seguinte escalonamento concorrente das 3 transacções:
Número: Nome: 9 T: begin(); write(x); read(y); write(z); commit(); T: begin(); read(x); write(z); commit(); T3: begin(); read(z); write(y); commit(); T3:read(z), T:read(x), T:write(x), T3:write(y), T:read(y), T:write(z), T:write(z) a) ( valor) Apresente o grafo de precedências para o escalonamento concorrente das 3 transacções. Preencha também a tabela de conflitos entre as três transacções T T T3 Aresta no grafo Existe conflito? Razão para o conflito T -> T Não T -> T3 Não T -> T Sim Passos e 3 (e ainda passos 6 e 7) T -> T3 Não T3 -> T Sim Passos e 7 (e ainda passos 4 e 5) T3 -> T Sim Passos e 6 b) ( valor) O escalonamento concorrente é serializável? Em caso afirmativo, apresente um escalonamento série correspondente. Caso contrário, justifique o porquê da sua resposta. Sim, pois o grafo de precedencias não apresenta ciclos. Um escalonamento série equivalente seria T3, T, T. c) (,5 valores) Considere um protocolo two-phase locking, em que uma transacção adquire sempre um lock sobre um objecto antes de o utilizar. O escalonamento concorrente apresentado poderia ter sido produzido através do protocolo two-phase locking? Justifique claramente a sua resposta.
Número: Nome: Não, o escalonamento não poderia ter sido produzido através de um protocolo twophase-locking. O two-phase locking não permite que uma transacção adquira mais locks depois de ter libertado alguns. No escalonamento apresentado esta regra é quebrada, visto que por exemplo a transacção T adquire um lock em x no passo e depois liberta-o antes do passo 3 (uma vez que a transacção T necessita de adquirir o lock em x antes do passo 3), e no entanto a mesma transacção T necessita de adquirir um lock em z antes do passo 6. 5. (3v) Database tuning Considere duas relações R(a,b) e S(a,c). Assuma que todos os atributos são inteiros e que ambas as relações contêm N tuplos, em que N excede a capacidade da memória RAM. Considere ainda a seguinte interrogação SQL: SELECT R.a FROM R, S WHERE S.c > AND R.a = S.a 5.. (.5 valores) Escreva duas expressões em álgebra relacional equivalentes à interrogação SQL apresentada. R.a ( S.c > (R x R.a=S.a S)) R.a ( S.c > (S) x R.a=S.a R) 5. ( valor) Qual das duas expressões apresentadas na alínea anterior é, em princípio, mais eficiente? Justifique a sua resposta. A segunda expressão seria a mais eficiente. Ao efectuar a selecção sobre a relação S antes da junção entre as duas tabelas eliminam-se tuplos da relação S, diminuindo-se assim o custo da operação de junção. 5.3 (.5 valores) Para as mesmas relações, considere as seguintes duas interrogações SQL equivalentes: SELECT R.a FROM R WHERE R.a NOT IN (SELECT S.a FROM S WHERE S.c=); (SELECT R.a FROM R) EXCEPT (SELECT S.a FROM S WHERE S.c=); Assumindo que não existem índices e que o SGBD executa a primeira interrogação de uma forma simplista (i.e., calcula a sub-interrogação para cada tuplo de R), qual das interrogações
Número: Nome: SQL lhe parece ser mais eficiente? Justifique a sua resposta, estimando o custo para cada uma das interrogações em termos do tamanho das relações R e S. A segunda interrogação será a mais eficiente. O custo da primeira interrogação corresponde ao algoritmo nested loop join = NPagsR*NPagsS + NPagsS no máximo A operação de diferença pode ser executada usando uma variante do algoritmo de merge-join, após a ordenação das relações de entrada ou uma variante do algoritmo hash-join. No caso do algoritmo hash-join, o custo é no máximo: 3*(NPagsR + NPagsS)