Database
 sql >> Base de Dados >  >> RDS >> Database

Os 10 principais métodos para melhorar o desempenho de ETL usando o SSIS


Extraction Transformation Load (ETL) é a espinha dorsal de qualquer data warehouse. No data warehouse, os dados mundiais são gerenciados pelo processo ETL, que consiste em três processos:Extração-Pull/Adquirir dados de fontes, Dados de mudança de transformação no formato necessário e Carregar dados de push para o destino geralmente em um data warehouse ou um datamart.

Aprenda SSIS e comece sua avaliação gratuita hoje mesmo!


SQL Server Integration Services (SSIS) é a ferramenta da família ETL que é útil para desenvolver e gerenciar um data warehouse corporativo. Um data warehouse por sua própria caracterização funciona em um grande volume de dados e desempenho é um grande desafio ao gerenciar um grande volume de dados para qualquer Arquiteto ou DBA.

Considerações de melhoria de ETL


Hoje, discutirei a facilidade com que você pode melhorar o desempenho do ETL ou projetar um sistema ETL de alto desempenho com a ajuda do SSIS. Para uma melhor compreensão, dividirei dez métodos em duas categorias diferentes; primeiro, considerações sobre o tempo de design do pacote SSIS e, segundo, a configuração de diferentes valores de propriedade dos componentes disponíveis no pacote SSIS.

Considerações de tempo de design do pacote SSIS


#1 Extrair dados em paralelo:o SSIS fornece a maneira de extrair dados em paralelo usando contêineres de sequência no fluxo de controle. Você pode projetar um pacote de forma que possa extrair dados de tabelas ou arquivos não dependentes em paralelo, o que ajudará a reduzir o tempo geral de execução de ETL.

#2 Extraia os dados necessários:extraia apenas o conjunto de dados necessário de qualquer tabela ou arquivo. Você precisa evitar a tendência de puxar tudo o que está disponível na fonte por enquanto que você usará no futuro; consome largura de banda da rede, consome recursos do sistema (E/S e CPU), requer armazenamento extra e degrada o desempenho geral do sistema ETL.

Se o seu sistema ETL for realmente dinâmico por natureza e seus requisitos mudarem com frequência, seria melhor considerar outras abordagens de design, como ETL orientado por Meta Data, etc., em vez de projetar para extrair tudo de uma vez.

#3 Evite o uso de componentes de transformação assíncrona:o SSIS é uma ferramenta rica com um conjunto de componentes de transformação para realizar tarefas complexas durante a execução de ETL, mas ao mesmo tempo custa muito se esses componentes não estiverem sendo usados ​​corretamente.

Duas categorias de componentes de transformação estão disponíveis no SSIS:Síncrono e Assíncrono .

As transformações síncronas são aqueles componentes que processam cada linha e empurram para o próximo componente/destino, ele usa memória de buffer alocada e não requer memória adicional, pois é uma relação direta entre linha de dados de entrada/saída que se encaixa completamente na memória alocada. Componentes como Pesquisa, Colunas Derivadas e Conversão de Dados etc. se enquadram nesta categoria.

As transformações assíncronas são os componentes que primeiro armazenam dados na memória de buffer e processam operações como Classificar e Agregar. É necessária memória de buffer adicional para concluir a tarefa e, até que a memória de buffer esteja disponível, ela mantém todos os dados na memória e bloqueia a transação, também conhecida como transformação de bloqueio. Para concluir a tarefa, o mecanismo SSIS (motor de pipeline de fluxo de dados) alocará memória de buffer extra, que é novamente uma sobrecarga para o sistema ETL. Componentes como Sort, Aggregate, Merge, Join, etc. se enquadram nesta categoria.

No geral, você deve evitar transformações assíncronas, mas ainda assim, se você se deparar com uma situação em que não tenha outra opção, deve saber como lidar com os valores de propriedade disponíveis desses componentes. Vou discuti-los mais tarde neste artigo.

#4 Uso ideal de evento em manipuladores de eventos:para rastrear o andamento da execução do pacote ou realizar qualquer outra ação apropriada em um evento específico, o SSIS fornece um conjunto de eventos. Os eventos são muito úteis, mas o uso excessivo de eventos custará uma sobrecarga extra na execução do ETL.

Aqui, você precisa validar todas as características antes de habilitar um evento no pacote SSIS.

#5 Precisa estar ciente do esquema da tabela de destino ao trabalhar em um grande volume de dados. Você precisa pensar duas vezes quando precisar extrair um grande volume de dados da fonte e empurrá-lo para um data warehouse ou data mart. Você pode ter problemas de desempenho ao tentar enviar dados enormes para o destino com uma combinação de operações de inserção, atualização e exclusão (DML), pois pode haver uma chance de que a tabela de destino tenha índices clusterizados ou não clusterizados, o que pode causar muitos dados embaralhados na memória devido a operações DML.

