A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Algoritmos de Junção – BNL e IndexNL AULA 16 Profa. Sandra de Amo GBC053 – BCC 2013-1.

Apresentações semelhantes


Apresentação em tema: "Algoritmos de Junção – BNL e IndexNL AULA 16 Profa. Sandra de Amo GBC053 – BCC 2013-1."— Transcrição da apresentação:

1 Algoritmos de Junção – BNL e IndexNL AULA 16 Profa. Sandra de Amo GBC053 – BCC 2013-1

2 Block Nested Loops Join – uso do Buffer Caso 1: Tem-se espaço suficiente no buffer para a relação S inteira + 2 páginas extras Para cada R-page faça Para cada S-page na memória faça se ri = sj então insere em Result Retorna Result Relação S inteira Buffer Página de RPágina de output Custo = M + N I/Os No exemplo : 1500 I/Os = 15 segundos

3 Block Nested Loops Join – uso do Buffer Caso 2: Tem-se espaço suficiente no buffer para B - 2 páginas da relação R + 2 páginas extras Para cada bloco de (B-2) páginas in memory de R faça Para cada S-page faça se ri = sj então insere em Result Retorna Result Bloco de B-2 páginas de R Buffer tem capacidade para B páginas Página de SPágina de output

4 Esquema Geral do BNL Join Bloco de B-2 páginas de R Buffer tem capacidade para B páginas Página de SPágina de output Relações R e S Disco Relação R S

5 Custo do BNL Join K = Número de blocos de B-2 páginas de M K = [M/(B-2)] Cada página de S é escaneada K vezes Cada scan em S equivale a N operações de I/O (N = número de páginas de S) R é escaneada uma vez Custo total = K.N + M = [M/(B-2)]N + M Não se considera o custo de escrever o resultado, pois é igual para todos os métodos.

6 Exemplo M = 1000 páginas N = 500 B = 102 Custo = (1000/100).500 + 1000 = 6000 I/Os ~ 1 minuto

7 Exercício Calcular o custo do BNL Join, caso a relação S (menor) seja escolhida como a relação externa. Calcular o custo do BNL Join no Caso 1, caso só se tenha espaço suficiente no buffer para B - 2 páginas da relação S + 2 páginas extras Para cada R-page faça Para cada bloco de B-2 páginas de S faça se ri = sj então insere em Result Retorna Result

8 Otimizações do BNL Join 1. Diminuindo o custo de CPU para fazer as junções. Se houver espaço suficiente na memória, construir uma tabela hash para cada R-block carregado na memória, com chave = atributo da junção. Para cada tupla s ε S, para encontrar r ε R-block tal que ri = sj, utiliza-se a tabela Hash construída.

9 Otimizações do BNL Join 2. Ao invés de utilizar B-2 páginas em memória para alocar blocos da relação externa R, e uma só página para a relação S, utilizar (B-1)/2 páginas para alocar um bloco de R e (B-1)/2 páginas para alocar um bloco da relação interna S. Exercício: calcular o custo neste caso. Onde há melhora de performance em relação ao método anterior (onde 1 única página em memória é alocada para a relação S) ?

10 Conclusão Até o momento: NLJ - t/t = 140 horas NLJ - p/p = 1 hora e 24 min BNL Join com B = 102 páginas no buffer = 1 min

11 Index Nested Loops Join Se uma das relações (S) possui um índice nos atributos da junção (chave = atributos da junção) Usa S como a relação interna Para cada tupla r ε R faça Para cada tupla s ε S tal que ri = sj insere em Result Retorna Result Usa o índice em S para encontrar todas as tuplas de S com sj = ri

12 Custo do INL Join Para cada r = Custo para encontrar todas as tuplas de S com s j = r i Se o índice é B-Tree: custo para encontrar a folha apropriada é 2 a 4 I/Os = profundidade da árvore Se o índice é Hash : custo para encontrar o bucket apropriado é 1 a 2 I/Os (2 I/Os caso for extensível com diretório de ponteiros em disco). Se o índice é agrupado: custo de encontrar as tuplas correspondendo ao ponteiro indicado pelo índice é 1 I/O. Se o índice não é agrupado: custo de encontrar as tuplas correspondendo ao ponteiro indicado pelo índice pode ser K I/O, onde K = número de tuplas de S com s i = r j.

13 Custo do INL Join Custo Total em caso de índice hash agrupado: M + (2 + 1).Pr.M Custo Total em caso de índice B-tree agrupado M + (4 + 1).Pr.M

14 Exemplo 1 Tamanho de R = M = 1000 páginas Tamanho de S = N = 500 Pr = 100 tuplas por página S tem indice hash no atributo de junção Atributo de junção é chave da relação S Custo = 1000 + 100.000 (1 + 1,2 ) = 221.000 I/0s = 37 min

15 Exemplo 2 Tamanho de S = M = 1000 páginas Tamanho de R = N = 500 Pr = 80 tuplas por página S tem indice hash no atributo de junção não é chave da relação Atributo de junção não é chave da relação S Custo p/ encontrar a pág. do índice correspondendo a si = rj 500 + 80. 500 (1,2) = 500 + 40000(1,2) = 48500 I/Os Custo p/ encontrar as tuplas em S indicadas pelo ponteiro da entrada Total de tuplas de S = 100.000 Total de tuplas de R = 40.000 Se há distribuição uniforme, cada tupla de R casa com 2,5 tuplas de S. Se o indice de S é agrupado: as tuplas de S que casam com rj estão em uma página: Custo total = 48.500 + 40000 = 88.500 I/Os = 15 min Se o indice de R não é agrupado: Custo total = 48.500 + 2,5. 40000 = 148.500 I/Os = 25 min

16 Conclusão INL Join vale mais a pena quando o índice está na relação maior e é agrupado. Até o momento: NLJ - t/t = 140 horas NLJ - p/p = 1 hora e 24 min BNL Join com B = 102 páginas no buffer = 1 min INL Join com índice agrupado na rel. maior = 15 min INL Join com índice ñ agrupado na rel. maior = 25 min


Carregar ppt "Algoritmos de Junção – BNL e IndexNL AULA 16 Profa. Sandra de Amo GBC053 – BCC 2013-1."

Apresentações semelhantes


Anúncios Google