26
Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Embed Size (px)

Citation preview

Page 1: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Algoritmos para Operação de Junção

Loops Aninhados

AULA 17 Profa. Sandra de Amo

GBC053 – BCC

Page 2: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Operadores do SQLEMP(ENUM,ENOME,SAL,DNUM)

DEPT(DNUM,DNOME,ORC)

SELECT Sal. EMP

FROM EMP, DEPT

WHERE DEPT.DNUM = EMP.DNUM

AND DEPT.ORC > 40 mi

JUNÇÃO por DNUM

PROJEÇÃO EM Sal

SELEÇÃO ORC > 40mi

Quais os salários dos empregados que trabalham em departamentos com orçamento acima de 40 milhões de reais ?

Page 3: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Nesta aula Vamos estudar 3 algoritmos que

implementam a operação de Junção (JOIN)

Vamos calcular seus respectivos custos

Page 4: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Tabelas a serem juntadas R : tabela externa

M páginas Pr tuplas por página

S : tabela interna N páginas Ps tuplas por página

Condição de Junção: Ri = Sj Custo de uma operação de I/O = 10ms

Page 5: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Nested Loops Join – tupla a tuplaPara cada tupla r ε R faça

Para cada tupla s ε S faça

se ri = sj então

insere <r,s> em Result

Retorne Result

t

Páginas de S

Página de R

Page 6: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Custo do NLJ - t/t S é escaneada Pr . M 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 = Pr. M. N + M Não se considera o custo de escrever o

resultado, pois é igual para todos os métodos.

Page 7: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Exemplo

M = 1000 páginas Pr = 100 registros por página N = 500 Custo = 1000 + 100.1000.500 = 50.000.100 I/Os

~ 140 horas de processamento !!

Page 8: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Como otimizar o NLJ-tt ?

Custo = M + Pr.M. N

Reduzir o número de scans da tabela interna ? Reduzir o tamanho

tabela interna ?

NLJ- pag a pag Block Nested Loop Join (BNL)

Index Nested Loop Join

Page 9: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Nested Loops Join – página a páginaPara cada R-page de R faça

Para cada S-page de S faça

se ri = sj então

insere <r,s> em Result

Retorne Result

Páginas de S Página de R

Page 10: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Custo do NLJ- p/p S é escaneada M 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 = M + M. N Não se considera o custo de escrever o

resultado, pois é igual para todos os métodos.

Page 11: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Exemplo M = 1000 páginas N = 500 Custo = 1000 + 1000.500 = 501.000 I/Os

~ 1,4 horas de processamento

Page 12: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

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 <r,s> em Result

Retorna Result

Relação S inteira

Buffer

Página de R Página de output

Custo = M + N I/OsNo exemplo :1500 I/Os = 15 segundos

Page 13: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

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 <r,s> em Result

Retorna Result

Bloco de B-2 páginas de R

Buffer tem capacidade para B páginas

Página de S Página de output

Page 14: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Esquema Geral do BNL Join

Bloco de B-2 páginas de R

Buffer tem capacidade para B páginas

Página de S Página de output

Relações R e S

DiscoDisco

Relação R S

Page 15: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

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 = M + K.N = M + [M/(B-2)]N Não se considera o custo de escrever o resultado,

pois é igual para todos os métodos.

Page 16: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

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

~ 1 minuto

Page 17: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

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 <r,s> em ResultRetorna Result

Page 18: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Otimizações do BNL Join1. 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.

Page 19: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Otimizações do BNL Join2. 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) ?

Page 20: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

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

Page 21: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Index Nested Loops JoinSe 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 <r,s> em ResultRetorna Result

Usa o índice em S para encontrar todas as tuplas de S com sj = ri

Page 22: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Custo do INL Join Para cada r = <r1,...,ri,...,rn>

Custo para encontrar todas as tuplas de S com sj = ri

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 si= rj.

Page 23: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Custo do INL Join Custo Total em caso de índice hash agrupado:

M + Pr.M . (2 + 1)

Custo Total em caso de índice B-tree agrupado M + Pr.M. (4 + 1)

Page 24: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

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

Page 25: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

Exemplo 2 Tamanho de S = M = 1000 páginas (INTERNA)Tamanho de R = N = 500 páginas (EXTERNA)80 tuplas por página na relação externa R100 tuplas por página na relação interna S S tem indice hash no atributo de junção Atributo de junção não é chave da relaçãonão é chave da relação S

CASO 1: Indice é agrupado

CUSTO = 500 + 80 . 500 (1,2 + 1) = 500 + 40000(2,2) = 88500 I/Os = 15 min

CASO 2 : Indice é não é agrupado Supondo que há distribuição uniforme dos valores do atributo A em S: cada tupla de R

‘casa’ com 2,5 tuplas de S. Total de tuplas de S = 100*1000= 100.000 Total de tuplas de R = 500* 80 = 40.000CUSTO = 500 + 80 . 500 (1,2 + 2,5) = 148.500 I/Os = 25 min

Page 26: Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC

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