sistemas de gerência de bancos de dados - ufpa.br · linguagem do usuário linguagem...

46
4 - Consultas e Transações 4.1- Processamento de Consultas Sistemas de Gerência de Bancos de Dados 1

Upload: trinhdat

Post on 02-Dec-2018

234 views

Category:

Documents


0 download

TRANSCRIPT

4 - Consultas e Transações4.1- Processamento de Consultas

Sistemas de Gerência de Bancos de Dados

1

Introdu ção

Etapas do Processamento de uma consulta:

análise sintática e traduçãootimizaçãoexecução

Tópicos:

InterfacesCatálogoExecução Otimização

AnáliseSintática

Otimização

Execução

BD

linguagem do usuário

linguagem intermediária

linguagem interna

linguagem elementar

CAT

2

Interfaces

Linguagem do usuário

Linguagem intermediária

Linguagem interna

Linguagem elementar

3

Interfaces - Linguagem do Usuário

Consultas simples em SQL:

um subconjunto de SQL, incluindo uma cláusula INTO armazenando a resposta e restringindo a qualificação a uma expressão booleana sobre comparações, negadas ou não

Formato genérico de uma consulta:

select <lista resultante> into <relação resultante> from <lista de relações> where <qualificação>

onde a qualificação é uma expressão booleana composta de termos da forma:

seleção r.A<op><constante>restrição r.A<op>r.Bjunção r.a<op>s.B

4

Classificação das cláusulas de uma consulta:

univariável:todos os literais da cláusula são sobre a mesma variável

multivariável

homogênea:a cláusula é univariável, ou todos os literais são sobre as mesmas 2 variáveis

heterogênea

Classificação das Consultas

herdada das classificação das cláusulas

Interfaces - Linguagem do Usuário

5

Interfaces - Linguagem do Usuário

Exemplo:

select F.NOME from FORNECEDOR F, FORNECIMENTO FN, REGIÃO RP1 where F.NUMERO = FN.NUMEROP2 and (FN.CODIGO = 10 or FN.CODIGO = 12)P3 and FN.QUANT > 10.000P4=(P41 or P42) and (F.SEDE = R.ESTADO or F.SEDE = 'DF')P5 and R.NOME = 'CENTRO SUL'

P1 : multivariável e homogênea

P2, P3 e P5 : univariáveis

P4 : multivariável e heterogênea (primeiro literal sobre F e R mas segundo literal sobre F apenas)

6

Interfaces - Linguagem Intermediária

Álgebra relacional simples:

subconjunto da álgebra relacional com o mesmo poder expressivo que o subconjunto de SQL adotado

conjunto de operadores considerado:

projeção proj[X](T)seleção sel[p](T)

junção join[p](T,U)

cartesiano prod(T,U)

união union(T,U)

7

Interfaces - Exemplo

Esquema Conceitual

create table PRODUTO (CODIGO (integer), NOME (char(10)), MELHOR_FORN (integer) )

create table FORNECIMENTO (NUMERO (integer), CODIGO (integer), QUANTIDADE (integer), LOCAL (char(5)) )

Consulta expressa em SQL

select P.CODIGO from PRODUTO P, FORNECIMENTO Fwhere F.NUMERO = '41.738' and F.CODIGO = P.CODIGO and P.MELHOR_FORN = '41.738'

8

Interfaces - Exemplo

Consulta expressa na álgebra

proj[CODIGO.PRODUTO] (join[CODIGO.FORNECIMENTO = CODIGO.PRODUTO] (sel(NUMERO='41.738')(FORNECIMENTO), sel[MELHOR_FORN = '41.738'](MELHOR_FORN)))

proj[CODIGO.PRODUTO]

join[CODIGO.FORNECIMENTO = CODIGO.PRODUTO]

sel(NUMERO='41.738') sel[MELHOR_FORN = '41.738']

FORNECIMENTO MELHOR_FORN

9

Estruturas Internas

