Nesta resposta, tentarei fornecer informações da documentação oficial do SSIS e mencionarei minha experiência pessoal com o destino do SQL Server.
1. Destino do SQL Server
De acordo com a documentação oficial do SQL Server Destination:
O destino do SQL Server se conecta a um banco de dados local do SQL Server e carrega dados em massa em tabelas e exibições do SQL Server. Você não pode usar o destino do SQL Server em pacotes que acessam um banco de dados do SQL Server em um servidor remoto. Em vez disso, os pacotes devem usar o destino OLE DB.
O destino do SQL Server oferece a mesma inserção de dados em alta velocidade no SQL Server que a tarefa Bulk Insert fornece; no entanto, usando o destino do SQL Server, um pacote pode aplicar transformações aos dados da coluna antes que os dados sejam carregados no SQL Server.
Para carregar dados no SQL Server, você deve considerar usar o destino do SQL Server em vez do destino OLE DB
2. Destino OLEDB
De acordo com a documentação oficial do Destino OLEDB:
Destino OLEDB - opção de carregamento rápido:carregue dados em uma tabela ou exibição no destino OLE DB e use a opção de carregamento rápido, otimizada para inserções em massa
3. Destino OLEDB vs Destino do SQL Server
De acordo com o destino do SQL Server vs destino OLE DB - tópico MSDN:
Donald Farmer, ex-Gerente de Programa de Grupo para Serviços de Integração, disse que você pode obter um aumento de 5 a 10% no desempenho usando o
SQL Server Destination
. Além disso, referindo-se ao seguinte post de Matt Masson, especialista em integração de dados da Microsoft, onde ele respondeu à seguinte pergunta:
Devo usar o Destino do SQL Server?
A resposta foi
Não
...
Minha recomendação é que, se você precisar de todo o desempenho (um aumento de desempenho de 10% em uma carga de 10 horas pode ser significativo), experimente o SQL Server Destination para ver como ele funciona para você. No entanto, lembre-se das seguintes limitações do Destino do SQL Server:
- Você deve ter o SSIS em execução na mesma máquina que o banco de dados de destino
- Você deve executar o pacote como administrador
- É muito difícil depurar quando as coisas dão errado
Dadas essas limitações, recomendo usar o destino OLE DB mesmo se você estiver vendo um aumento de desempenho com o Destino do SQL Server.
3.1. O Guia de desempenho de carregamento de dados
(Atualização em 25/03/2019)
Ao pesquisar as melhores práticas do SSIS, encontrei um artigo muito útil da Microsoft que pode ser usado como referência:
- Guia de desempenho de carregamento de dados
Neste artigo eles fizeram uma comparação entre todos os métodos de carregamento de dados, incluindo o destino do SQL Server e o destino OLEDB, eles mencionaram que:
Destino do SQL Server O destino do SQL Server é a maneira mais rápida de carregar dados em massa de um fluxo de dados do Integration Services para o SQL Server. Este destino oferece suporte a todas as opções de carregamento em massa do SQL Server – exceto ROWS_PER_BATCH.
Esteja ciente de que esse destino requer conexões de memória compartilhada com o SQL Server. Isso significa que ele só pode ser usado quando o Integration Services estiver sendo executado no mesmo computador físico que o SQL Server.
Destino OLE DB: O destino OLE DB oferece suporte a todas as opções de carregamento em massa para SQL Server. No entanto, para dar suporte ao carregamento em massa ordenado, algumas configurações adicionais são necessárias. Para obter mais informações, consulte “Dados de entrada classificados”. Para usar a API em massa, você precisa configurar esse destino para “carregamento rápido”.
O destino OLE DB pode usar conexões TCP/IP e de pipes nomeados para o SQL Server. Isso significa que o destino OLE DB, diferentemente do destino SQL Server, pode ser executado em um computador diferente do destino de carregamento em massa. Como os pacotes do Integration Services que usam o destino OLE DB não precisam ser executados no próprio computador do SQL Server, você pode dimensionar o fluxo ETL com servidores potentes.
3.2. Experiência pessoal
(Atualização em 25/03/2019)
Como essa pergunta é usada como referência por muitos e depois de ter mais experiência nesse domínio, adicionei esta seção para mencionar minha experiência pessoal usando o destino do SQL Server.
Embora a documentação oficial mencione que o destino do SQL Server aumentará o desempenho, não recomendo usar esses componentes devido a vários motivos:
- Requer que o servidor de destino e o servidor ETL sejam os mesmos (funciona apenas com o servidor SQL local)
- Sempre lança uma exceção que não tem nenhum significado
- Após testar em um grande volume de dados, a diferença de desempenho com o destino OLEDB é insignificante (testado em cerca de 500 GB de dados carregados em partes e a diferença de tempo é inferior a um minuto)
Você também pode consultar o seguinte post (de @billinkc) para obter mais informações sobre este tópico:
- Os pacotes SSIS e o banco de dados SQL devem estar no mesmo servidor?
4. Conclusão
Com base nos artigos da Microsoft, você pode dizer que
SQL Server Destination
aumentar o desempenho da inserção de dados (usa inserção BULK) , mas é projetado para um caso específico que é o servidor SQL local. OLEDB Destination
é mais geral e recomendado nos outros casos e usando o Fast Load
modo de acesso a dados (que também usa inserção BULK) no OLE DB destination
aumentará o desempenho da carga de dados. Por outro lado, com base na minha experiência e em muitos artigos escritos por especialistas em SSIS, não é recomendado usar o SQL Server Destination uma vez que não é estável e muitas vezes lança exceção e o desempenho pode ser considerado insignificante.
Informações Adicionais
Recentemente, publiquei um artigo detalhado sobre este tema. Você pode conferir em:
- Destino do SSIS OLE DB vs Destino do SQL Server