690 likes | 792 Views
Rumo a Processamento de Consultas em Ambientes Altamente Distribuídos. Disciplina: Banco de Dados Pós-Graduação em Informática (UFCG). Índice. I- Objetivos da Apresentação II- Por que Ambientes Altamente Distribuídos? III- Processamento de Consultas Distribuídas
E N D
Rumo a Processamento de Consultas em Ambientes Altamente Distribuídos Disciplina: Banco de Dados Pós-Graduação em Informática (UFCG)
Índice I- Objetivos da Apresentação II- Por que Ambientes Altamente Distribuídos? III- Processamento de Consultas Distribuídas IV- Processamento de Consultas com Sistemas de Banco de Dados Cliente-Servidor V- Sistemas de Bancos de Dados Heterogêneos VI- Agenda de Pesquisa
I- Objetivos • Entender por que os otimizadores clássicos de consultas distribuídas não estão preparados para operar em ambientes altamente distribuídos • Agenda de pesquisa em otimizadores de consultas para ambientes altamente distribuídos
II- Por que Ambientes Altamente Distribuídos? • Sistemas distribuídos podem envolver milhares de nós heterogêneos (“sites”) • PCs • “Mainframes” • Sistemas distribuídos são extremamente dinâmicos • Mudanças de estado dos nós • Acréscimo de novos nós
II- Por que Ambientes Altamente Distribuídos?(2) • Sistemas legados devem sobreviver • Convivência com outros (modernos) sistemas em um ambiente altamente distribuído
II- Por que Ambientes Altamente Distribuídos?(3) • Necessidade de ambientes altamente distribuídos • Custo e Escala • Mil PCs custam mais barato e são significativamente mais poderosos do que um “big mainframe” • Fazer um “upgrade” de um “mainframe” é complicado • Acrescentar um novo PC à rede é muito simples • Alta disponibilidade pode ser alcançada via espelhamento (replicação) de dados
II- Por que Ambientes Altamente Distribuídos?(4) • Necessidade de ambientes altamente distribuídos • Integração de diferentes pacotes de software • Nenhum pacote individualmente pode contemplar todos os requisitos de uma empresa • Um “bag” de pacotes (isto é, pacotes diferentes e/ou cópias), com potencialmente seu próprio BD, constitui um sistema de banco de dados distribuído (BDD)
II- Por que Ambientes Altamente Distribuídos?(5) • Necessidade de ambientes altamente distribuídos • Integração de sistemas legados • Os velhos pacotes devem co-existir com os novos (modernos) pacotes • Novas aplicações • Muitas aplicações (emergentes) estão se tornando imperativas, e são pesadamente dependentes de tecnologias de BDD • “E-commerce” • Gerência de “workflow” • “Computer supported collaborative work” (“Groupware”) • Teleconferência
II- Por que Ambientes Altamente Distribuídos?(6) • Necessidade de ambientes altamente distribuídos • Imposição do Mercado • Empresas estão sendo forçadas a reorganizar seus negócios para se manter competitivas • Serviços “on-line”
III- Processamento ‘Clássico’ de Consultas Distribuídas: Hipóteses Assumidas • Usuários e programadores de aplicação submetem suas consultas usando uma linguagem declarativa como SQL ou OQL (“Object Query Language”) OK! • A meta é processar tais consultas tão eficientemente quanto possível • Minimizar tempos de resposta / “query throughput” • Usuários não sabem onde e como os dados estão armazenados OK! • Visão centralizada do BDD
III- Processamento ... (2): Hipóteses Assumidas (2) • Os dados são estruturados Restrição • BDs relacionais ou OO • O hardware dos nós do BDD é mono-processador Restrição • Outra maneira de dizer é que sistemas de banco de dados paralelo (“parallel database systems”) são ignorados • O número de BDs é pequeno Restrição
III- Processamento de Consultas Distribuídas (3) • Arquitetura de um Processador de Consultas • Otimizador de Consultas • Enumeração de Planos • Modelo Clássico de Custo para Planos
III- Processamento de Consultas Distribuídas (4): Arquitetura de um Processador de Consultas Query Parser Result Base Data Internal repr. Query Rewrite Query Execution Engine Internal repr. Query Optimizer Execution plan Catalog (Meta Data) Code Generation Plan
III- Processamento de Consultas Distribuídas (5): Arquitetura de um Processador de Consultas (2) • Query Rewrite • Transforma logicamente uma consulta • Eliminação de predicados redundantes • Simplificação de expressões • Transformação de consultas com sub-consultas em consultas ‘planas’ • BDD: seleciona os fragmentos (“partitions”) de uma tabela que devem ser considerados para responder à consulta
III- Processamento de Consultas Distribuídas (6): Arquitetura de um Processador de Consultas (3) • Query Optimizer • Promove otimizações que dependem do estado físico do sistema • “Access Paths” • Que índices usar • Que métodos (por exemplo, “hashing” ou “sorting”) usar para as operações “joins”, “group-bys” e “order by” • Em que ordem as operações devem ser executadas • Quanta memória alocar para cada operação • BDD: em que nó cada operação deve ser executada • Enumeração de planos alternativos • Escolha do melhor plano usando um modelo de estimativa de custos
III- Processamento ... (7) Arquitetura ... (4): Planos Site 0 NLJ scan temp receive receive send send idxscan(A) scan(B) Site 1 Site 2
III- Processamento ... (8) Arquitetura ... (5): “Query Execution Engine” • Implementações genéricas para cada operador (por exemplo, “send”, “scan”, NLJ) • “Pipelining” de resultados de um operador para outro • Desempenho
III- Processamento ... (9) Arquitetura ... (6): Catálogo • Mantém: • O esquema do BD • BDD: o esquema de fragmentação • Informações físicas • Locação de cópias de fragmentos de tabela • Índices • Estatísticas para estimar o custo de um plano • BDD: onde armazenar o catálogo?
III- Processamento ... (10) Arquitetura ... (7): Catálogo (2) • Armazenamento do catálogo • Em um nó central • Em WANs • Replicação do catálogo em diversos nós • Redução dos custos de comunicação • “Caches” de informações do catálogo em nós da rede
III- Processamento ... (11) Arquitetura ... (8): Catálogo (3) • Sobre o tamanho e a dinamicidade de um catálogo • Catálogos de BDD podem tornar-se muito grandes e ser frequentemente atualizados • Catálogos hierarquizados • Fragmentos de catálogo • Replicação de (fragmentos de) catálogo
III- Processamento de Consultas Distribuídas (12): ‘Otimizador’ de Consultas Input: SPJ query q on relations R1, ...,Rn Output: A query plan for q 1: fori = 1 to n do{ 2: optPlan({Ri}) = accessPlans(Ri) 3: prunePlans(optPlan({Ri}) 4: } 5: fori = 2 to n do{ 6: forallS {R1, ...,Rn} such thatS = ido{ 7: optPlan(S) = 8: for allO Sdo { 9: optPlan(S) = optPlan(S) joinPlans(optPlan(O), 10: optPlan(S-O)) 11: prunePlans(optPlan(S)) 12: } 13: } 14:} 15: return optPlan({R1, ...,Rn}) Algoritmo Dynamic Programming
III- Processamento ... (13) ‘Otimizador’ de Consultas (2) • A lógica do algoritmo • Construir (sub-)planos mais complexos de (sub-)planos mais simples • Primeiro passo • Planos de acesso para toda tabela envolvida na consulta: linhas 1 a 4 • Exemplo: tabela A replicada nos nós S1 e S2 • Planos de acesso alternativos • scan(A, S1) e scan(A,S2) • Um dos dois planos é descartado, em princípio (modelo de custos)
III- Processamento ... (14) ‘Otimizador’ de Consultas (3) • Sobre o descarte de planos (“prunePlans”) • BDD: nem scan(A, S1) e nem scan(A, S2) podem ser imediatamente descartados • Mesmo se scan(A, S1) for mais barato que scan(A, S2), scan(A, S2) ainda poderia ser escolhido se os resultados da consulta devessem ser apresentados em S2 (ou o que importa é o custo global da consulta)
III- Processamento ... (15) ‘Otimizador’ de Consultas (4) • Segundo passo • Enumeração de “n-way join plans” (linhas 5 a 14) • Para entender o passo • Tabelas A (optPlan(A)) e B (optPlan(B)) • Junção de A e B i = 2 For all S {A, B}, such that S = 2 For all O S -- {A} e {B} optPlan({A, B}) = joinPlans(optPlan(A), optPlan(B)) optPlan({A, B}) = joinPlans(optPlan(B), optPlan(A)) • O melhor de “joinPlans” é escolhido
III- Processamento ... (16) ‘Otimizador’ de Consultas (5) • Avaliação do algoritmo • Vantagens • Produz os melhores planos possíveis se o modelo de custo for suficientemente exato • Desvantagens • Não tem escala: complexidade exponencial • BDD: proibitivo para muitas consultas • Uma extensão do algoritmo Dynamic Programming para BDD é tema de uma das aulas
III- Processamento ... (17) ‘Otimizador’ de Consultas (6): O Modelo Clássico de Custos • Composição do custo de um operador • CPU • Disco • “Seek” • “Latency” • “Transfer” • BDD: custos de comunicação • Custos por byte transferido • Custos de CPU: “to pack and unpack messages” • O custo pode ser pesado a fim de modelar o impacto de máquinas lentas e rápidas, e de “links” de comunicação • É mais caro transmitir dados de Passau (Alemanha) para Washington (EUA) do que de Passau para Munich (Alemanha)
III- Processamento ... (18) ‘Otimizador’ de Consultas (7): O Modelo Clássico de Custos (2) • Critérios de avaliação de custos • “Minimum Resource Consumption” • Otimiza o “ overall throughput” do sistema • “Minimum Response Time” • O “throughput” pode baixar, mas as consultas processadas têm tempos de resposta otimizados
III- Processamento ... (19) ‘Otimizador’ de Consultas (8): O Modelo Clássico de Custos (3) Site 0 join Site 0 receive receive join Site 1 Site 2 join join send send join join A B C D Minimum Resource Consumption A B C D Minimum Response Time
III- Processamento ... (20) ‘Otimizador’ de Consultas (9): O Modelo Clássico de Custos (4) • Avaliação do Modelo de Custos • Somente funciona bem se poucos operadores rodam em paralelo
III- Processamento ... (21) ‘Otimizador’ de Consultas (10): Técnicas de Junção e Transferência • Transferência • Junção
III- Processamento ... (22) ‘Otimizador’ de Consultas (13): Transferência • “Row Blocking” • “Optimization of Multicasts” • Redes organizadas em um modo hierárquico • Exemplo: se quero mandar dados de Washington para Munich e para Dresden então • Washington Munich • Munich Dresden
III- Processamento ... (23) ‘Otimizador’ de Consultas (14): Métodos de Junção • “Multithread Query Execution” Site 0 union receive receive receive send send send Scan(A1) Scan(A2) Scan(A3) Site 1 Site 2 Site 3
III- Processamento ... (24) ‘Otimizador’ de Consultas (15): Métodos de Junção (2) • “Join with Horizontally Partitioned Data” • A = A1 A2 • A B = (A1 A2) B = (A1 B) (A2 B) • “Semijoins” • A (nó 1) e B (nó 2), com transferência de A para B • A B = A (B (A)), (“semijoin”)
III- Processamento ... (25) ‘Otimizador’ de Consultas (16): Outros Métodos de Junção (3) • “Double-Pipelined Hash Joins” • “Pointer-Based Joins and Distributed Object Assembly” • “Top N and Bottom N Queries”
IV- Sistemas de Banco de Dados Cliente-Servidor • Arquiteturas • “Peer-to-Peer” • Todo nó pode atuar como um servidor ou como cliente • Cliente-Servidor Stricto Sensu • Cada nó tem um papel fixo • Servidor (“data source”) • Cliente (“query source”) • “Middleware” ou Multi-camadas • Nós organizados de modo hierárquico • Cada nó de uma camada intermediária exerce ao mesmo tempo os papéis de servidor e cliente
IV- Sistemas de Banco de Dados Cliente-Servidor (2) • A Lógica das Arquiteturas Cliente-Servidor • Os BDs são persistentemente armazenados em máquinas servidoras, enquanto as consultas aos BDs são iniciadas em máquinas clientes • Perguntas • Onde processar uma consulta? No cliente? No servidor? • Política de “caching” na máquina cliente? • Como escolher os servidores se uma mesma cópia encontra-se replicada em vários servidores? • Como escolher os servidores (locais) e as ordens das operações se os dados estão distribuídos em vários servidores?
IV- Sistemas de Banco de Dados Cliente-Servidor (3) • “Query Shipping” • Usado nos SGBDs relacionais comerciais client query server result join scan scan A B
IV- Sistemas de Banco de Dados Cliente-Servidor (4): “Query Shipping” (2) • Sistemas Multi-camadas • Um servidor intermediário realiza a junção de tabelas armazenadas em diferentes servidores • “Gateways” entre os servidores de modo que a junção pode ser realizada em um dos servidores • As junções podem também ser distribuídas entre vários servidores
IV- Sistemas de Banco de Dados Cliente-Servidor (5): “Data Shipping” • O Contrário de “Query Shipping” • Usado em SGBDs OO client join scan scan A B “cache” server A B
IV- Sistemas de Banco de Dados Cliente-Servidor (6): “Data Shipping” (2) • Política de “Caching” • Páginas de tabelas e índices • Granulosidade • Páginas • Blocos de tuplas de 4K ou 8K
IV- Sistemas de Banco de Dados Cliente-Servidor (7): “Hybrid Shipping” • Flexibilidade de processar operadores de consulta tanto em máquinas servidoras quanto máquinas clientes • “Caching” de dados por clientes • Usado em produtos como o SGBDOR UniSQL
IV- Sistemas de Banco de Dados Cliente-Servidor (8): “Hybrid Shipping” (2) client join scan A server scan A B
IV- Sistemas de Banco de Dados Cliente-Servidor (9): Discussão • Uma obviedade • “Query shipping” é recomendável se as máquinas servidoras são poderosas e as máquinas clientes são um tanto lentas • “Query shipping” e escala • Se houver muitos clientes simultaneamente, as máquinas servidoras passam a ser eventuais gargalos
IV- Sistemas de Banco de Dados Cliente-Servidor (10): Discussão (2) • “Data shipping” e escala: em princípio, um casamento perfeito. Mas • Pode ser a causa de gargalos de comunicação • Má política de “caching”: grande quantidade de dados não filtrados enviados aos clientes • “Hybrid shipping”: em muitas situações, podem exibir melhor desempenho que “data” e “query shipping”. Mas • O processo de otimização das consultas é significativamente mais complexo
IV- Sistemas de Banco de Dados Cliente-Servidor (11): Discussão (3) • Duas heurísticas (frutos da experiência) • Se a rede for rápida e se dados estiverem “cached” nos discos do cliente, pode ser melhor ler os mesmos dos discos do servidor • Se a rede for rápida e se os dados estiverem “cached” na memória do cliente, pode ser melhor transferir resultados parciais da consulta para o servidor, e completar a consulta no servidor • Conclusão: o conhecimento adquirido não poupa o ‘otimizador’ de consultas de ser um software extremamente complexo
IV- Sistemas de Banco de Dados Cliente-Servidor (12): ‘Otimizadores’ de Consulta • Seleção de nó
IV- Sistemas de Banco de Dados Cliente-Servidor (13) ‘Otimizadores’ de Consulta (2): Seleção (2) • Operadores binários: “join”, ... • Operadores unários: “sort”, “group-by”, ... • “Client”: nó onde a consulta é lançada • “Consumer”: o mesmo servidor que processa (consome) a saída do operador • “Producer”: o mesmo servidor que processa (produz) a entrada do operador • “Server (Scan)”: um servidor que armazena uma cópia dos dados a serem varridos • “Server (Update)”: todos os servidores que armazenam cópias dos dados • Todas as ‘anotações de nós’ são lógicas
IV- Sistemas de Banco de Dados Cliente-Servidor (14) ‘Otimizadores’ de Consulta (3): Otimização em Dois Passos • Passo 1 • Em tempo de compilação, gerar um plano que especifica a ordem das junções, e os caminhos de acesso • Passo 2 • Antes que uma consulta seja executada, selecionar os nós para determinar onde os operadores serão processados
IV- Sistemas de Banco de Dados Cliente-Servidor (15) ‘Otimizadores’ de Consulta (4): Otimização em Dois Passos (2) • Exemplo • Tabelas A e D em um servidor • Tabelas B e C em um outro servidor Primeiro passo: display join join join A B C D
IV- Sistemas de Banco de Dados Cliente-Servidor (16) ‘Otimizadores’ de Consulta (5): Otimização em Dois Passos (3) Segundo passo: display join join join A B C D Movimento de dados