tabelas = seqüências de registros internos

tipos de tabelas tabelas externas: tabelas em memória secundária tabelas de inversão: arquivos invertidos para tabelas externastabelas internas: tabelas em memória principaltabelas transientes: agem como área intermediária entre

operações consecutivas

IDR = campo especial dos registros com um identificador único

Interfaces - Linguagem Interna

10

Operações sobre Tabelas

CRIA_TAB(T,X)

CRIA_INV(T,Y,U)

DESTROI(T)

ORD(T,X,tipo;V) onde tipo=ascendente ou descendente

UNIAO(T,U;V)

Interfaces - Linguagem Interna

11

Operações sobre Tabelas

SELEÇÃO(T,X,P(T);V) - seleção sobre T

constrói uma nova tabela V(IDR,X) tal quev é um registro de V sse existe t em T tal que v(X)=t(X) e v(IDR) é uma nova id t satisfaz a P(T)

Interfaces - Linguagem Interna

12

Operações sobre Tabelas

JUNÇÃO(T,U,X,Y,P(T,U),P(T),P(U);V) - junção tradicional

constrói uma nova tabela V(IDR,X,Y) tal quev é um registro de V sse existem t e u em T e U tais que

v(X)=t(X) e v(Y)=u(Y) e v(IDR) é uma nova idt satisfaz a P(T)u satisfaz a P(U)t e u concatenadas satisfazem a P(T,U)

Interfaces - Linguagem Interna

13

Programas na Linguagem Interna:

programas multi-thread cujas operações e estruturas de dados básicassão aquelas descritas anteriormente

Interfaces - Linguagem Interna

14

Interfaces - Linguagem Elementar

Estruturas Físicasarmazena dados, estruturas auxiliares de acesso aos dados, informações de controle, etc...organização:

memória secundária dividida em segmentossegmentos divididos em páginas com id único

Ações Elementares:

R(X) leia todas as páginas cujos id's estão no conjunto XW(X) mova do buffer pool para memória secundária todas as páginas cujos id's estão em Xr(x,p,s) recupere o conteúdo da página x a partir de p até p+s-1w(x,p) mude o conteúdo da página x a partir da posição p (o novo valor e o comprimento foram omitidos...)

15

Catálogo

Informações sobre uma tabela T:

n(T) = número de registros de T

p(T) = número de páginas ocupadas por T

p'(T) = p(T) se T for passada como tabela externa= 0 se T for passada como tabela interna

s(T) = tamanho do registro de T

f(T) = número médio de registros de T por página

f(T) = tamanho da página / s(T) (supondo que T não compartilha páginas com outras tabelas e que os registros de T são de tamanho fixo)

16

Catálogo

Informações sobre uma lista de atributos X de uma tabela T:

V(X,T) = número de valores distintos de X que ocorrem em T

SC(X,T)= número médio de registros de T que satisfazem a uma condição de igualdade em X

SC(X,T)= 1 , se X é chave de TSC(X,T)= n(T) / V(X,T) , se X não é chave de T

MAX(T,X) = maior valor de T[X]

MIN(T,X) = menor valor de T[X]

17

Catálogo

Informações sobre um índice U:

CHV(U)= número de chaves distintas em U

p(U) = número de páginas contendo chaves em U

f(U) = número médio de filhos de um nó, para uma árvore B

