Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

O artigo aborda como utilizar técnicas de programação paralela para executar instruções SQL como INSERT, SELECT, UPDATE e DELETE mais rapidamente no SQL Server. São apresentadas técnicas, testes e comentários sobre o uso de paralelismo em banco de dados.


Em que situação o tema é útil:

A utilização de técnicas de programação paralela em instruções SQL é útil para otimizar o desempenho e executar mais rapidamente instruções INSERT, UPDATE, DELETE e SELECT que trabalhem com grandes quantidades de dados em computadores com múltiplos núcleos.

Resumo DevMan:

A utilização de múltiplos núcleos em um microprocessador é uma realidade nos computadores atuais. Contudo, poucos programadores são capazes de extrair o máximo potencial deste recurso. Com base neste contexto, este artigo apresenta como implementar técnicas de programação paralela no banco de dados SQL Server. Uma solução que utiliza um assembly .NET é apresentada junto com diversos testes de desempenho que comprovam a melhoria nos tempos execução. Em geral, os testes de desempenho mostram que os ganhos obtidos nas execuções de instruções SELECT, INSERT, UPDATE e DELETE são de aproximadamente 79%.

O principal componente de um computador moderno é o microprocessador. Este componente vem recebendo cada vez mais tecnologias inovadoras para atender as demandas de processamento da maioria das aplicações independente de área de especialização, dispositivos ou ambientes. Uma das principais tecnologias que vem sendo aprimorada, junto com o aumento do clock do microprocessador, envolve o emprego de múltiplos núcleos. De fato, a maioria dos fabricantes de microprocessadores atualmente investe mais na capacidade de multiprocessamento através de diversos núcleos (cores) do que no aumento da quantidade de instruções que podem ser executadas a cada ciclo do microprocessador. Este investimento é observado nos microprocessadores equipados tanto em computadores desktop e servidores como em dispositivos móveis (smartphones e tablets) que já estão recebendo microprocessadores com múltiplos núcleos.

Contudo, infelizmente o desenvolvimento atual de software não consegue acompanhar o crescimento tecnológico proporcionado pelas arquiteturas de múltiplos núcleos. Isso implica que em quase todas as aplicações o uso do microprocessador é subutilizado, pois os desenvolvedores não utilizam as técnicas corretas para obter o máximo desempenho do microprocessador. Uma das maneiras de se explorar a maior utilização dos microprocessadores de múltiplos núcleos é o emprego de técnicas de programação paralela. Com base neste contexto, este artigo apresentará como é possível aplicar algumas das técnicas de processamento paralelo junto com banco de dados, uma área que, infelizmente, possui poucos recursos para a exploração de tais técnicas.

Neste contexto, este artigo apresentará como obter ganhos de desempenho significativos quando se utiliza técnicas de paralelismo em instruções SQL como SELECT, INSERT, UPDATE e DELETE através de diversos testes e análises dos tempos de execução. O artigo abordará aspectos da programação de instruções paralelas no SQL Server e pode ser utilizado como base para implementar as ideias aqui apresentadas em outros contextos, instruções, bancos de dados e conjunto de operações.

Processamento paralelo

O processamento paralelo geralmente é visto como uma área à parte da programação e que, infelizmente, não é ensinada e disseminada entre a maioria dos desenvolvedores. Apesar da sua extrema importância não apenas para aplicações científicas de alto desempenho, identificadas pela sigla HPC (High Performance Computing) – veja a Nota DevMan 1, são raros os exemplos de aplicações comerciais onde é possível encontrar soluções que exploram técnicas de processamento paralelo para otimização e ganho de desempenho.

Nota DevMan 1. HPC

Computação de alto desempenho ou HPC (High Performance Computing) se refere ao uso de supercomputadores ou clusters de vários computadores em tarefas que requerem grandes recursos de computação, geralmente simulações numéricas muito complicadas. É comum classificar um computador como sistemas HPC quando sua performance é de pelo menos alguns teraflops.

Computação de alto desempenho (HPC) é um termo que surgiu após o termo supercomputadores. HPC é por vezes utilizado como sinônimo de supercomputação, mas, em outros contextos, supercomputador é usado para se referir a um subconjunto mais poderoso de computadores de alto desempenho.

Um termo relacionado, computação de alto desempenho técnico (HPTC), geralmente se refere às aplicações de engenharia de computação baseada em cluster (como dinâmica de fluidos computacional e na construção e teste virtual de protótipos). Recentemente HPC vem sendo aplicada a negócios como data warehouses, linha de negócios (LOB) e processamento de transações.

Neste ponto é importante destacar que o processamento paralelo deve ser diferenciado do processamento distribuído, pois a primeira área se preocupa exclusivamente com otimização do tempo de execução enquanto a segunda área foca em questões como balanceamento de carga, disponibilidade, otimização de recursos (tempo de execução, memória, acesso a disco), escalabilidade, segurança e outros aspectos.

No contexto de banco de dados é raro encontrar o uso adequado de algumas das principais técnicas de processamento paralelo. Um dos motivos para esta ausência está ligado às origens da área: o armazenamento e o gerenciamento de dados e não a execução de grandes quantidades de operações que se beneficiariam de um processamento otimizado. Contudo, cada vez mais os bancos de dados são responsáveis por realizar muitas operações nos dados, principalmente devido à execução simultânea de múltiplas instruções SQL realizadas por diversos usuários diferentes. A propósito, um dos principais testes de desempenho de bancos de dados, popularmente conhecido como TPC (Transaction Processing Performance Council – Nota DevMan 2), foca na capacidade dos bancos de dados em executar transações de forma concorrente e não em métricas específicas para a medição de capacidade de processamento, como Flops (veja a Nota DevMan 3).

Nota DevMan 2. TPC

O TPC (ou Transaction Processing Performance Council) é uma organização sem fins lucrativos, tendo como objetivo principal estabelecer critérios para se obter informações a respeito da performance de processamento de transações e de banco de dados através de benchmarks. Baseia-se em testes padronizados tais como o TPC-C, o TPC-W e o TPC-H para obter tais resultados e só assim divulgar os dados reais dessa performance. Estes testes do TPC seguem normas extremamente rigorosas que testam diversos pontos do sistema – principalmente nos quesitos confiabilidade e durabilidade. O endereço do site do TPC é http://tpc.org.

O TPC-C é considerado o benchmark padrão da indústria para avaliar a performance e a escalabilidade de sistemas OLTP. Este se encarrega de testar a maior parte das funcionalidades de um banco de dados, tais como: consultas, atualização e mini-batches de transações em filas. Este benchmark mede a taxa de transferência (throughput) de transações de negócios por minuto, simulando um ambiente de pedidos que entram no sistema e sua distribuição. Desta forma, o teste quantifica quantas novas transações de pedidos um sistema pode absorver por minuto enquanto esse mesmo sistema executa, simultaneamente, outros quatro tipos de transações (pagamentos, atualização do status dos pedidos, distribuição e alteração dos níveis de estoques).

...
Quer ler esse conteúdo completo? Tenha acesso completo