fenix.tecnico.ulisboa.pt · 3.1) (2v) considere uma árvore b+ com n=3 que representa um índice...

14
Número:_________________ Nome: _________________________________________ 1 -------------------------------------------------------------------------------------------------------------- INSTITUTO SUPERIOR TÉCNICO Administração e Optimização de Bases de Dados Exame 1 - solução 2 Julho 2009 -------------------------------------------------------------------------------------------------------------- A duração deste exame é de 2H30. É um exame com consulta. O número total de pontos é 20. 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 1 2 3 4 5 6 SUM 2 2 4 4 4 4 20

Upload: lynhu

Post on 27-Jan-2019

212 views

Category:

Documents


0 download

TRANSCRIPT

Número:_________________ Nome: _________________________________________

1

--------------------------------------------------------------------------------------------------------------

INSTITUTO SUPERIOR TÉCNICO Administração e Optimização de Bases de

Dados

Exame 1 - solução 2 Julho 2009 --------------------------------------------------------------------------------------------------------------

• A duração deste exame é de 2H30. • É um exame com consulta. • O número total de pontos é 20. • 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

1 2 3 4 5 6 SUM 2 2 4 4 4 4 20

Número:_________________ Nome: _________________________________________

2

1. (2v) Miscelânea 1.1)(1v) Relativamente ao SQL Server 2008, indique nas alíneas seguintes quais as verdadeiras e as falsas. Cada alínea vale 0,25 valores. Se acertar, tem a cotação toda; se errar, é-lhe descontado 0,1 valores por cada alínea errada. a) Uma base de dados SQL Server 2008 pode conter vários data files e vários log files,

ambos organizados em um ou vários file groups. F

b) Uma interrogação SQL que utiliza o hint NOLOCK apresenta um comportamento equivalente à utilização do nível de isolamento READ UNCOMMITED. V b) O SQL Server 2008 suporta transparentemente o particionamento horizontal e vertical de

índices e tabelas. F d) O SQL Server 2008 suporta a criação de vistas materializadas. V 1.2)(1v) Indique se as seguintes afirmações são verdadeiras ou falsas. Cada alínea vale 0,25 valores. Se acertar, tem a cotação toda; se errar, é-lhe descontado 0,1 valores por cada alínea errada.

a) Um índice do tipo extendable hash tem a vantagem de suportar de forma eficiente pesquisas por intervalos de valores, enquanto que um índice baseado em hash convencional apenas suporta pesquisas por condições de igualdade.

F

b) O nível de isolamento REPETABLE READ está sujeito a anomalias do tipo phantom reads.

V

c) O algoritmo ARIES garante que uma operação de REDO nunca é feita mais que uma vez. F d) O algoritmo ARIES garante que uma operação de UNDO nunca é feita mais que uma vez. V

Número:_________________ Nome: _________________________________________

3

2. (2v) Sistema de Ficheiros 2.1) (0,5v) Apresente um comando T-SQL que permita criar uma base de dados com o seguinte conjunto de características: A base de dados deve chamar-se BDExameAOBD e deve conter ter dois ficheiros de dados, ambos no filegroup primário. O primeiro ficheiro de dados deve ter um tamanho inicial de 100MB, e o segundo ficheiro deve ter um tamanho inicial de 200MB. A base de dados deve ainda ter um ficheiro de log com um tamanho inicial de 50MB. Tanto os data files como o ficheiro de log devem ter um tamanho máximo de 500MB, crescendo a uma taxa de 10%. CREATE DATABASE BDExameAOBD ON PRIMARY (NAME=AOBD_P1,FILENAME="C:\DBF1.MDF", SIZE=100,MAXSIZE=500,FILEGROWTH=10%), (NAME=AOBD_P2,FILENAME="C:\DBF2.NDF", SIZE=200,MAXSIZE=500,FILEGROWTH=10%), LOG ON (NAME=AOBD_L,FILENAME="C:\DBL.LDF", SIZE=50,MAXSIZE=500,FILEGROWTH=10%); 2.2) (0,5v) Considere que, para a base de dados da alínea anterior, se pretendiam armazenar os dois ficheiros de dados em filegroups distintos (i.e., o primeiro ficheiro de dados no filegroup primário e outro no secundário). Apresente a instrução T-SQL correspondente a este caso e indique uma potencial vantagem desta divisão em dois filegroups distintos. CREATE DATABASE BDExameAOBD ON PRIMARY (NAME=AOBD_P1,FILENAME="C:\DBF1.MDF", SIZE=100,MAXSIZE=500,FILEGROWTH=10%), FILEGROUP AOBD_SECONDARY (NAME=AOBD_N1,FILENAME="C:\DBF2.NDF", SIZE=200,MAXSIZE=500,FILEGROWTH=10%), LOG ON (NAME=AOBD_L,FILENAME="C:\DBL.LDF", SIZE=50,MAXSIZE=500,FILEGROWTH=10%);