h(U) = número de níveis de U = 1 , se U é uma tabela de hash = [log(v(X,T)], se U é uma árvore B sobre as chaves X de T

18

Catálogo

Notação:

Q é uma consultaU1,...,Un são as relações varridas por QB é a qualificação de QT é a relação resultante de Q, ou seja,T é o subconjunto de U = U1 x...x Un que satisfaz B

Fator de Seletividade:

F(B) = percentagem de tuplas de U que satisfazem B

CAR(T) = CAR(U1) x...x CAR(Un) x F(B)

19

Catálogo

Estimação de F(B):

ui.X = valor

F(B) = 1 / V(X,Ui)

F(B) = 1 / CHV(V) , se V for uma inversão de Ui por X

F(B) = 1 / 10 , se não houver informação sobre T[X]

ui.X > valor

F(B) = (MAX(Ui ,X) - valor) / (MAX(Ui ,X) - MIN(Ui ,X))

F(B) = 1 / 10 , se o domínio não for aritmético

20

Catálogo

Estimação de F(B):

ua.X = ub.Y

X = x

Y = x

Ua Ub

Se Y for chave (primária) de Ub então cada tupla de Ua se junta com no máximo uma tupla de Ub.Logo, join[ua.X = ub.Y](Ua,Ub) não pode ter mais tuplas do que Ua.

no máximo uma tupla de Ubcom Y=x

21

Catálogo

Estimação de F(B):

ua.X = ub.Y

F(B) = | join[ua.X = ub.Y](Ua , Ub) | (| Ua | * | Ub |) Se Y for chave de Ub então cada tupla de Ua se junta com no máximo uma tupla de Ub.Logo, | join[ua.X = ub.Y](Ua , Ub) | ≤ | Ua | , ou seja:

F(B) = 1 / | Ua |

Se X for chave de Ua então | join[ua.X = ub.Y](Ua , Ub) | ≤ | Ub |. Ou seja:

F(B) = 1 / | Ub |

Se X for chave de Ua e Y for chave de Ub , então :

F(B) = min(1 / | Ua | , 1 / | Ub | ) = 1 / max( | Ua | , | Ub | )22

Catálogo

Estimação de F(B):

ua.X = ub.Y

X = xY = x

Y = xY = x

Y = x

Ua Ub

Se Vb for uma inversão de Ub por Y, então estima-se que 1 * | Ub | tuplas de Ub se juntem com cada tupla de Ua. CHV(Vb)

Logo, join[ua.X = ub.Y](Ua,Ub) não pode ter mais tuplas do que |Ua| * ( 1 * | Ub |) CHV(Vb)

1 * | Ub | CHV(Vb)

23

Catálogo

Estimação de F(B):

ua.X = ub.Y

F(B) = | join[ua.X = ub.Y](Ua , Ub) | (| Ua | * | Ub |) Se Vb for uma inversão de Ub por Y, então

| join[ua.X = ub.Y](Ua , Ub) | ≤ | Ua | * ( 1 * | Ub | ) , logo: CHV(Vb)

F(B) = 1 / CHV(Vb)

Se Va for uma inversão de Ua por X, então

F(B) = 1 / CHV(Va)

Se Va for uma inversão de Ua por X e Vb for uma inversão de Ub por Y, então :

F(B) = 1 / max( CHV(Va) , CHV(Vb) )24

Catálogo

Estimação de F(B):

ua.X = ub.Y

F(B) = 1 / | Ua | se X for chave de UaF(B) = 1 / max( | Ua | , | Ub | ) se X for chave de Ua e Y for chave de Ub

F(B) = 1 / CHV(Va) se Va for uma inversão de Ua por XF(B) = 1 / max(CHV(Va), CHV(Vb)) se Va for uma inversão de Ua por X e Vb for uma inversão de Ub por Y

F(B) = 1 / 10 (na falta de informação)

ui.X > uj.Y

F(B) = (MAX(Ui ,X) - MIN(Uj ,Y) / (MAX(Ui ,X) - MIN(Ui ,X))

F(B) = 1 / 10 (se o domínio de A não for aritmético)

25

Catálogo

Estimação de F(B):

B = B1 or B2

F(B) = F(B1) + F(B2) - F(B1)*F(B2)

B = B1 and B2

F(B) = F(B1) * F(B2)

B = not B1

F(B) = 1 - F(B1)

26

Execu ção

Execução de programas na linguagem interna:implementação das operações sobre tabelas:

seleçãoseleção sequencialseleção diretaseleção por uniãoseleção por interseção

junçãojunção aninhadajunção aninhada por páginajunção aninhada indexadajunção por intercalaçãojunção por hash

execução de programas

27

Execu ção

SELEÇAO_SEQUENCIAL(T,X,P(T);V)

T - tabela externaX - atributos de T que comporão a resposta VP(T) - predicado sobre TV - resposta contendo a projeção em X das tuplas de T que satisfazem P(T)

begin crie V como vazia for each t em T do if t satisfaz P(T) then acrescente t[X] a Vend

28

Execu ção

custo da operação:

C = número de páginas de T lidas (custo de I/O)+ número de páginas de V gravadas+ W * número de tuplas de T processadas (custo de CPU)

caso 1: T e V externas com os registros agrupados

C = p(T) + n(T)*F(P(T))*|X| / tamanho da página + W*n(T) (teste é feito para todas as tuplas em T)

onde |X| denota o comprimento de X

(outros casos deixados como exercício)

29

Execu ção

SELEÇÃO_DIRETA(T,X,P(T),U,Q(T);V)

T - tabela externaX - atributos de T que comporão a resposta VP(T) - predicado sobre T

U - tabela de inversão sobre T nos atributos Y Q(T) - expressão booleana contendo atributos apenas em Y V - resposta contendo a projeção em X das tuplas de T que

satisfazem P(T) and Q(T) begin crie V como vazia crie P com todos os apontadores para registros de T que satisfazem Q(T), usando U for each p em P do begin recupere em t o registro de T apontado por p if t satisfaz P(T) then acrescente t[X] a V endend

30

Execu ção

custo da operação:

C = número de páginas de T lidas (custo de I/O) + número de páginas de U lidas

+ número de páginas de V gravadas+ W * número de tuplas de T processadas (custo de CPU)

caso 1: V externa com os registros agrupados

premissas: cada registro de T que satisfaz Q(T) requer leitura de 1 páginadeterminar que chaves satisfazem Q(T) requer n(U) * F(Q(T)) acessos a páginas de U

C = n(T) * F(Q(T))+ n(U) * F(Q(T))+ n(T) * F(P(T)) * F(Q(T) * |X| / tamanho da página+ W * n(T) * F(Q(T)) (teste de P(T) é feito para todas as tuplas em T

que satisfazem a Q(T))

(outros casos deixados como exercício)

31

Execu ção

SELEÇÃO_UNIÃO(T,X,P(T) or P'(T),U,U';V)

T - tabela externaX - atributos de T que comporão a resposta VP(T) or P'(T) - predicado sobre T

U - tabela de inversão sobre T capaz de resolver P(T) U' - tabela de inversão sobre T capaz de resolver P'(T) V - resposta contendo a projeção em X das tuplas de T que

satisfazem P(T) or P'(T)

begin crie V como vazia crie P em memória com todos os apontadores para registros de T que satisfazem P(T), usando U crie P' em memória com todos os apontadores para registros de T que satisfazem P'(T), usando U' for each p em P união com P' do begin recupere em t o registro de T apontado por p acrescente t[X] a V endend

32

Execu ção

SELEÇÃO_INTERSEÇÃO(T,X,P(T) and P'(T),U,U';V)

T - tabela externaX - atributos de T que comporão a resposta VP(T) and P'(T) - predicado sobre T

U - tabela de inversão sobre T capaz de resolver P(T) U' - tabela de inversão sobre T capaz de resolver P'(T) V - resposta contendo a projeção em X das tuplas de T que

satisfazem P(T) and P'(T)

begin crie V como vazia crie P em memória com todos os apontadores para registros de T que satisfazem P(T), usando U crie P' em memória com todos os apontadores para registros de T que satisfazem P'(T), usando U' for each p em P interseção com P' do begin recupere em t o registro de T apontado por p acrescente t[X] a V endend

33

Execu ção

JUNÇÃO_ANINHADA(T,U,X,Y,P(T,U),P(T),P(U);V)

T, U - tabelas externasX, Y - atributos de T e U que comporão a resposta VP(T,U) - predicado de junção entre T e U

P(T), P(U) - predicados adicionais sobre T e U V - resposta contendo a projeção em X e Y das tuplas de T e U que

satisfazem P(T,U) and P(T) and P(U)

t uP(t)

v

P(u)

v

1 2

3

34

Execu ção

JUNÇÃO_ANINHADA(T,U,X,Y,P(T,U),P(T),P(U);V)

T, U - tabelas externasX, Y - atributos de T e U que comporão a resposta VP(T,U) - predicado de junção entre T e U

P(T), P(U) - predicados adicionais sobre T e U V - resposta contendo a projeção em X e Y das tuplas de T e U que

satisfazem P(T,U) and P(T) and P(U)

begin inicie V como vazia; for each registro t de T que satisfaz a P(T) do begin substitua t em P(T,U) criando P(t,U); for each registro u de U que satisfaz a P(t,U) e P(U) do begin acrescente um registro v a V criado a partir de t e u end end

end

35

Execu ção

JUNÇÃO_ANINHADA_POR_PÁGINA(T,U,X,Y,P(T,U),P(T),P(U);V)

T, U - tabelas externas agrupadasX, Y - atributos de T e U que comporão a resposta VP(T,U) - predicado de junção entre T e U

P(T), P(U) - predicados adicionais sobre T e UV - resposta contendo a projeção em X e Y das tuplas de T e U que

satisfazem P(T,U) and P(T) and P(U)

pagina ppagina p

t

página q

u

vv

1 2

3

pagina p

P(t)

página q

P(u)

36

Execu ção

JUNÇÃO_ANINHADA_POR_PÁGINA(T,U,X,Y,P(T,U),P(T),P(U);V)

T, U - tabelas externas agrupadasX, Y - atributos de T e U que comporão a resposta VP(T,U) - predicado de junção entre T e U

P(T), P(U) - predicados adicionais sobre T e UV - resposta contendo a projeção em X e Y das tuplas de T e U que

satisfazem P(T,U) and P(T) and P(U)

begin inicie V como vazia; for each página p de T do begin for each registro t em p que satisfaz P(T) do begin

substitua t em P(T,U) criando P(t,U) for each página q de U do

for each registro u em q que satisfaz P(t,U) e P(U) do acrescente um registro v a V criado a partir de t e u end endend

37

Execu ção

JUNÇÃO_ANINHADA_INDEXADA(T,U,X,Y,P(T,U),P(T),P(U),R;V)

T, U - tabelas externasX, Y - atributos de T e U que comporão a resposta VP(T,U) - predicado de junção entre T e U

P(T), P(U) - predicados adicionais sobre T e U R - índice sobre U que resolve P(t,U) V - resposta contendo a projeção em X e Y das tuplas de T e U que

satisfazem P(T,U) and P(T) and P(U)

t

u

P(t)

v

P(u) e P(t,u)

v

1 2

4

R P(t,U) 3

3

P(t,u)

38

JUNÇÃO_ANINHADA_INDEXADA(T,U,X,Y,P(T,U),P(T),P(U),R;V)

T, U - tabelas externasX, Y - atributos de T e U que comporão a resposta VP(T,U) - predicado de junção entre T e U

P(T), P(U) - predicados adicionais sobre T e U R - índice sobre U que resolve P(t,U) V - resposta contendo a projeção em X e Y das tuplas de T e U que

satisfazem P(T,U) and P(T) and P(U) begin

inicie V como vazia; for each registro t de T que satisfaz a P(T) do begin substitua t em P(T,U) criando P(t,U)

crie S com todos os apontadores para registros de U que satisfazem P(t,U), usando R for each s em S do begin recupere em u o registro de U apontado por s

if u satisfaz P(U) then acrescente um registro v a V criado a partir de t e u end end

end

39

Execu ção

JUNÇÃO_INTERCALAÇÃO(T,U,X,Y,P(T,U),P(T),P(U);V)

T, U - tabelas externasX, Y - atributos de T e U que comporão a resposta VP(T,U) - predicado de junção entre T e U da formaT.X<op>U.Y

T e U estão ordenados por X e Y, respectivamente, em uma ordem de junção compatível com T.X<op>U.Y P(T), P(U) - predicados adicionais sobre T e U V - resposta contendo a projeção em X e Y das tuplas de T e U que

satisfazem P(T,U) and P(T) and P(U)

t uP(t)

v

P(u)

v

1 2

3

varredura

varredura

40

JUNÇÃO_INTERCALAÇÃO(T,U,X,Y,P(T,U),P(T),P(U);V)begin

inicie V como vaziainicie t0 com o primeiro registro de T que satisfaz P(T) (* t0 será nulo caso não existainicie u0 com o primeiro registro de U que satisfaz P(U) (* u0 será nulo caso não

exista while t0 não for nulo e u0 não for nulo do

beginsubstitua t0 em T.X<op>U.Y criando P(t0,U)crie uma tabela interna temporária M, inicialmente vaziawhile u0 não for nulo e u0 satisfizer P(t0,U) dobegin acrescente u0 a M u0 := próximo registro de U a partir de u0 que satisfaz P(U) endx := t0[X]while t0[X] = x dobegin for each registro m em M do

acrescente um registro v a V criado a partir de t0 e m t0 := próximo registro de T a partir de t0 que satisfaz P(T)

endend

end

41

Execu ção

JUNÇÃO_HASH(T,U,X,Y,P(T,U),P(T),P(U);V)

T, U - tabelas externasX, Y - atributos de T e U que comporão a resposta VP(T,U) - predicado de junção entre T e U da forma T.X=U.Y

P(T), P(U) - predicados adicionais sobre T e U V - resposta contendo a projeção em X e Y das tuplas de T e U que

satisfazem P(T,U) and P(T) and P(U)

P(t)

v

P(u)

v

1 2 4

HT1

HT2

HT3

HT4

HU1

HU2

HU3

HU4

3

5

Tabela TTabela U

42

JUNÇÃO_HASH(T,U,X,Y,P(T,U),P(T),P(U);V)begin

inicie V como vaziafor each t em T such that t satisfaz P(T) dobegin

i := h(t[X])acrescente t a HT(i)

endfor each u em U such that u satisfaz P(U) dobegin

i := h(u[Y])acrescente u a HU(i)

end for each i = 0 to max dobegin

for each t em HT(i) dofor each u in HU(i) do acrescente um registro v a V criado a partir de t e u

endend

Execução

43

Execu ção

Execução de Programas:

um programa na linguagem interna pode ter vários threads,cada um correspondendo a uma subexpressão independente dentro da expressão relacional inicial

proj[CODIGO.PRODUTO] (join[CODIGO.FORNECIMENTO = CODIGO.PRODUTO] (sel(NUMERO='41.738')(FORNECIMENTO), sel[MELHOR_FORN = '41.738'](MELHOR_FORN)))

proj[CODIGO.PRODUTO]

join[CODIGO.FORNECIMENTO = CODIGO.PRODUTO]

sel(NUMERO='41.738') sel[MELHOR_FORN = '41.738']

FORNECIMENTO MELHOR_FORN

44

Execu ção

Execução de Programas:

a passagem de resultados intermediáriosde uma operação a outra pode ser feita através de:

tabelas externas materializando os resultadostabelas internas mantendo os resultados no buffer pooltabelas transientes usando uma técnica de pipelining

45

Execu ção

Pipelining:

dirigido por demanda:o sistema repetidamente solicita registros à operação no topo do pipelinecada operação por sua vez solicita registros à operação imediatamente em seguida no pipeline

dirigido pelo produtor:as operações não esperam por solicitações, mas acresentam registros até a área de trabalho designada esteje cheia

46