Compartilhar via


Projetando seus pacotes SSIS para o paralelismo (vídeo do SQL Server)

Aplica-se a:: Microsoft SQL Server Integration Services

Autores: Matt Carroll, Microsoft Corporation

Duração: 00:12:37

Tamanho: 29,2 MB

Tipo: arquivo WMV

Assistir a este vídeo

Tópicos da Ajuda relacionados:

Criando e modificando colunas de identificador

Transferindo dados de forma eficaz usando a alternância de partição

Postagens em blogs e artigos relacionados:

Top 10 SQL Server Integration Services Best Practices

ETL World Record

Vídeos adicionais:

Medindo e compreendendo o desempenho de seus pacotes SSIS na empresa (vídeo do SQL Server)

Ajustando seu fluxo de dados de pacotes SSIS na empresa (vídeo do SQL Server)

Noções básicas sobre buffers de fluxo de dados SSIS (vídeo do SQL Server)

Resumo do vídeo

Este vídeo demonstra como melhorar o desempenho de seus pacotes Integration Services projetando o paralelismo.

Agradecimentos

Obrigado a Thomas Kejser pela contribuição no material para a Série de vídeos SSIS: projetando e ajustando o desempenho do SQL Server. Este vídeo é o quarto da série.

Obrigado a Carla Sabotta e a Douglas Laudenschlager pela orientação e pelos comentários valiosos.

Notas técnicas do vídeo

Dd795221.note(pt-br,SQL.100).gifObservação:
As notas técnicas são trechos selecionados do vídeo.

Estes são os princípios do design paralelo: particionar o problema, eliminar conflitos e agendar com eficiência.

A ideia do design paralelo é dividir um problema grande em partes menores independentes e separar o trabalho. No Integration Services, dividir o problema em partes menores significa particionar os dados a serem processados. Tente fazer com que essas partições fiquem do mesmo tamanho, pois isso tornará o agendamento mais eficiente e a distribuição muito mais simples.

Em seguida, é necessário eliminar conflitos entre as partes menores do trabalho, para que elas possam ocorrer em paralelo sem interferir umas nas outras. Você fará um design sem estado, o que significa que cada unidade de trabalho é independente e não precisa de coordenação com qualquer outra para realizar o seu trabalho. Você também deverá reduzir a disputa por recursos externos.

Finalmente, é necessário pegar as pequenas partes de trabalho independentes e espalhá-las para que sejam concluídas com mais rapidez. Isso significa agendar e distribuir o trabalho de forma que seus recursos mais críticos sejam usados com eficiência. Significa também usar o tempo com inteligência e não permitir que uma tarefa longa domine o tempo de execução. Se você imaginar um gráfico de Gantt do trabalho a ser realizado, deverá balancear a carga de trabalho de forma que todo o trabalho termine o mais cedo possível.

Particionando o problema

Você deverá particionar seus dados de origem em partes menores de tamanho equivalente. Isso pode ser feito com base em variações naturais nos dados, como, por exemplo, por tempo ou geografia. Ou, se você tiver uma coluna de identidade, poderá modular os valores nela para identificar partições iguais. Caso contrário, poderá retornar para aplicar uma função de hash em colunas de chave para produzir partições.

Além de particionar a tabela de origem, você poderá particionar as tabelas de destino para que correspondam ao particionamento de seus dados de origem. O comando SQL SWITCH oferece um mecanismo muito eficiente para adicionar e remover partições em uma tabela.

Eliminando conflitos

Depois de particionar o problema, é preciso eliminar quaisquer possíveis conflitos entre essas partições. Um design sem estado é importante para evitar interações complexas e eventuais conflitos. Para assegurar que o pacote esteja sem estado em seu design, você deverá passar por ele todas as informações necessárias para que o trabalho seja realizado.

Certifique-se de evitar a contenção de bloqueio. Muitas conexões inserindo na mesma tabela ocasionalmente causarão a contenção. Para evitar isso, use tabelas particionadas e tire proveito do SQL SWITCH.

Tome cuidado com qualquer contenção de hardware de controle. Se a E/S de disco for um problema, use mais unidades ou unidades mais rápidas. Se a E/S de rede for um problema, adicione ou atualize controladores de rede. Se o uso de CPU ou memória for um problema, execute em um computador com mais processadores ou mais memória, ou em vários computadores. E lembre-se de que o Integration Services é projetado para execução na memória, então assegure-se de que cada pacote tenha memória suficiente.

Agendando com eficiência

Depois de particionar em tarefas menores e eliminar conflitos entre as tarefas, você poderá agendar essas tarefas para que sejam executadas com eficiência. Para criar uma agenda eficiente, comece definindo uma fila de prioridade do trabalho a ser realizado. Uma tabela SQL é ótima para essa finalidade.

Em seguida, inicie várias cópias do pacote que criou para realizar o trabalho. O uso do comando START do Windows para invocar o dtexec.exe é uma forma simples e eficiente de fazer isso. O número de pacotes que você inicia determina o grau de paralelismo que será usado.

Cada um desses pacotes processará o trabalho a partir da fila de tarefas, com base na prioridade, até não haver mais trabalho a ser realizado. Um loop dentro do pacote primeiro retira uma tarefa da fila de prioridade e realiza o trabalho definido pela tarefa; depois repete o processo até a fila de tarefas ficar vazia.

Demonstração

Na primeira etapa da demonstração, cada tarefa está sendo processada em sequência por uma única instância do pacote.

Na segunda etapa, dois processos estão trabalhando em paralelo. As tarefas são concluídas em lotes de duas, e o tempo de execução total da demonstração é reduzido a cerca da metade, de 64 para 36 segundos.

Na terceira etapa, quatro processos estão trabalhando em paralelo. O tempo para tarefas individuais subiu de 9 segundos para cerca de 14 segundos. E o tempo de execução total caiu de cerca de 36 segundos para 28 segundos.

Na última etapa, oito processos estão trabalhando em paralelo. Como todas as tarefas são realizadas simultaneamente, o tempo de cada tarefa subiu para cerca de 27 segundos, e o tempo total é quase o mesmo que com quatro processos. O que aconteceu aqui é que atingimos um afunilamento de E/S de disco, já que todos os oito processos disputam para ler seus arquivos de dados do disco. Para resolver esse problema, poderíamos espalhar os arquivos em discos e controladores separados, ou movê-los para uma tecnologia de disco mais rápida.

Consulte também

Outros recursos

Equipe SQLCAT

Ajuda e informações

Obtendo assistência do SQL Server 2008