Número:_________________ Nome: _________________________________________

4

1.3) (1v) Indique se, no SQL Server 2008, cada base de dados pode ter vários ficheiros de log. Em caso de resposta afirmativa, indique ainda se estes ficheiros de log podem ser associados em filegroups distintos. No SQL Server 2008, cada base de dados pode também ter vários log files. No entanto, estes não se encontram organizados em file groups. Apenas os data files são organizados em file groups.

Número:_________________ Nome: _________________________________________

5

3. (4v) Índices 3.1) (2v) Considere uma árvore B+ com n=3 que representa um índice para um atributo do tipo inteiro. Partindo de uma árvore vazia, desenhe o resultado dos vários passos de inserção à medida que insere os elementos 62, 81, 35, 41, 13, 22, 73, por esta ordem. 62 inserção do 62 62 81 inserção do 81 81 inserção do 35 35 62 81 62 81 inserção do 41 35 41 62 81 62 inserção do 13 41 81 13 35 41 62 81 62 inserção do 22 35 41 81 13 22 35 41 62 81

Número:_________________ Nome: _________________________________________

6

62 inserção do 73 35 41 81 13 22 35 41 62 73 81 3.2) (2v) Desenhe o resultados dos vários passos de remoção à medida que remove os mesmos elementos da alínea anterior, pela mesma ordem (i.e. do elemento 62 até ao elemento 73) até chegar a uma árvore vazia.

62 árvore inicial 35 41 81 13 22 35 41 62 73 81 62 remoção do 62 35 41 81 13 22 35 41 73 81 41 remoção do 81 35 62 13 22 35 41 73

Número:_________________ Nome: _________________________________________

7

41 62 remoção do 35 13 22 41 73 62 remoção do 41 13 22 73 62 remoção do 13 22 73 73 remoção do 22 EMPTY remoção do 73

Número:_________________ Nome: _________________________________________

8

4. (4v) Processamento e optimização de interrogações Considere o seguinte esquema relacional e a seguinte interrogação sobre o esquema. LOJA(IDL,NOME,LOCALIZACAO,VVENDAS) // 1000 tuplos - IDL chave primária EMPREGADO(BI,IDD,SALARIO) // 20000 tuplos - BI chave primária DEPARTAMENTO(IDD,IDL,NOME) // 1000 tuplos - IDD chave primária SELECT E.BI, L.IDL, D.NOME FROM EMPREGADO E, LOJA L, DEPARTAMENTO D WHERE D.IDL=L.IDL AND L.VVENDAS<500.000 AND E.IDD=D.IDD AND E.SALARIO>2500 Assuma que o atributo EMPREGADO.SALARIO está uniformemente distribuído no intervalo 500-5000 e que o atributo LOJA.VVENDAS está uniformemente distribuído no intervalo 100.000-800.000. Assuma ainda que existe um índice clustered no atributo EMPREGADO.SALARIO, um índice clustered em LOJA.IDL, e um índice clustered em DEPARTAMENTO.IDD. 4.1) (0,5v) Explique por palavras suas qual o resultado obtido pela interrogação SQL que se apresenta. Solução: Quais os empregados (i.e., o seu BI, o nome do seu departamento, e o ID da loja correspondente ao seu departamento) com um salário superior a 2.500 Euros que trabalham em lojas com um volume de vendas inferior a 500.000 Euros. 4.2) (1v) Liste os planos de execução considerados por um optimizador semelhante ao do sistema-R para a interrogação apresentada. Solução: Um optimizador semelhante ao do sistema R iria aplicar as condições de selecção tão cedo quanto possível e iria ignorar planos envolvendo produtos cartesianos. Seriam assim considerados os seguintes planos de execução: 1- ΠBI,NOME((Π IDL(σvvendas<500000(LOJA)) |x| DEPARTAMENTO) |x| σ salario>2500(EMPREGADO)) 2- ΠBI,NOME((DEPARTAMENTO |x| Π IDL(σvvendas<500000(LOJA))) |x| σ salario>2500(EMPREGADO)) 3- ΠBI,NOME((σ salario>2500(EMPREGADO) |x| DEPARTAMENTO) |x| Π IDL(σvvendas<500000(LOJA))) 4- ΠBI,NOME((DEPARTAMENTO |x| σ salario>2500(EMPREGADO)) |x| Π IDL(σvvendas<500000(LOJA)))

