Baixe o app para aproveitar ainda mais
Prévia do material em texto
21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 1/77 Sistemas de banco de dados paralelos Prof. Sidney Nicolau Venturi Filho Descrição O banco de dados paralelo e a sua utilização na implementação de um cluster PostgreSQL. Propósito Entender as técnicas que dão suporte ao funcionamento dos bancos de dados paralelos e realizar a criação e configuração de um cluster PostgreSQL é de importância fundamental para o profissional de TI atualmente. Preparação Recomenda-se que você instale o PostgreSQL em uma máquina virtual. Objetivos Módulo 1 Paralelismos em sistemas computacionais 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 2/77 Reconhecer as técnicas utilizadas em sistemas paralelos. Módulo 2 Fundamentos de banco de dados e consultas paralelas Analisar as características dos sistemas de bancos de dados paralelos e suas consultas. Módulo 3 Execução de consultas paralelas e balanceamento de carga Identificar as técnicas utilizadas na execução de consultas paralelas e no balanceamento de carga entre os nós. Módulo 4 Bancos de dados em cluster Criar e configurar um cluster de banco de dados PostgreSQL. Introdução Com o aumento da demanda dos sistemas por capacidade de processamento, duas soluções se apresentam. A primeira refere- se a utilizar máquinas individuais mais poderosas ou associar várias máquinas em paralelo para realizar o processamento. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 3/77 A segunda solução permite uma diminuição dos custos de implantação e da escalabilidade do sistema. O uso de cluster de banco de dados se popularizou, pois, além de aumentar a capacidade de processamento, trouxe consigo uma melhor solução de tolerância a falhas. Esse será o tema de nosso estudo. Vamos lá? 1 - Paralelismos em sistemas computacionais Ao �nal deste módulo, você será capaz de reconhecer as técnicas utilizadas em sistemas paralelos. Processamento paralelo Neste vídeo, apresentaremos os fundamentos do processamento paralelo, passando pelas suas origens e falando sobre a motivação para o seu uso. Veremos ainda o paralelismo de grão e a diferença entre processamento paralelo e distribuído. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 4/77 Origens do processamento paralelo Von Neumann, em seus trabalhos na década de 1940, citava o uso de arquiteturas paralelas como forma de obter maior capacidade de processamento visando executar as tarefas de forma mais rápida e eficiente. Acompanhe o desenvolvimento! Von Neumann Foi um matemático húngaro de origem judaica, naturalizado estadunidense. Contribuiu com a ciência da computação, entre outras áreas. É considerado um dos mais importantes matemáticos do século XX. Máquinas monoprocessadas Ao longo das décadas de 1950 e 1960, o aumento de velocidade de processamento era obtido por meio da construção de máquinas monoprocessadas com maior velocidade de CPU. Máquinas multiprocessadas A partir da década de 1970, o aumento da velocidade do processador já não era suficiente para atender às necessidades, sendo adotadas as arquiteturas de máquinas multiprocessadas, trabalhando de forma concorrente. Processamento paralelo P d l id 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 5/77 Essas técnicas definiram diversos níveis de paralelismo, impactando o desenvolvimento de chips com múltiplos núcleos, dispositivos de entrada e saída, sistemas operacionais, aplicações e o desenvolvimento de técnicas de programação com o uso de threads. Vejamos os níveis de paralelismo! Threads Forma como um processo/tarefa de um programa de computador é divido em duas ou mais tarefas que podem ser executadas concorrentemente. Aplicação Utilização de processos leves (threads) Utilização de processos remotos Invocação de métodos remotos (Java RMI) Sistema operacional Multiprocessamento Multiprogramação Arquitetura Vários processadores Unidades de E/S ativa Hierarquia de memória Passaram a ser desenvolvidas, então, técnicas de processamento paralelo, de forma que o conjunto de processadores pudesse trabalhar coordenadamente na solução de problemas complexos. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 6/77 Hierarquia de barramentos Processador Múltiplas unidades funcionais Pipeline de instrução Processamento paralelo (PP) Podemos definir processamento paralelo como várias unidades colaborando de forma ativa para realizar um processamento, com maior rapidez e eficiência. Para obter essa maior eficiência, cada uma das unidades deve atacar uma parte do trabalho, comunicando-se para coordenar a divisão das tarefas, trocar valores intermediários e juntá-los para produzir o resultado. Atenção! Para o processamento paralelo ser eficiente em sua execução, os programas necessitam ser escritos para executar em vários processadores, disparando múltiplas threads, já que não é realizado automaticamente pelos sistemas operacionais. Motivação para uso de processamento paralelo Vejamos agora os principais motivos para uso de processamento paralelo. Vamos lá! Desempenho Reduzir o tempo de execução devido à divisão do trabalho por múltiplas unidades de processamento. Tolerância a falhas Reduzir a probabilidade de falhas, pois o mesmo processamento pode ser realizado em mais de um l l 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 7/77 Grão de paralelismo Define como realizar a modelagem de sistemas paralelos e pode ser de três tipos. Vamos conferir! Grosso O processamento a ser realizado pode ser particionado em unidades de trabalho grande, permitindo que, mesmo existindo um grande custo de comunicação, vale a pena executar em paralelo, já que o custo de transmissão é compensado pelo ganho de tempo em atacar o problema com mais processadores. Médio O processamento engloba apenas unidades de trabalho médio. Neste caso, quando o custo de comunicação for muito alto, o desempenho obtido com mais processadores poderá não compensar. Fino local. Modelagem Reduzir a complexidade de se implementar a aplicação em situações em que o problema é, em sua essência, paralelo. Aproveitamento de recursos Aproveitar melhor os recursos disponíveis a partir da execução de múltiplos processos. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 8/77 O trabalho somente comporta tarefas pequenas. Neste caso, somente o custo de transmissão baixo tornará eficiente o processamento em vários locais diferentes. Processamento paralelo x distribuído Os sistemas de processamento paralelo podem ser classificados como: Fortemente acoplados: São sistemas em que a comunicação entre os processadores ocorre por meio dos barramentos internos do equipamento e que compartilham, normalmente, a memória principal. Exemplos: notebook e computadores com processadores multicores e supercomputadores com multiprocessamento simétrico ou assimétrico. Fracamente acoplados: Abrangem os sistemas que envolvem as unidades processadoras interligadas por algum sistema de comunicação em rede. Eles podem ser em redes ou distribuídos. Multiprocessamento simétrico ou assimétrico Ocorre em um sistema computacional com vários processadores com memória compartilhada sob controle de um único sistema operacional. Em contraste, o multiprocessamento assimétrico emprega sistemas diferentes. Observe, a seguir, os tipos de sistemas paralelos. Tipos de sistemas paralelos. Podemosnotar que os sistemas de processamento distribuído são, na realidade, um tipo de sistema paralelo fracamente acoplado, tendo os dois tipos os mesmos complicadores para implementação, diferindo, basicamente, na motivação de seu desenvolvimento. Entenda: 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 9/77 Processamento em rede Ganho de desempenho com redução de custos de comunicação, utilizando processadores interligados em redes locais ou por barramentos internos. Processamento distribuído Redução do custo de comunicação em redes de longa distância a partir da modelagem baseada na localidade física onde o processamento deve ser realizado. Arquiteturas de hardware para sistemas paralelos Neste vídeo, apresentaremos as arquiteturas de hardware para sistemas paralelos, mostrando os tipos, a memória compartilhada, os discos compartilhados, o nada compartilhado e a hierárquica. Tipos de arquitetura de hardware Em um mundo ideal, os computadores teriam processadores infinitamente rápidos, com memória ilimitada e custando uma pequena fração do preço que custam no mundo real, o que não exigiria aumento de velocidade, escalabilidade ou processamento paralelo. A realidade é desafiadora e a partir do uso de um conjunto de processadores com velocidade finita e expansão da memória disponível a partir da criação de áreas de troca de dados entre memórias individualmente limitadas. Embora a ideia pareça bem simples, a implementação do acréscimo de novos processadores diminui um pouco a velocidade individual de todos os outros, o que 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 10/77 pode ser um problema, pois, se, por exemplo, cada processador acrescido impactar 1% do funcionamento dos outros, em um sistema com mil processadores, o desempenho total corresponderá a apenas 4% do desempenho de um sistema monoprocessado de mesma velocidade. Visando lidar com essa degradação, foram propostas quatro arquiteturas para sistemas paralelos. Vamos conferi-las! Observe, a seguir, os tipos de arquiteturas para sistemas paralelos. Memória compartilhada Cada um dos processadores compartilha a mesma memória e os mesmos discos. Discos compartilhados Cada processador tem uma memória própria, mas tem acesso a todos os discos. Nada compartilhado Cada memória e disco são próprios de um processador que atua como servidor dos dados que possui. Hierárquica Cada nó pode ser considerado como um sistema independente. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 11/77 Tipos de arquiteturas para sistemas paralelos. Memória compartilhada Originalmente, neste tipo de arquitetura, todos os processadores podem acessar qualquer disco ou módulo de memória a partir de um barramento comum. Vejamos agora as vantagens e desvantagens dessa arquitetura. Vamos lá! Simplicidade de implementação e balanceamento de carga dinâmico. Gargalo gerado no barramento de acesso à memória, já que os processadores passarão a maior parte do tempo esperando sua vez no barramento para acessar a memória. Visando minimizar esse gargalo, modernos sistemas de memória compartilhada utilizam uma arquitetura similar à exibida a seguir, na qual cada processador possui um banco de memória conectado diretamente a ele, e os processadores são interligados por um sistema de interconexão rápida; os processadores também são conectados a controladores de E/S que fazem interface com o armazenamento externo. Essa solução, apesar de minimizar o gargalo, apresenta elevado custo pela necessidade de um sistema complexo de interconexão dos processadores. Observe! Vantagens Desvantagens 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 12/77 Modernos sistemas de memória compartilhada. Discos compartilhados Neste modelo, cada nó possui seus próprios processadores e memória, mas todos os nós podem acessar todos os discos diretamente por meio de uma rede de interconexão. Atenção! A arquitetura do disco compartilhado em relação à arquitetura de memória compartilhada possui como vantagem escalar um número maior de processadores, além de fornecer melhor grau de tolerância a falhas, com baixo custo, pois se um nó falhar, os demais podem assumir suas tarefas. Implementações modernas dessa arquitetura usam uma storage area network (SAN), que se constitui de uma rede local de alta velocidade projetada para conectar grandes matrizes de discos redundantes (RAID) aos processadores nos diversos nós e que aumentam a tolerância a falhas já que fornecem caminhos redundantes para acesso aos discos. Storage Area Network. Nada compartilhado 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 13/77 Em um sistema sem compartilhamento, cada nó consiste em um processador, memória e um ou mais discos. Os nós se comunicam por uma rede de interconexão de alta velocidade. Um nó funciona como o servidor para os dados no disco ou discos que o nó possui. Como as referências de disco local são atendidas por discos locais em cada nó, o modelo sem compartilhamento supera a desvantagem de exigir que todas as E/S passem por uma única rede de interconexão. Sua grande desvantagem envolve os custos de comunicação e de acesso ao disco não local, que são mais altos do que em uma arquitetura de memória ou disco compartilhado, pois o envio de dados envolve interação de software em ambas as extremidades. O nada compartilhado é uma arquitetura que possui alta escalabilidade, por isso é amplamente utilizada para lidar com volumes de dados muito grandes. Hierárquica Esta arquitetura combina as características das outras três. Entenda: Nós interconectados Em seu nível superior, ela é composta por nós que não compartilham memória ou disco. Esses nós são então interconectados por uma rede de comunicações, caracterizando um sistema nada compartilhado. Vários processadores Cada nó, individualmente, pode ser construído utilizando vários processadores em um esquema de memória compartilhada ou disco compartilhado, constituindo-se, assim, em uma hierarquia. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 14/77 Falta pouco para atingir seus objetivos. Vamos praticar alguns conceitos? Questão 1 Quanto aos sistemas paralelos, podemos afirmar que: I. Sistemas distribuídos são um tipo de sistema paralelo modelado com base na localidade física onde ocorrerá o processamento. II. Sistemas fortemente acoplados possuem normalmente memória compartilhada. III. Sistemas fortemente acoplados podem ser em rede ou distribuído. É verdadeiro o que se afirma em Suporte sem compartilhamento O mais comum, atualmente, é utilizar essa arquitetura na qual cada nó oferece suporte ao paralelismo de memória compartilhada, com vários nós interconectados de maneira não compartilhada. A apenas I. B I e III. C II e III. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 15/77 Parabéns! A alternativa D está correta. A afirmativa I é verdadeira porque sistemas distribuídos são classificados como paralelos fracamente acoplados modelados para diminuir os custos de transmissão em redes de longa distância. A afirmativa II é verdadeira, pois os sistemas paralelos mais comuns atualmente são aqueles com processadores multicore, nos quais existe apenas uma memória principal compartilhada. Por fim, a afirmativa III é falsa porque sistemas em rede e distribuídos são fracamente acoplados. Questão 2 Quanto aos sistemas de memória compartilhada, podemos afirmar que: Os mais modernos interligaram osprocessadores por um sistema de alta velocidade Porque Dessa forma, eliminam o gargalo de acesso aos bancos de memória que ocorria na implementação tradicional. Assinale a alternativa correta. D I e II. E I, II e III. A As duas afirmações estão corretas e a segunda justifica a primeira. B As duas afirmações estão corretas e a segunda não justifica a primeira. C A primeira afirmação é correta e a segunda falsa. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 16/77 Parabéns! A alternativa A está correta. A primeira afirmativa está correta, pois, nos sistemas mais modernos, o barramento comum de acesso à memória foi substituído por ligações da alta velocidade entre os processadores, cada um com seu próprio banco de memória, devido ao gargalo de acesso que existia nos sistemas tradicionais, o que torna a segunda afirmativa verdadeira e justificativa da primeira. 2 - Fundamentos de banco de dados e consultas paralelas Ao �nal deste módulo, você será capaz de analisar as características dos sistemas de banco de dados paralelos e suas consultas. Banco de dados paralelos Neste vídeo, apresentaremos os conceitos básicos dos bancos de dados paralelos, explicando o que são, a sua motivação e os objetivos de uso. D A primeira afirmação é falsa e a segunda correta. E As duas afirmações são falsas. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 17/77 Motivação para banco de dados paralelos Os sistemas atuais, particularmente os baseados na web, requerem suporte para bancos de dados muito grandes, podendo atingir a ordem de exabytes. As organizações estão usando esses volumes cada vez maiores de dados para planejar suas atividades e preços. A demanda dos aplicativos que consultam esse volume de dados é a grande motivação para uso de banco de dados paralelos, já que os bancos centralizados e cliente/servidor tradicionais não conseguem lidar de forma eficiente com a quantidade de transações solicitadas por segundo e prover suporte à tomada de decisão. A natureza orientada a conjuntos de consultas de banco de dados naturalmente se presta à paralelização. Vários sistemas comerciais e de pesquisa demonstraram o poder e a escalabilidade do processamento paralelo de consultas. Big data. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 18/77 Vale a pena notar que os programas aplicativos são normalmente construídos de forma que possam ser executados em paralelo em vários servidores de aplicativos, que se comunicam em uma rede com um servidor de banco de dados, que pode ser um sistema paralelo. O que são bancos de dados paralelos? Motivados pela necessidade crescente de lidar, de forma eficiente, com os enormes volumes de dados, pesquisadores resolveram combinar a computação paralela e o gerenciamento distribuído de dados. Os sistemas multiprocessados, sejam os fortemente acoplados ou os fracamente acoplados formando um cluster, fornecem desempenho muito grande e favorecem o gerenciamento de dados, permitindo a implementação de sistemas de bancos de dados paralelos, ou seja, sistemas de bancos de dados em computadores paralelos. A maior parte da pesquisa sobre sistemas de banco de dados paralelos foi realizada no contexto do modelo relacional porque ele fornece uma boa base para o processamento paralelo de dados. A implementação de sistemas de bancos de dados paralelos depende naturalmente de técnicas de bancos de dados distribuídos. No entanto, os problemas críticos são a colocação de dados, o processamento paralelo de consultas e o balanceamento de carga porque o número de nós pode ser muito maior do que o número de sites em um DBMS distribuído. Portanto, embora os princípios básicos sejam os mesmos do SGBD distribuído, as técnicas para sistemas de banco de dados paralelos são bem diferentes. Objetivos do uso de banco de dados paralelos Podemos de forma resumida afirmar que os sistemas de banco de dados paralelos combinam gerenciamento de banco de dados e processamento paralelo para aumentar o desempenho e a disponibilidade. O problema enfrentado pelo gerenciamento de banco de dados convencional há muito é conhecido como “gargalo de E/S”, induzido pelo alto tempo de acesso ao disco em relação ao tempo de acesso à memória principal. A solução encontrada para o gargalo foi o aumento da largura de banda de E/S por meio do paralelismo. Exemplo 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 19/77 Se um banco de dados de determinado tamanho for armazenado em um único disco de throughput T, T será o throughput final do sistema. Por outro lado, se o banco for particionado em N discos, cada um com o throughput T, o throughput total do sistema será, em tese, N * T, que poderá ser consumido praticamente sem gargalos por diversos processadores. Throughput Taxa em que os dados são transmitidos. Ele também pode ser definido como a quantidade de dados movidos com êxito de um lugar para outro em um determinado período. A taxa de transferência é medida em bits por segundo (bps). Os objetivos dos sistemas de banco de dados paralelos são semelhantes aos dos SGBDs distribuídos (desempenho, disponibilidade, escalabilidade), mas têm foco um pouco diferente. Vamos entender melhor! Alto desempenho Refere-se ao desempenho obtido a partir de gerenciamento paralelo de dados, otimização de consultas e balanceamento de carga. Alta disponibilidade Refere-se ao aumento de dados e a tolerância a falhas, já que um sistema de banco de dados paralelo consiste em muitos componentes redundantes. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 20/77 Otimização de consultas O paralelismo pode ser usado para aumentar o rendimento e diminuir os tempos de respostas da transação. No entanto, diminuir o tempo de resposta de uma consulta complexa por meio de paralelismo em larga escala pode aumentar seu tempo total (por comunicação adicional) e prejudicar a taxa de transferência como efeito colateral. Portanto, é crucial otimizar e paralelizar as consultas para minimizar a sobrecarga do paralelismo, por exemplo, restringindo o grau de paralelismo da consulta. Balanceamento de carga É a capacidade do sistema de dividir determinada carga de trabalho igualmente entre todos os processadores. Dependendo da arquitetura do sistema paralelo, isso pode ser obtido estaticamente por meio de um design de banco de dados físico apropriado ou dinamicamente em tempo de execução. Obtendo paralelismo nas operações de entrada e saida Neste vídeo, mostraremos como obter paralelismo nas operações de entrada e saída, explicando o particionamento horizontal das tabelas, horizontal round-robin (circular), horizontal HASH e horizontal por faixa. Veremos ainda como manter o particionamento horizontal atualizado e outras formas. Escalabilidade Refere-se, em um sistema paralelo, à maior facilidade de acomodar tamanhos crescentes de banco de dados ou demandas crescentes de desempenho. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 21/77 Particionamento horizontal das tabelas Uma das formas de melhorar o desempenho dos bancos de dados em paralelo é particionar os dados de forma a permitir o paralelismo nas operações de acesso aos dados nos diversos discos, permitindo que cada processador acesse os dados de uma das partições. Com a distribuição, a consulta pode ser otimizada de forma a ser executada mais rapidamente. A forma mais eficiente de particionamento de dados em um ambiente de banco de dados paralelos é o particionamento horizontal, onde as linhas das tabelas são distribuídas entrevários discos diferentes. As tuplas de uma relação são divididas entre muitos discos, tal que cada tupla resida em um disco diferente. Existem três técnicas possíveis para realizar esse particionamento, cada uma com suas vantagens e desvantagens. Vamos estudá-las! Particionamento horizontal. Particionamento horizontal round-robin (circular) Neste caso, a tabela é percorrida em qualquer ordem e as linhas, à medida que são lidas, são espalhadas pelos diversos discos sem nenhum critério específico de distribuição. Por exemplo, em uma tabela com 8 linhas e 3 discos, a linhas 1 poderia ir para o disco 1, a 2 para o disco 2 e a 3 para o disco 3, a 4 para o disco 1 e assim sucessivamente, conforme ilustrado. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 22/77 Particionamento horizontal circular. O particionamento horizontal circular garante uma distribuição uniforme das linhas, de forma que cada disco possui aproximadamente o mesmo número de registros da tabela, sendo particularmente eficiente quando as consultas implicam ler a tabela inteira ou pelo menos uma grande parte dela. Já em buscas pontuais ou por faixa, surge a necessidade de varrer todos os discos até encontrar o item de dados procurado. Particionamento horizontal HASH Nesta estratégia, os valores de uma ou mais colunas da tabela são escolhidos para serem submetidos a uma função de HASH cujo resultado determina o disco onde a linha será armazenada. Confira, a seguir, a situação em que o resultado da função de HASH da linha determina seu armazenamento. Particionamento horizontal HASH. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 23/77 O particionamento horizontal HASH é muito eficiente em consultas pontuais que realizam a pesquisa com base no valor da coluna utilizada no particionamento. Por exemplo, se uma relação é particionada pelo CPF do cliente, encontrar o cliente de determinado CPF é muito fácil, pois basta aplicar a função de HASH para descobrir o disco a ser lido, deixando os outros livres para consultas por outros processadores. Além disso, a recuperação de toda a tabela também pode ser eficiente, pois, se a função de HASH for bem escolhida, ela provocará uma distribuição mais ou menos uniforme da quantidade de linhas das tabelas entre os diversos discos. Particionamento horizontal por faixa Neste caso, as linhas são distribuídas com base na faixa de valores de uma coluna, alocando os contíguos no mesmo disco. A seguir, exemplificamos o funcionamento, no qual existem 3 faixas de valores, uma associada a cada disco e as linhas são alocadas com base na faixa onde se enquadram. Particionamento horizontal por faixa. O particionamento horizontal por faixa é adequado para consultas de ponto e intervalo no atributo de particionamento. Para facilitar o acesso, é mantido um vetor de particionamento que indica em qual disco se encontra determinado valor, conforme ilustrado, em que valores menores que 15 são mapeados para o Disco 1; valores no intervalo [15, 40), ou seja, valores ≥ 15 mas < 40, são mapeados para o Disco 2; valores no intervalo [40, 75), ou seja, valores ≥ 40, mas < 75, são mapeados para o Disco 4; enquanto valores > 75 são mapeados para o Disco 4. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 24/77 Vetor de particionamento. Mantendo o particionamento horizontal atualizado Agora, vamos considerar como o particionamento é mantido quando uma relação é atualizada. Veja! Tupla inserida Se uma tupla é inserida em uma relação, ela é enviada para o nó apropriado com base na estratégia de particionamento. Tupla excluída Se uma tupla for excluída, sua localização é encontrada primeiro com base no valor de seu atributo de particionamento (para round-robin, todas as partições são pesquisadas). A tupla é então excluída de onde quer que esteja localizada. Tupla atualizada S t l f t li d l li ã ã 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 25/77 Round-robin É um algoritmo escalonador de tarefas (processos) que consiste em dividir o tempo de uso da CPU (central processing unit). No entanto, se o particionamento por intervalo ou particionamento por HASH for usado e a atualização afetar um atributo, o local da tupla poderá ser afetado. Nesse caso: 1 A tupla original é excluída do local original. 2 A tupla atualizada é inserida e enviada ao nó apropriado com base na estratégia de particionamento utilizada. Outras formas de particionamento Há ainda outros dois tipos de particionamento. Vamos entendê-los! Vertical Consiste em cumprir o objetivo de gerar tabelas menores que a original em cada disco, ao passo que as colunas de uma tabela se particionam entre os discos, onde cada campo reside em um ou mais discos para alcançar o fim proposto. Misto Consiste em realizar um particionamento horizontal seguido de um vertical ou de um vertical seguido de um horizontal. Se uma tupla for atualizada, sua localização não será afetada caso o particionamento round-robin seja usado ou se a atualização não afetar um atributo de particionamento. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 26/77 O particionamento vertical pode ser visto na tabela adiante. Confira! Particionamento vertical. Apesar de ser possível realizar esse tipo de particionamento em um banco paralelo, na prática, ele não é muito utilizado. Fundamentos de consultas paralelas Neste vídeo, apresentaremos os fundamentos de consultas paralelas, mostrando a visão geral do paralelismo em consultas, bem como paralelismo inter e intraconsulta. Visão geral do paralelismo em consultas Para obtermos o paralelismo em um banco de dados podemos realizar o particionamento das tabelas em vários discos, paralelizando a entrada e saída, diminuindo o gargalo existente nos bancos de dados tradicionais. Este particionamento, entretanto, não é o único recurso, já que podemos também transformar as consultas a serem executadas em consultas paralelas. Podemos definir consultas paralelas como aquelas executadas utilizando algum tipo de recurso que permita serem realizadas de forma mais rápida, 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 27/77 individualmente ou no seu conjunto, admitindo que mais transações aconteçam no mesmo intervalo de tempo. Existem duas formas de se explorar o paralelismo em consultas de banco de dados, veja: Interconsulta Trata-se da execução de várias consultas em paralelo umas com as outras nos diversos nós. Intraconsulta Trata-se da implicação do processamento de diferentes partes de uma única consulta em paralelo em vários nós. Paralelismo interconsulta O esquema interconsulta é fundamental para obter escalabilidade em sistemas de processamento de transações, pois permite que várias transações sejam executadas em paralelo, considerando que cada transação individual seria executada de forma mais rápida se sua realização fosse isolada. O paralelismo interconsulta, portanto, aumenta o número de transações que o sistema pode executar por segundo. O esquema interconsulta é a forma mais fácil de se obter o paralelismo entre as consultas em um sistema de banco de dados paralelos, particularmente nos sistemas de memória compartilhada. Os SGBDs projetados para sistemas monoprocessados podem ser utilizados em sistemas de memória compartilhada praticamente sem adaptações, já que eles suportam sem problema o processamento concorrente de transações. Você pode então se perguntar: Como assim o acesso concorrente permite um paralelismo? 21/11/2023, 07:43 Sistemas de banco de dadosparalelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 28/77 A situação se complica quando o sistema paralelo é do tipo nada compartilhado ou disco compartilhado, pois, como cada processador acessa os dados na memória a ele associada, é necessário que seja garantida a coerência entre os dados comuns a serem acessados pelas diversas transações em paralelo nos vários processadores. Para poder se estabelecer essa coerência, o sistema deve providenciar bloqueios e log, de forma a garantir que, se uma transação paralela gerar alterações nos dados comuns a outras transações, estas sejam devidamente propagadas de forma a não gerar anomalias de transações. Esse problema é denominado problema de coerência de cache, e diversos protocolos foram desenvolvidos para a sua solução. Em sistemas de discos compartilhados, esses protocolos funcionam da seguinte forma: 1. Antes do acesso a um item de dados, uma transação deve bloqueá- lo de forma compartilhada ou exclusiva, dependendo de sua necessidade. 2. Após obter o bloqueio, a transação realiza a leitura do item de dados com seu valor mais recente no disco compartilhado. 3. Antes de liberar o item de dados do bloqueio, se a transação o alterou, ela realiza a sua descarga para o disco, de forma que as novas transações leiam o dado atualizado. Em sistemas com nada compartilhado, os protocolos de disco compartilhado devem ser estendidos da seguinte forma: Resposta O que acontece é que, nos bancos tradicionais, a execução de transações concorrentes é controlada a partir da serialização, para evitar anomalias, sendo que os dados estão na memória comum dos sistemas, podendo ser aplicado em um sistema paralelo com memória compartilhada onde os mesmos dados são acessados pelos diversos processadores. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 29/77 1. Cada item de dado deve possuir um processador home (P) e é armazenado no disco D. 2. Consultas sendo executadas em outros processadores solicitam a P a cópia mais recente do item de dados. 3. P obtém a cópia mais recente e a envia ao solicitante, realizando o bloqueio mais adequado para o item. 4. Ao ser informado pelo solicitante que ocorreu alguma alteração, P atualiza o disco e libera o bloqueio. Paralelismo intraconsulta O esquema intraconsulta acelera a execução de cada consulta individual a partir do paralelismo obtido em suas operações internas. Como a execução de uma única consulta envolve várias operações, como seleções, junções, agregações etc., a possibilidade de efetivar as operações em paralelo nos diversos nós diminui o tempo de resposta total, gerando o chamado paralelismo intraoperações. Outra fonte de paralelismo na avaliação de uma consulta é a árvore de operadores que pode conter várias operações. Podemos paralelizar a avaliação da árvore de operadores analisando em paralelo algumas das operações que não dependem umas das outras. Além disso, podemos canalizar a saída de uma operação para outra operação. Árvore de operações. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 30/77 As duas operações podem ser executadas em paralelo em nós separados, uma gerando uma saída que é consumida pela outra, mesmo enquanto é gerada. Ambas as formas de paralelismo são exemplos de paralelismo de interoperação. Em resumo, a execução de uma única consulta pode ser paralelizada de duas maneiras diferentes, entenda: Paralelismo intraoperações A partir das implementações paralelas de operações relacionais comuns, como: classificação, junção, agregação e outras. Paralelismo interoperações A partir da sincronização e cooperação das diversas operações de uma mesma consulta. As duas formas de paralelismo são complementares e podem ser usadas simultaneamente em uma consulta. Como o número de operações em uma consulta típica é pequeno, comparado ao número de linhas processadas por cada operação, o paralelismo intraoperações pode escalar melhor com o aumento do paralelismo. No entanto, o paralelismo interoperacional também é importante, especialmente em sistemas de memória compartilhada com múltiplos núcleos. Falta pouco para atingir seus objetivos. Vamos praticar alguns conceitos? Questão 1 A imagem mostra o conteúdo de uma tabela. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 31/77 Sabendo-se que a tabela foi particionada horizontalmente entre dois discos, tendo o primeiro recebido os valores ímpares de C2 e o segundo os valores pares de C2, podemos afirmar que (1) O tipo de particionamento foi o particionamento horizontal por faixa. Porque (2) No particionamento horizontal por faixa o valor de uma coluna é utilizado para determinar o disco de destino. Assinale a alternativa correta. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 32/77 Parabéns! A alternativa D está correta. No particionamento por faixa, o valor de uma coluna determina o disco de destino, mas esse não foi o caso no exemplo. O que ocorreu é que linhas foram distribuídas utilizando o particionamento circular. Questão 2 Quanto aos objetivos do uso de bancos de dados paralelos, podemos afirmar que: I. Eles foram implementados para minimizar o gargalo de E/S dos sistemas centralizados. II. O balanceamento de carga visa obter a escalabilidade. III. A alta disponibilidade é garantida pela redundância existente no sistema. IV. A otimização da consulta permite menor tempo de reasposta às solicitações. São verdadeiras as afirmativas: A As duas afirmações estão corretas e a segunda justifica a primeira. B As duas afirmações estão corretas e a segunda não justifica a primeira. C A primeira afirmação é correta e a segunda falsa. D A primeira afirmação é falsa e a segunda correta. E As duas afirmações são falsas. A I, II e III. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 33/77 Parabéns! A alternativa C está correta. A afirmativa II está errada porque o balanceamento de carga contribui com o alto desempenho, não com a escalabilidade. As demais afirmativas estão corretas. 3 - Execução de consultas paralelas e balanceamento de carga Ao �nal deste módulo, você será capaz de identi�car as técnicas utilizadas na execução de consultas paralelas e no balanceamento de carga entre os nós. Paralelismo intraoperações B II, III e IV. C I, III e IV. D III e IV. E I, II, III e IV. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 34/77 Neste vídeo, apresentaremos o paralelismo intraoperações, mostrando a ordenação paralela, a junção paralela e outras operações relacionais. Ordenação paralela Considere que uma tabela foi particionada em vários discos, a partir dos valores de uma coluna, utilizando a técnica da faixa de intervalo, sendo que uma consulta deseja listar essa tabela ordenada pela coluna do particionamento. A obtenção do paralelismo aqui seria trivial, já que a operação de classificação seria implementada classificando cada partição em paralelo e, em seguida, concatenando as partições classificadas para obter o resultado ordenado final. Como as linhas foram particionadas em N discos, o tempo necessário para ler e ordenar toda a tabela é reduzido por um fator correspondente ao número de discos no acesso paralelo. Já se a coluna a utilizada na ordenação não corresponder à utilizada no particionamento da tabela, duas estratégias poderiam ser utilizadas, são elas: Classi�cação por particionamento de intervalo Sort-merge externo paralelo Classi�cação por particionamento de intervalo Esta classificação funciona da seguinte forma: 21/11/2023, 07:43Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 35/77 Classificação por particionamento de intervalo. Vamos entender a classificação: 1. A tabela é particionada por faixa de intervalo, para isso cada nó do sistema realiza a leitura das linhas da tabela que residem em seu disco, analisa o valor da coluna de particionamento e as envia para o nó que ficará responsável por realizar a ordenação do intervalo. 2. Cada partição é ordenada individualmente pelo responsável pelo intervalo após ter recebido as linhas enviadas pelos outros nós. 3. Após terminar a ordenação, o nó envia o intervalo ordenado para os demais processadores. 4. Os processadores agregam as partições ordenadas recebidas e produzem a resposta à consulta. Sort-merge externo paralelo Esta estratégia funciona da seguinte forma: 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 36/77 Classificação Sort-Merge externo paralelo. Vamos entender a estratégia: 1. Cada nó classifica as linhas da tabela existentes em seu disco, ou seja, em sua partição. 2. Após a ordenação, os nós enviam a sua partição ordenada para os outros processadores. 3. Os processadores, ao receberam as partições dos demais, executam então uma operação tradicional de merge, obtendo o resultado da consulta. Junção paralela Os algoritmos de junção paralela tentam dividir as tuplas das relações de entrada em vários nós. Cada nó, então, calcula parte da junção localmente. Em seguida, o sistema coleta os resultados de cada nó para produzir o resultado. Dividir as tuplas depende do algoritmo de junção. Vejamos, a seguir, as possibilidades. Junção particionada Quando realizamos uma junção em que a condição de igualdade é observada, como “matricula=codigofuncionario”, a junção particionada pode ser utilizada. As tabelas envolvidas na junção devem ser particionadas por HASH ou faixa de intervalo, utilizando as colunas envolvidas na condição de junção. O algoritmo de junção segue os seguintes passos: 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 37/77 Junção particionada. Vamos entender os passos: 1. Cada processador percorre as linhas das tabelas envolvidas na junção armazenadas em seus discos, aplica a função de particionamento e envia as linhas para o nó responsável pelo processamento da partição. 2. Os nós, após receberam as linhas enviadas pelos demais, realizam localmente a junção das partições das duas tabelas. Junção fragmentar e replicar A junção particionada não pode ser aplicada em junções se a condição for de desigualdade, pois é possível que todas as linhas de uma tabela se juntem a algumas da outra tabela, o que inviabiliza realizar o particionamento. Esta técnica pode ser implementada de diversas formas, sendo que a mais simples ocorre da seguinte maneira: Junção fragmentar e replicar. Vamos entender a técnica: 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 38/77 1. Inicialmente, é realizado o particionamento de uma das tabelas por qualquer critério envolvendo a coluna de junção. 2. A segunda tabela é replicada em todos os nós. 3. Cada processador executa então a junção entre a sua partição e a tabela replicada. Outras operações relacionais A execução de outras operações relacionais também pode ser paralelizada. Confira! Seleção Neste caso, uma tabela pode ser particionada pelas colunas utilizadas nas condições de seleção, fazendo com que o acesso seja realizado a um único nó ou eventualmente nos que atendem à condição. Eliminação duplicada Neste caso, duplicatas podem ser eliminadas por classificação, sendo que qualquer uma das técnicas de classificação paralela pode ser utilizada e otimizada para eliminar duplicatas assim que aparecerem durante a classificação. Também podemos paralelizar a eliminação de duplicatas particionando as tuplas (por intervalo ou particionamento de HASH) e eliminando duplicatas localmente em cada nó. Projeção Neste caso, a projeção sem eliminação de duplicatas pode ser executada à medida que as tuplas são lidas do disco em paralelo. Se as duplicatas devem ser eliminadas, qualquer uma das técnicas descritas pode ser usada. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 39/77 Paralelismo interoperações Neste vídeo, apresentaremos o paralelismo interoperações, mostrando o paralelismo pipeline e também o independente. Paralelismo pipeline Parte do princípio de utilização dos resultados parciais de uma operação como entrada para a seguinte sem esperar o final da primeira operação. Vamos ver um exemplo! Considere o seguinte comando SQL: SQL Agregação Neste caso, podemos paralelizar a operação particionando a relação nos atributos de agrupamento e, em seguida, calculando os valores agregados localmente em cada nó. Tanto o particionamento de HASH quanto o particionamento de intervalo podem ser usados. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 40/77 Uma execução serial do comando seria: 1. Filtrar a tabela de contas correntes selecionando apenas as linhas com saldo maior que 2500. 2. Realizar a junção entre as contas com saldo maior que 2500 com os clientes que as possuem. 3. Projetar o nome dos clientes a que as contas se referem. No esquema de pipeline, à medida que os dados das contas com saldo maior que 2500 são produzidos, eles já são passados para a operação de junção que determina o proprietário da conta. A seguir, os dados do proprietário são passados para a operação de projeção para separar o seu nome. Note que esse esquema de pipeline é naturalmente paralelizável, pois enquanto em um sistema monoprocessado as operações teriam que ir se sucedendo na CPU, o que não traria grande vantagem para o tempo de execução em relação à execução sequencial, em um sistema paralelo cada operação poderia ser realizada em um processador diferente, o que certamente tornaria o tempo de resposta menor. Paralelismo independente As operações em uma expressão de consulta que não dependem umas das outras podem ser executadas em paralelo. Essa forma de paralelismo é chamada de paralelismo independente. Considere a seguinte consulta: SQL Uma possível solução seria executar em paralelo a junção de T1 com T2, gerando uma tabela intermediária T12, e a de T3 com T4, gerando a tabela intermediária T34, e depois realizar a junção de T12 com T34. Note que as duas junções são independentes entre si e, portanto, podem ser paralelizadas por paralelismo independente. Observe que o 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 41/77 cálculo da junção final depende dos resultados das duas primeiras junções, portanto, não pode ser feito usando paralelismo independente. Otimização e execução de consultas paralelas Neste vídeo, apresentaremos a otimização e execução de consultas paralelas, mostrando o modelo de execução com operador de troca e a otimização de consulta paralela. Modelo de execução com operador de troca Este modelo divide o processamento em duas fases, veja: Particionamento de dados com operador de troca Execução de operações de dados puramente locais O operador de troca realiza um novo particionamento dos dados a partir das necessidades da consulta, sendo o único responsável pelo intercâmbio de dados entre os nós. Todas as outras operações são realizadas em dados locais de forma similar ao que ocorre em bancos centralizados. O operador de troca possui dois componentes: um esquema para particionar dados de saída, aplicado em cada nó de origem, e um esquema para mesclar dados deentrada, aplicado em cada nó de destino. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 42/77 Ilustramos o processo denominando de partição, o esquema de origem, de execução e de destino. O operador de troca pode particionar dados de várias maneiras. Veja! Operador de troca. Vamos entender o processo de troca: 1. Por particionamento de HASH em um conjunto especificado de atributos. 2. Por intervalo de particionamento em um conjunto especificado de atributos. 3. Ao replicar os dados de entrada em todos os nós, referido como difusão. 4. No envio de todos os dados para um único nó. Observe também que a entrada para o operador de troca pode estar em um único site (referido como não particionado) ou já particionado em vários sites. O reparticionamento de dados já particionados resulta em cada nó de destino recebendo dados de várias fontes nós. Cada nó de destino recebe os itens de dados dos nós de origem e executa as operações como se os dados fossem locais. Todas as formas de obter paralelismo vistas até agora podem ser modeladas como uma sequência de operações de troca e operadores locais, em cada nó, que desconhecem completamente o paralelismo. Otimização de consulta paralela Exibe semelhanças com o processamento de consultas distribuídas, no entanto, concentra-se muito mais em aproveitar o paralelismo 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 43/77 intraoperações e interoperações. Um otimizador de consulta paralela possui três componentes, veja: Espaço de pesquisa Modelo de custo Estratégia de pesquisa Vamos conhecê-los melhor! Espaço de pesquisa Os planos de execução são normalmente representados por meio de árvores de operadores que definem a ordem de execução das operações. Essas árvores são normalmente anotadas indicando aspectos adicionais de execução, como o algoritmo que será utilizado naquela operação, sendo que no caso específico dos bancos paralelos deve ser anotado também o uso do pipeline. Vejamos alguns exemplos. Ilustramos as árvores de execução de operações sem pipeline, onde a relação temporária Temp1 deve ser completamente produzida e a tabela HASH em Build2 deve ser construída antes que o operar possa começar a consumir R3, o mesmo ocorrendo para Temp2, construir e operar na terceira sequência. Assim, a execução sem pipeline engloba quatro fases consecutivas, observe: 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 44/77 Árvore de execução sem pipeline. Vamos entender as fases: 1. Construir a tabela HASH de R1. 2. Operar a tabela HASH de R1 com R2 gerando a tabela Temp1. 3. Construir a tabela HASH de Temp1 e operar com R3 gerando Temp2. 4. Construir a tabela HASH de Temp2 e operar com R4 produzindo o resultado. A ilustração seguinte mostra as mesmas operações sendo executadas em pipeline, que pode ocorrer em duas fases se houver memória suficiente disponível para criar as tabelas de HASH. Confira! 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 45/77 Árvore de execução em pipeline. Vamos entender as fases: 1. Criar as tabelas HASH para R1 R3 e R4. 2. Executar as funções “operar no pipeline”. Modelo de custo Realiza a estimativa do custo de determinado plano de execução e engloba dois aspectos. Vamos conferir! Aspecto em que a estimativa de custo é baseada nos custos de transmissão dos dados entre os nós, do impacto do operador de troca ao realizar um novo particionamento dos dados, do consumo de memória, do tempo de processamento e do tempo de acesso aos discos. Aspecto que se constitui pelas funções que calculam o custo dos diversos algoritmos utilizados, como: junção, ordenação etc. Dependente da arquitetura Independente da arquitetura 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 46/77 O tempo total de um plano pode ser calculado simplesmente adicionando todos os componentes de custo dependente da arquitetura com os tempos previstos para os algoritmos das operações mais os tempos referentes ao pipeline. O tempo de resposta do plano p, programado em fases (cada uma denotada por ph), é calculado da seguinte forma: Valduriez, 2020, p. 373. Em que: Op denota um operador. respTime (Op) é o tempo de resposta de Op. pipe_delay (Op) é o período de espera de Op necessário para a entrega das primeiras tuplas de resultado (é igual a 0 se as relações de entrada de Op são armazenadas). store_delay(ph) é o tempo necessário para armazenar o resultado de saída da fase ph (é igual a 0 se ph for a última fase, assumindo que os resultados são entregues assim que são produzidos). Para estimar o custo de um plano de execução, o modelo de custo usa estatísticas de banco de dados e informações de organização, como cardinalidades de relação e particionamento, como na otimização de consulta distribuída. Estratégia de busca Esta estratégia não precisa ser diferente da otimização de consulta centralizada ou distribuída. No entanto, o espaço de busca tende a ser muito maior porque há mais parâmetros que impactam os planos de execução paralela, em particular, o pipeline. RT(p) = ∑ ph∈p (maxOp∈ph (r espTime(op) + pipe_delay(Op)) + store_delay(ph)) 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 47/77 Balanceamento de carga Neste vídeo, apresentaremos o balanceamento de carga, mostrando o balanceamento de carga intraoperações, interoperações e intraconsulta. Balanceamento de carga intraoperações Depende do grau de paralelismo e da alocação de processadores para o operador. Essa alocação tem que lidar com desvios de eficiência que podem ocorrer em tempo de execução, o que leva à utilização de dois tipos de técnicas de alocação. Vamos entendê-las! Técnicas adaptativas A ideia principal é decidir estaticamente sobre uma alocação inicial dos processadores para o operador (usando um modelo de custo) e, em tempo de execução, adaptar-se ao desvio usando a realocação de carga. Técnicas especializadas Os algoritmos de consultas paralela podem ser especializados para lidar com desvios. Uma abordagem é usar vários algoritmos de execução, cada um especializado em um grau diferente de distorção, e determinar, no tempo de execução, qual algoritmo é o melhor. Balanceamento de carga interoperações Para obter um bom balanceamento de carga no nível interoperador, é necessário escolher, para cada operador, quantos e quais processadores atribuir para sua execução. Isso deve ser feito considerando o paralelismo do pipeline. Em um sistema nada compartilhado, o balanceamento é mais difícil, sendo normalmente realizado dinamicamente (logo antes da execução) o grau de 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 48/77 paralelismo e a localização dos processadores para cada operador. Já em sistemas de disco compartilhado ou de memória compartilhada, há mais flexibilidade, pois o fato de todos os processadores terem acesso igual aos discos permite que qualquer um deles seja alocado para qualquer operador. Em particular, um processador pode ser alocado a todos os operadores na mesma cadeia de pipeline, portanto, sem paralelismo entre operadores. No entanto, o paralelismo interoperador é útil para a execução independente. Balanceamento de carga intraconsulta Deve combinar o paralelismo intraoperações e interoperações, o que, dependendo da arquitetura do sistema, pode ser bem difícil de se conseguir. Uma solução geral para o problema é o modelo de execução chamado dynamic processing (DP), cuja ideia fundamental é que a consulta seja decompostaem unidades independentes de processamento sequencial, cada uma das quais pode ser realizada por qualquer processador. O modelo de execução do DP é baseado em alguns conceitos. Vejamos! Ativações Referem-se a uma unidade sequencial de trabalho. Como qualquer ativação pode ser executada por qualquer thread (por qualquer processador), as ativações devem ser independentes e referenciar todas as informações necessárias para sua execução, ou seja, o código a ser executado e os dados a serem processados. Dois tipos de ativações podem ser distinguidos: Ativações de gatilho: Usadas para iniciar a execução de um operador. Ativações de dados: Descrevem uma tupla produzida no modo pipeline. Filas de ativação R f à i t ã d ti õ d d d 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 49/77 Falta pouco para atingir seus objetivos. Vamos praticar alguns conceitos? Questão 1 Considere as imagens: Elas mostram a execução das mesmas operações com e sem pipeline. Quanto a esses planos de execução, podemos afirmar que: A execução com pipeline produzirá um tempo de resposta menor se o sistema possuir muita memória disponível. Referem-se à movimentação de ativações de dados ao longo das cadeias de pipeline, que é feita usando filas de ativação associadas aos operadores. Essas filas são utilizadas para ativações de gatilhos entregando aos operadores os dados a serem utilizados. Threads Referem-se à ideia de alocar apenas um thread por consulta em um processador e permitir que ela consuma ativações de qualquer uma das filas disponíveis em sua memória. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 50/77 Porque Somente dessa forma as tabelas HASH podem ser geradas em paralelo, permitindo a execução em pipeline. Assinale a alternativa correta. Parabéns! A alternativa A está correta. Para que a execução em pipeline seja possível, a função operar deve poder receber da função HASH em cada estágio os valores intermediários produzidos junto com os valores intermediários produzidos por operar no estágio anterior. Para que isso ocorra, o sistema tem que possuir memória suficiente para as operações em paralelo, o que faz das duas afirmativas verdadeiras e a segunda justificando a primeira. Questão 2 Entre as técnicas utilizadas no paralelismo intraconsulta, temos o pipeline. Quanto a essa técnica, podemos afirmar que: Ela agiliza o processamento da consulta a partir das técnicas de intraoperações. Porque A As duas afirmações estão corretas e a segunda justifica a primeira. B As duas afirmações estão corretas e a segunda não justifica a primeira. C A primeira afirmação é correta e a segunda falsa. D A primeira afirmação é falsa e a segunda correta. E As duas afirmações são falsas. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 51/77 O pipeline permite que uma segunda operação comece a ser executada antes que a primeira operação termine. Assinale a alternativa correta. Parabéns! A alternativa D está correta. A primeira afirmativa é falsa porque o pipeline é uma técnica interoperações, não intraoperações, já a segunda afirmativa é verdadeira. A As duas afirmações estão corretas e a segunda justifica a primeira. B As duas afirmações estão corretas e a segunda não justifica a primeira. C A primeira afirmação é correta e a segunda falsa. D A primeira afirmação é falsa e a segunda correta. E As duas afirmações são falsas. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 52/77 4 - Bancos de dados em cluster Ao �nal deste módulo, você será capaz de criar e con�gurar um cluster de banco de dados PostgreSQL. Cluster e grid Neste vídeo, apresentaremos os principais conceitos relacionados a cluster e grid, mostrando as motivações para seu uso, bem como as suas diferenças e os tipos de cluster. Motivações para uso de cluster e grid As atividades de processamento de dados de grandes empresas e governos aumentaram muito ao longo dos anos. Duas soluções têm sido adotadas no atendimento dessa demanda, são elas: Utilizar computadores com grande poder de processamento, mainframes e supercomputadores. Utilizar computação paralela. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 53/77 A primeira solução tem como principal desvantagem a baixa escalabilidade, pois, quando as necessidades de processamento aumentam, a única solução possível é fazer um upgrade no equipamento, o que acarreta normalmente um dispêndio grande de recursos financeiros além do que a melhoria do equipamento normalmente acarreta a geração de uma grande capacidade ociosa inicial. Gráfico: Evolução da carga de processamento e a utilização da computação de grande porte. A segunda solução (utilizar sistemas paralelos) tem sido implementada basicamente com a utilização de cluster ou grid de computadores, que associam máquinas de menor porte de forma a agregar capacidade de processamento ao obter melhor escalabilidade e menor desperdício de capacidade computacional. Gráfico: Evolução da carga de processamento e a utilização da computação paralela. As duas soluções apresentam similaridades, como poder de processamento e disponibilidade elevados, suporte a milhares de transações por segundo, administração dos ambientes computacionais complexa e grande capacidade de armazenamento. Porém, a 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 54/77 computação de grande porte e a paralela possuem grandes diferenças, veja a comparação (MUSSI, 2013): Grande porte Alto custo de implantação. Dependência de fornecedor único. Utilização de hardware específico. Alto custo de manutenção. Dificuldade de redimensionamento do ambiente. Utilização parcial da capacidade de processamento. Grande custo total de propriedade. Tecnologia estabelecida no mercado. Cluster e grid Baixo custo de implantação. Independência de fornecedores – facilidade de negociação. Utilização de hardware comum – padrão PC. Baixo custo de manutenção. Facilidade de redimensionamento do ambiente. Maximização da capacidade de processamento. Baixo custo total de propriedade. Tecnologia inovadora. Note que, quando falamos aqui de computação paralela, estamos usando os termos cluster e grid. Mas eles são a mesma coisa? Diferenças entre cluster e grid Cluster e grid são muitas vezes vistos como sinônimos: um sistema paralelo composto por máquinas e interligado por um sistema de comunicação, normalmente uma rede de computadores. Eles realmente correspondem a essa definição, pois possuem como característica apresentar para o usuário um sistema que se comporta como se fosse centralizado e que atende às suas solicitações. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 55/77 Em ambos os casos aparece a figura do middleware, que corresponde a uma camada de software localizada entre os aplicativos e a infraestrutura dos nós, de forma a intermediar o diálogo entre os aplicativos e os servidores, implementando a transparência do sistema paralelo e dando ao usuário a ilusão de estar acessando um sistema centralizado. Observe! Middleware. Quando falamos em cluster, temos como principal característica o fato de ele ser constituído por um conjunto homogêneo de máquinas, tanto do ponto de vista de hardware como de software, ou seja, por exemplo, um cluster de banco de dados pode ser formado por máquinas que seguem a arquitetura X86, SO Linux e rodando PostgreSQL interligadas por uma rede local. Em sua configuração mais comum, um clusteré formado por um nó mestre, ou seja, a máquina principal que gerencia o funcionamento da aplicação entre todos os nós. O nó mestre faz a interface com o usuário, aloca tarefas e administra a fila de tarefas, normalmente executando um middleware. Ilustramos um cluster, que se encontra dentro do círculo pontilhado. Confira! 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 56/77 Cluster. Você poderia perguntar: “Mas grid não é mesma coisa?” Não exatamente. Como citado, cluster tem uma característica de homogeneidade, em termos de hardware e software, sendo criado para executar alguma tarefa específica que, em geral, necessita de alto poder de processamento, por exemplo, implementar um banco de dados paralelo. Já os grids possuem abordagem heterogênea, possuem muita variação de hardware e software, executam tarefas diferentes em seus nós, apesar de relacionadas entre si, correspondendo, muitas vezes, a uma interligação de diversos clusters, como o CineGrid, que trabalha no desenvolvimento de ferramentas de colaboração. Tipos de cluster Os clusters são criados com finalidades diferentes, sendo justamente o que determina o seu tipo. Vejamos então os principais tipos de cluster. Vamos lá? Cluster de alto desempenho Visa obter uma grande capacidade de processamento, com um volume alto de operações por segundo. Cluster de alta disponibilidade 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 57/77 Visa prover tolerância a falhas, mantendo o sistema ativo por longos períodos, com plena capacidade de processamento, conseguindo automaticamente identificar e corrigir erros. Cluster para balanceamento de carga Visa controlar a distribuição do processamento entre diversas máquinas de forma que nenhuma fique ociosa ou sobrecarregada. Ele realiza monitoramento constante da comunicação e nos mecanismos de redundância a fim de prevenir a ocorrência de falhas. Banco de dados em cluster Neste vídeo, mostraremos os principais conceitos relacionados ao banco de dados em cluster. Traremos também uma visão geral desse banco de dados, os princípios de processamento de transações e as técnicas utilizadas. Visão geral de banco de dados em cluster A camada de banco de dados é crítica, já que uma falha, indisponibilidade ou problemas de integridade podem gerar a indisponibilidade de um sistema inteiro e até mesmo a perda de dados. Por conta dessa característica, o uso de banco de dados paralelos em cluster vem sendo muito utilizado. Nessa solução, o gerenciamento de dados paralelo ocorre utilizando um SGBD de prateleira, normalmente desenvolvido para uso centralizado, em que o banco local não tem consciência da existência de um cluster, sendo os recursos de paralelismo no gerenciamento implementados por meio de middleware. Essa abordagem foi adotada com sucesso nos clusters MySQL ou PostgreSQL. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 58/77 Temos alguns cenários em que a tecnologia de cluster de banco de dados pode ser utilizada com eficiência. Vejamos! Arquitetura de cluster de banco de dados Veja um cluster de banco de dados com uma arquitetura nada compartilhado onde o gerenciamento paralelo de dados é feito por SGBDs independentes orquestrados por um middleware replicado em cada nó. Para melhorar o desempenho e a disponibilidade, os dados podem ser replicados em diferentes nós usando o SGBD local. Alta disponibilidade Visa aumentar a tolerância a falhas e facilitar o acesso aos dados, utilizando tecnologias de replicação específicas para o SGBD. Paralelização de donsultas SQL Visa aumentar a velocidade de processamento e diminuir o tempo de resposta de consultas SQL complexas, particionando e distribuindo-as em um conjunto de servidores. Balanceamento de carga Visa atender grandes aplicações transacionais, aumentando a quantidade de transações que podem ser realizadas ao mesmo tempo pela melhor utilização da capacidade de processamento dos diversos servidores evitando ociosidade ou sobrecarga e qualquer um deles. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 59/77 Cluster de banco de dados nada compartilhado. Aplicativos clientes interagem com o middleware de uma maneira clássica para enviar transações de banco de dados, ou seja, consultas ad hoc, transações ou chamadas para procedimentos armazenados. Alguns nós podem ser especializados como nós de acesso para receber transações, caso em que compartilham um serviço de diretório global que captura informações sobre usuários e bancos de dados. O processamento geral de uma transação para um único banco de dados é o seguinte: A transação é autenticada e autorizada usando o diretório. A transação, se bem- sucedida, é roteada para um SGBD em algum nó, possivelmente diferente, para ser executada. Processamento de transações em bancos de dados em cluster Como acontece em um SGBDP, o middleware do cluster de banco de dados possui várias camadas de software. Vamos analisá-las! Camada que aciona a execução da transação no melhor nó, usando as informações de carga obtidas das sondagens do nó. O melhor nó é definido como aquele que possui carga de transação mais leve. Ele garante ainda que cada execução de Balanceador de carga de transações 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 60/77 transação obedeça às propriedades ACID e, em seguida, sinaliza ao SGBD para confirmar ou abortar a transação. Camada que gerencia o acesso aos dados replicados e garante consistência forte de forma que as transações que atualizam os dados replicados sejam executadas na mesma ordem serial em cada nó. Camada que explora as seguintes formas de paralelismo: Interconsultas – Encaminha cada consulta enviada para um nó e, após a conclusão da consulta, envia os resultados para o aplicativo cliente. Intraconsultas – Como o sistema é implementado utilizando SGBD centralizado, em cada nó eles não podem interagir uns com os outros para processar a mesma consulta, cabendo ao processador controlar a execução da consulta, a composição do resultado e o balanceamento de carga. Camada que fornece recuperação e failover on-line. Em computação, failover significa tolerância a falhas. Quando um sistema, servidor ou outro componente de hardware ou software fica indisponível, um componente secundário assume operações sem que haja interrupção nos serviços. O processador de consultas explora o paralelismo interconsultas e intraconsultas. Técnicas em bancos de dados em cluster Gerenciador de replicação Processador de consultas Gerenciador de tolerância a falhas 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 61/77 Vários tipos de técnicas que vimos em bancos de dados paralelos e distribuídos são utilizadas nos bancos de dados em cluster. Confira! Replicação De forma similar ao que ocorre em bancos de dados distribuídos, os bancos em cluster utilizam a replicação para melhorar o desempenho e a disponibilidade. Em um cluster, a interconexão entre os nós é rápida e o sistema de comunicações dá suporte à serialização de cópias ao mesmo tempo que fornece escalabilidade devido ao ambiente estável e com pouca mudança na topologia da rede. Serialização de cópias Abordagem que evita conflitos e reforça a consistência em cluster de banco de dados. Para permitir esta serialização, são utilizados os seguintes passos: Cada transação de entrada T para o sistema tem um carimbo de tempo cronológico ts(T) = C, e é enviada para todos os outros nós onde há uma cópia. Em cada nó, um atraso de tempo é introduzido antesde iniciar a execução de T, visando garantir que todos os nós envolvidos tenham tempo de receber a mensagem com a transação. Quando o atraso expira, todas as transações que podem ter sido confirmadas antes de C têm a garantia de serem recebidas e executadas antes de T, seguindo a ordem do timestamp (ou seja, ordem total). Portanto, essa abordagem evita conflitos e reforça a consistência forte em clusters de banco de dados. Balanceamento de carga Em um cluster de banco de dados, com o uso da serialização de cópias na replicação, o balanceamento de carga pode ser alcançado com facilidade já que como todas as cópias são mutuamente consistentes, qualquer nó que armazene uma cópia dos dados da transação, por exemplo, o nó menos carregado, pode ser escolhido em tempo de execução por uma estratégia convencional de balanceamento de carga. Processamento de transações Em um cluster de banco de dados, o processamento paralelo de consultas pode ser usado com sucesso para gerar alto desempenho. O paralelismo interconsultas é obtido naturalmente como resultado do balanceamento de carga e da replicação. Comentário 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 62/77 O paralelismo interconsultas é útil principalmente para aumentar o throughput de aplicativos orientados a transações e, até certo ponto, reduzir o tempo de resposta de transações e consultas. Já para aplicativos OLAP (processamento analítico on-line), os quais normalmente usam consultas ad hoc que acessam grandes quantidades de dados, o paralelismo intraconsulta é utilizado para reduzir ainda mais o tempo de resposta sendo implementado pelo middleware. Implementando um cluster de banco de dados com PostgreSQL Neste vídeo, apresentaremos como implementar um cluster de banco de dados com PostgreSQL. Traremos também uma visão geral do cluster em PostgreSQL e falaremos sobre o Pgpool-II, mostrando a instalação e configuração do cluster utilizando o Pgpool-II. Visão geral do cluster em PostgreSQL O PostgreSQL é um SGBD de código aberto que possui uma grande comunidade atuante que desenvolveu muitas soluções para permitir que ele funcionasse de forma eficiente, tanto como banco distribuído como banco paralelo, buscando obter alta disponibilidade e balanceamento de carga. Dependendo do cenário, a solução deve permitir replicação síncrona ou assíncrona. O core do PostgreSQL foi aperfeiçoado para dar suporte a esses cenários com alguns recursos. Vamos detalhar! Hot standby / Streaming replication Disponível a partir do PostgreSQL 9.0 e fornece replicação binária assíncrona para um ou mais t db t bé d t h t 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 63/77 Standbys Refere-se ao banco de dados standby, sendo uma réplica do banco de dados principal. Sua utilização é possível para recuperação em caso de falha ou quando o principal banco não está disponível. A comunidade do SGBD desenvolveu ainda uma série de middleware para dar suporte à criação de clusters, especialmente nos casos da replicação de dados e alta disponibilidade, conforme evidenciado. Projeto Licença Maturidade PgCluster BSD Paralisado Pgpool-II BSD Atualizado Recentemente standbys, que também podem se tornar hot standbys, o que significa que podem ser consultados como um banco de dados somente leitura. Warm standby / Log shipping Não disponível para consulta, sendo uma solução de alta disponibilidade que “replica” um cluster de banco de dados para um arquivo ou um servidor de espera o qual pode ser ativado rapidamente. Extração lógica do conjunto de alterações Disponível a partir do PostgreSQL 9.4, forma a base dos recursos de replicação bidirecional e replicação lógica de log streaming. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 64/77 Projeto Licença Maturidade Slony BSD Estável Bucardo BSD Estável Londiste BSD Estável Comparação entre middleware de cluster do PostgreSQL. Podemos observar que o Pgpool-II é o mais completo, pois permite criar um pool de conexões, realizar replicação, balanceamento de carga e consulta paralela. Vamos estudá-lo com mais detalhes! O que é o Pgpool-II? É um middleware que funciona entre servidores PostgreSQL e um cliente de banco de dados PostgreSQL que suporte até 128 nós de banco de dados e utiliza replicação síncrona baseada em consultas que fornecem alguns recursos. Vejamos! Recurso em que o Pgpool-II salva as conexões com os servidores PostgreSQL e as reutiliza sempre que uma nova conexão com as mesmas propriedades chega, ou seja, nome de usuário, banco de dados, versão do protocolo. Reduz a sobrecarga da conexão e melhora a taxa de transferência geral do sistema. Recurso em que o Pgpool-II pode gerenciar vários servidores PostgreSQL. O uso da função de replicação permite criar um backup em tempo real em 2 ou mais discos físicos, para que o serviço possa continuar sem parar os servidores em caso de falha do disco. Pool de conexão Replicação 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 65/77 Recurso em que, se um banco de dados for replicado, a execução de uma consulta SELECT em qualquer servidor retornará o mesmo resultado. O Pgpool-II aproveita o recurso de replicação para reduzir a carga em cada servidor PostgreSQL, distribuindo consultas SELECT entre vários servidores, melhorando a taxa de transferência geral do sistema. Na melhor das hipóteses, o desempenho melhora proporcionalmente ao número de servidores PostgreSQL. O balanceamento de carga funciona melhor em uma situação em que há muitos usuários executando muitas consultas ao mesmo tempo. Recurso em que trava um limite no número máximo de conexões simultâneas com o PostgreSQL, sendo as conexões rejeitadas após esse número delimitado. Definir o número máximo de conexões, no entanto, aumenta o consumo de recursos e afeta o desempenho do sistema. O Pgpool-II também tem um limite no número máximo de conexões, mas conexões extras serão enfileiradas em vez de retornar um erro imediatamente. Recurso em que os dados podem ser divididos entre os vários servidores, para que uma consulta possa ser executada em todos os servidores simultaneamente a fim de reduzir o tempo geral de execução. A consulta paralela funciona melhor ao pesquisar dados em grande escala. Instalação e con�guração do cluster utilizando Pgpool-II A seguir, serão apresentados os passos para a instalação e configuração do Pgpool-II em uma máquina com o sistema Ubuntu. Iniciando a instalação Balanceamento de carga Limitando conexões excedidas Consulta paralela 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 66/77 A instalação inicia a partir dos pacotes da distribuição e, para isso, devem ser emitidos os seguintes comandos no terminal: sudo apt-get update Comando sudo apt-get update. sudo apt-get install pgpool2 Comando sudo apt-get install Pgpool-II Con�guração básica Agora, vamos começar a configuração. Para isso, teremos que alterar alguns parâmetros no arquivo de configuração do pgpool2. Pelo terminal, vá até o diretório do arquivo, no exemplo, é: cd/etc/pgpool2. Encontrando o arquivo para configuração do Pgpool-II no terminal. Abra o arquivo pgpool.conf utilizando o vi ou o vim. Lembre-se de colocar sudo antes e depois quando for pedido a senha do root. Abrindo o arquivo para configuração do Pgpool-II no terminal. Depois, quando for pedida a senha do root o arquivo será aberto no editor. 21/11/2023, 07:43 Sistemas de banco de dados paralelos https://stecine.azureedge.net/repositorio/00212ti/07593/index.html# 67/77 Arquivo aberto no terminal para configuração do Pgpool-II. Outra forma
Compartilhar