sistemas de gerência de bancos de dados - ufpa.br · linguagem do usuário linguagem...
TRANSCRIPT
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
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