Número:_________________ Nome: _________________________________________

9

4.3) (1,5v) Dos planos considerados anteriormente, qual seria o que apresenta um custo estimado mais baixo? Selecção sobre a relação EMPREGADO retorna aproximadamente 11112 tuplos (2500 * 20000) / (5000 - 500) Selecção sobre a relação LOJA retorna aproximadamente 572 tuplos (((500000-100000) * 1000) / (800000 - 100000)) No calculo do número de tuplos das relações EMPREGADO e LOJA, poderia alternativamente ser usado um método baseado no histograma dos valores. O plano de execução 2 seria mais eficiente do que o 1, uma vez que o join entre as relações LOJA e DEPARTAMENTO poderia ser efectuado através de um índex nested loop join (índice clustered no atributo LOJA.IDL) ao invés de um nested loop join. O plano de execução 3 seria mais eficiente do que o 4, uma vez que o join entre as relações DEPARTAMENTO e EMPREGADO poderia ser efectuado através de um índex nested loop join (índice clustered no atríbuto DEPARTAMENTO.IDD). O plano de execução 3 poderia utilizar um índex nested loop join para efectuar o join com a relação LOJA (índice clustered no atributo LOJA.IDL). Para um join R |x| S, o custo de um índex nested loop join é dado por:

num-blocos(R) + num-tuplos(R)*custo_pesquisa_index Este custo varia com o facto do índice ser hash/B+Tree, assim como com o facto de o índice ser clustered ou non-clustered (no nosso caso temos índices clustered) Custo do plano de execução 2 = aproximadamente (1000 * 2) + (572 * 11112) Custo do plano de execução 3 = aproximadamente (11112 * 2) + (11112 * 2) O plano de execução 3 seria o mais eficiente. 4.4) (1v) Se o índice em DEPARTAMENTO.IDD fosse unclustered, o custo estimado anteriormente mudaria substancialmente? Justifique a sua resposta O custo do join entre as relações EMPREGADO e DEPARTAMENTO iria aumentar, pois o custo do índex nested loop join varia com o facto do índice ser clustered ou non-clustered. No entanto, este custo não iria variar de forma muito significativa (i.e., o plano de execução 3 continuaria a ser o mais eficiente).

Número:_________________ Nome: _________________________________________

10

5. (4v) Transacções, controlo de concorrência e gestão de recuperação 5.1) (1v) Considere a técnica de checkpointing no sistema de recuperação de um dado SGBD. a) (0,5v) Indique como a frequência dos checkpoints afecta o desempenho do sistema quando não ocorrem falhas. b) (0,5v) Indique como a frequência dos checkpoints afecta o tempo necessário para recuperar de uma falha do sistema. Solução: a) Uma frequência muito grande de checkpoints causa um pior desempenho, uma vez que são utilizados diversos recursos sempre que um checkpoint é executado. Num sistema em que as falhas são pouco frequentes, ou a sua recuperação não é crítica, a frequência dos chekpoints deve ser menor. b) Sem checkpoints, todo o log teria que ser lido e todas as transacções refeitas/desfeitas. Com checkpoints, a recuperação pode ser feita acedendo apenas aos registos posteriores ao checkpoint e a poucos anteriores ao checkpoint. Portanto, se os checkpoints forem mais frequentes, a recuperação deverá ser muito mais rápida. 5.2) (2v) Considere um esquema de recuperação que use modificação imediata. Mostre, através de um exemplo, como a base de dados pode ficar num estado inconsistente se não fôr garantido que o log de recuperação é escrito em disco antes das páginas de dados. Solução: Considere a seguinte transacção, onde é feita a transferência de 50 euros da conta bancária A para a conta bancária B: a. read(A,a1) b. a1 := a1 - 50 c. write(A,a1) d. read(B,b1) e. b1 := b1 + 50 f. write(B,b1) Suponha que o sistema falha após o commit, mas antes dos registos do log terem sido escritos em disco. Suponha também que, aquando da falha as alterações feitas a A já estavam escritas nos disco, mas não as alterações feitas a B. Ao reiniciar o sistema, a base de dados estaria incosistente. No entanto, como os registos do log não estavam em disco, não seria possível recuperar o estado anterior.

Número:_________________ Nome: _________________________________________

11