Se o ETL estiver tendo problemas de desempenho devido a uma grande quantidade de operações DML em uma tabela que possui um índice, você precisará fazer as alterações apropriadas no design do ETL, como descartar os índices clusterizados existentes na fase de pré-execução e recriar todos os índices na fase pós-execução. Você pode encontrar outras alternativas melhores para resolver o problema com base na sua situação.

Configurar propriedades de componentes


#6 Controle a execução paralela de uma tarefa configurando o MaxConcurrentExecutables e EngineThreads propriedade. O pacote SSIS e as tarefas de fluxo de dados têm uma propriedade para controlar a execução paralela de uma tarefa:MaxConcurrentExecutables é a propriedade de nível de pacote e tem um valor padrão de -1 , o que significa que o número máximo de tarefas que podem ser executadas é igual ao número total de processadores na máquina mais dois;


Pacote

EngineThreads é uma propriedade de nível de tarefa de fluxo de dados e tem um valor padrão de 10, que especifica o número total de encadeamentos que podem ser criados para executar a tarefa de fluxo de dados.


Tarefa de fluxo de dados

Você pode alterar os valores padrão dessas propriedades de acordo com as necessidades de ETL e disponibilidade de recursos.

#7 Configure a opção de modo de acesso a dados no destino OLEDB. Na tarefa de fluxo de dados do SSIS, podemos encontrar o destino OLEDB, que fornece algumas opções para enviar dados para a tabela de destino, no modo Acesso a dados; primeiro, a opção “Tabela ou visualização”, que insere uma linha por vez; segundo, a opção “Table or view fast load”, que utiliza internamente a instrução bulk insert para enviar os dados para a tabela de destino, o que sempre proporciona melhor desempenho em relação a outras opções. Depois de escolher a opção “carregamento rápido”, ela oferece mais controle para gerenciar o comportamento da tabela de destino durante uma operação de envio de dados, como Manter identidade, Manter nulos, Bloqueio de tabela e Verificar restrições.


Editor de destino OLE DB

É altamente recomendável que você use a opção de carregamento rápido para enviar dados para a tabela de destino para melhorar o desempenho de ETL.

#8, Configurar Linhas por Lote e Tamanho Máximo de Confirmação de Inserção no destino OLEDB. Essas duas configurações são importantes para controlar o desempenho do tempdb e do log de transações porque, com os valores padrão fornecidos dessas propriedades, ele enviará dados para a tabela de destino em um lote e uma transação. Isso exigirá o uso excessivo de tembdb e log de transações, o que se transforma em um problema de desempenho de ETL devido ao consumo excessivo de memória e armazenamento em disco.


Editor de destino OLE DB

Para melhorar o desempenho do ETL, você pode colocar um valor inteiro positivo em ambas as propriedades com base no volume de dados antecipado, o que ajudará a dividir um monte de dados em vários lotes, e os dados em um lote podem ser confirmados novamente na tabela de destino, dependendo do valor especificado. Isso evitará o uso excessivo de tempdb e log de transações, o que ajudará a melhorar o desempenho do ETL.

#9 Uso do SQL Server Destination em uma tarefa de fluxo de dados. Quando você deseja enviar dados para um banco de dados local do SQL Server, é altamente recomendável usar o SQL Server Destination, pois oferece muitos benefícios para superar as limitações de outras opções, o que ajuda a melhorar o desempenho do ETL. Por exemplo, ele usa o recurso de inserção em massa integrado ao SQL Server, mas oferece a opção de aplicar a transformação antes de carregar dados na tabela de destino. Além disso, oferece a opção de ativar/desativar o gatilho a ser acionado ao carregar dados, o que também ajuda a reduzir a sobrecarga de ETL.


Componente de fluxo de dados de destino do SQL Server

#10 Evite typecast implícito. Quando os dados vêm de um arquivo simples, o gerenciador de conexões de arquivo simples trata todas as colunas como um tipo de dados de cadeia (DS_STR), incluindo colunas numéricas. Como você sabe, o SSIS usa memória de buffer para armazenar todo o conjunto de dados e aplica a transformação necessária antes de enviar os dados para a tabela de destino. Agora, quando todas as colunas são do tipo de dados string, será necessário mais espaço no buffer, o que reduzirá o desempenho do ETL.

Para melhorar o desempenho do ETL, você deve converter todas as colunas numéricas no tipo de dados apropriado e evitar a conversão implícita, o que ajudará o mecanismo SSIS a acomodar mais linhas em um único buffer.

Resumo das melhorias de desempenho de ETL




Neste artigo, exploramos a facilidade com que o desempenho do ETL pode ser controlado a qualquer momento. Estas são 10 maneiras comuns de melhorar o desempenho do ETL. Pode haver mais métodos baseados em diferentes cenários através dos quais o desempenho pode ser melhorado.

No geral, com a ajuda da categorização, você pode identificar como lidar com a situação. Se você estiver na fase de design de um data warehouse, talvez precise se concentrar em ambas as categorias, mas se estiver dando suporte a qualquer sistema legado, primeiro trabalhe de perto na segunda categoria.