Otimizando o desempenho de importação em massa

Este tópico descreve as opções para otimizar a importação em massa de dados para uma tabela no Microsoft SQL Server usando um comando bcp, instrução BULK INSERT ou função OPENROWSET (BULK...) (Transact-SQL). Para importar ou exportar dados em massa tão rapidamente quanto possível, é importante entender os fatores que afetam o desempenho e os qualificadores de comando que estão disponíveis para administrar o desempenho. Onde possível, use uma instrução Transact-SQL para importar dados em massa no SQL Server porque o Transact-SQL é mais rápido que o bcp.

ObservaçãoObservação

Para obter uma comparação desses métodos, consulte Sobre operações de importação e exportação em massa.

Como melhorar o desempenho de uma operação de importação em massa em particular é influenciado pelos seguintes fatores:

  • Se a tabela tem restrições ou gatilhos, ou ambos.

  • O modelo de recuperação usado pelo banco de dados.

    Para obter mais informações, consulte Visão geral do modelo de recuperação.

  • Se a tabela na qual os dados são copiados está vazia.

  • Se a tabela tem índices.

  • Se TABLOCK está sendo especificado.

  • Se os dados estão sendo copiados de um único cliente ou copiados em paralelo de vários clientes.

  • Se os dados serão copiados entre dois computadores nos quais o SQL Server está sendo executado.

Observação importanteImportante

No SQL Server 2005 e versões posteriores, as otimizações de importação em massa estão disponíveis quando os gatilhos estão habilitados. O controle de versão de linha é usado para gatilhos e armazena as versões de linha no armazenamento de versão em tempdb. Antes de poder executar uma importação em massa de um lote grande de registros de dados que usam gatilhos, você pode precisar expandir o tamanho de tempdb para acomodar o impacto dos gatilhos no armazenamento de versão.

Para obter informações de como esses fatores afetam cenários de importação em massa, consulte Diretrizes para otimizar a importação em massa.

Métodos para otimizar a importação em massa

Para acelerar a importação em massa de dados, o SQL Server oferece a você os seguintes métodos:

  • Usando log mínimo

    O modelo de recuperação simples faz o log mínimo da maioria das operações em massa.

    Para um banco de dados no modelo de recuperação completa, todas as operações de inserção de linha executadas durante a importação em massa são completamente registradas no log de transações. Para importações de dados grandes, isso pode encher o log de transações rapidamente. Para operações de importação em massa, o log mínimo é mais eficiente que o log completo e reduz a possibilidade de uma operação de importação em massa encher o espaço do log. Para fazer log mínimo de uma operação de importação em massa em um banco de dados que normalmente usa o modelo de recuperação completa, você pode primeiro alterar o banco de dados para o modelo de recuperação bulk-logged. Depois de importar os dados em massa, retorne o modelo de recuperação ao modelo de recuperação completa. Para obter mais informações, consulte Considerações sobre como alternar do modelo de recuperação completa ou bulk-logged.

    ObservaçãoObservação

    As linhas inseridas terão log mínimo se um log em massa otimizado for aplicável; caso contrário, as linhas inseridas serão registradas por completo no log de transações. Para obter informações sobre quando as operações de importação em massa são registradas e como executar operações de importação em massa com log mínimo, consulte Operações que podem ser minimamente registradas em log e Pré-requisitos para log mínimo em importação em massa.

  • Importando dados em paralelo de vários clientes para uma única tabela

    O SQL Server permite que dados em massa sejam importados de vários clientes para uma única tabela. Todos os três mecanismos de importação em massa oferecem suporte à importação paralela de dados. Isso pode melhorar o desempenho de operações de importação de dados.

    Para obter mais informações, consulte Importando dados em paralelo com bloqueio em nível de tabela.

  • Usando lotes

    Para obter informações sobre o uso de lotes ao importar dados e para obter informações sobre os qualificadores de comando para administrar lotes, consulte Gerenciando lotes para importar em massa.

    ObservaçãoObservação

    A opção BULK da cláusula OPENROWSET não oferece suporte a controle do tamanho de lote.

  • Desabilitando gatilhos

    Desabilitar gatilhos pode melhorar o desempenho.

    Para obter mais informações sobre o impacto de execução do gatilho sobre operações de importação em massa e como habilitar ou desabilitar gatilhos, consulte Controlando execução do gatilho ao importar dados em massa.

  • Desabilitando restrições

    Para obter informações sobre o impacto de verificação de restrição nas operações de importação em massa e como habilitar ou desabilitar as restrições CHECK e FOREIGN KEY de uma tabela, consulte Controlando verificação de restrição por operações de importação em massa.

  • Ordenando os dados em um arquivo de dados

    Por padrão, uma operação de importação em massa pressupõe que um arquivo de dados seja não ordenado. Se a tabela tiver um índice clusterizado, o utilitário bcp, a instrução BULK INSERT e a função OPENROWSET(BULK...) (Transact-SQL) permitirá que você especifique como os dados serão ordenados no arquivo de dados durante uma operação de importação em massa. É opcional para os dados no arquivo de dados serem ordenados na mesma ordem da tabela. Porém, você poderá melhorar o desempenho da operação de importação em massa se você especificar a mesma ordenação para o arquivo de dados que para a tabela.

    Para obter mais informações, consulte Controlando a ordem de classificação durante a importação em massa de dados.

  • CControlando o comportamento de bloqueio

    Para obter informações sobre como especificar o comportamento de bloqueio durante operações de importação em massa, consulte Controlando o comportamento de bloqueio para a importação em massa.

  • Importando dados em formato nativo

    Para obter mais informações, consulte Usando formato nativo para importar ou exportar dados e Usando o formato nativo Unicode para importar ou exportar dados.