5.3) (1v) Quais as vantagens e desvantagens de usar uma técnica de modificação imediata, quando comparada com uma técnica de modificação diferida? Solução: A modificação imediata tem as seguintes vantagens: - Todas as leituras podem ser feitas da base de dados, uma vez que todas as modificações são imediatamente propagadas. - Permite mais concorrência, porque pode libertar os locks de escrita assim que as modificações são feitas. - Não precisa de tanto espaço em memória, porque não precisa de manter uma grande lista de modificações e logs em buffer. Tem, no entanto, as seguintes desvantagens: - É mais difícil de implementar que a modificação diferida. - Tem um maior custo de I/O, porque as operações são feitas imediatamente, em vez de todas em conjunto quando a transacção termina. - Os logs requerem mais espaço, porque é necessário guardar informação para fazer undo. 6. (4v) Database tuning

Número:_________________ Nome: _________________________________________

12

Considere a seguinte relação normalizada, em que a chave primária é o atributo BI: Empregados(BI, NOME, ORDENADO, DEPARTAMENTO, ANO-CONTRATAÇÃO) Existem quatro interrogações igualmente frequentes e importantes: a) Qual o número médio de empregados por departamento? b) Quais os B.I.s de empregados com o salário mais alto? c) Qual o gasto em salários efectuado por cada departamento? d) Quantos empregados foram contratados no ano corrente? 6.1) (1v) Que índices criaria sobre a relação? Para cada índice, indique qual o tipo (i.e., hash ou B+tree) e indique se o índice seria clustered ou non-clustered. Justifique a sua resposta? Solução: SELECT AVG(C) FROM ( SELECT DEPARTAMENTO, COUNT(*) AS C FROM Empregados GROUP BY DEPARTAMENTO) SELECT BI FROM Empregados HAVING SALARIO = (SELECT MAX(SALARIO) FROM Empregados) SELECT DEPARTAMENTO,SUM(SALARIO) FROM Empregados GROUP BY DEPARTAMENTO SELECT COUNT(*) FROM Empregados WHERE ANO-CONTRATACAO=CURRENT_YEAR() Índice clustered sobre o atríbuto departamento (hash). Seria usado nas agregações das interrogações a) e c) Índice non-clustered sobre o atríbuto salário (B+tree). Seria usado na interrrogação b). Índice non-clustered sobre o atríbuto ANO-CONTRATAÇÃO (hash). Seria usado na interrogação d).

Número:_________________ Nome: _________________________________________

13

6.2) (1v) Sugeriria a utilização de algum esquema de particionamento horizontal, como forma de melhorar o desempenho das interrogações? Justifique a sua resposta. Solução: Podia-se particionar a tabela horizontalmente através do atributo "ANO-CONTRATAÇÃO" (ou particionar o índice sobre este atributo). Desta forma, a interrogação 4 seria efectuada apenas sobre a partição correspondente. 6.3) (1v) Que alterações, ao nível do modelo de dados, poderiam trazer benefícios em termos de desempenho? Justifique a sua resposta. Solução: Particionamento vertical da relação Empregados em 4 relações: Empregados1(BI,NOME) Empregados2(BI,DEPARTAMENTO,SALARIO) Empregados3(BI,SALARIO) Empregados4(BI,ANOCONTRATACAO) As interrogações a) e c) usariam a partição 2, a interrogação b) usaria a partição 3 e a interrogação d) usaria a partição 4. Com este esquema de particionamento, o volume de dados lidos em cada interrogação seria inferior (menos páginas em cada uma das partições) A partição vertical 3 poderia ainda ser alvo de uma optimização, através, por exemplo, de um particionamento horizontal que colocasse as contratações do ano corrente numa relação separada das contratações efectuadas no passado.

Número:_________________ Nome: _________________________________________

14

6.4) (1v) Considere que o SGBD apenas implementa os níveis de isolamento READ COMMITED e SERIALIZABLE. Qual o nível de isolamento mais indicado para cada uma das interrogações? Justifique a sua resposta. Solução: a - READ COMITTED. b - SERIALIZABLE. c - SERIALIZABLE. d - SERIALIZABLE. No caso da interrogação 1 (obtenção de um valor médio), assumindo que um pequeno desvio sobre o resultado seria aceitável, pode-se optar por um nível de isolamento mais baixo como forma de evitar problemas de contenção no acesso aos dados por parte de inserções/actualizações efectuadas concorrentemente. Nas restantes interrogações, assumindo que se pretendem obter valores exactos, faria mais sentido usar-se um nível de isolamento mais elevado. Note-se que a introdução de uma pequena perturbação nos valores lidos (e.g., leitura de um valor fantasma) tem um impacto muito menor no calculo de uma média do que no calculo de uma soma.