Importando dados em paralelo com bloqueio em nível de tabela

O Microsoft SQL Server permite que vários clientes importem dados em massa em paralelo em uma única tabela não indexada. Isso pode melhorar o desempenho de operações de importação em massa. A importação de dados paralela tem suporte em todos os três comandos de importação em massa: BCP, BULK INSERT e INSERT... SELECT * FROM OPENROWSET(BULK...).

ObservaçãoObservação

Somente aplicativos que usam APIs com base em ODBC ou SQL OLE DB podem executar carregamento de dados paralelos em uma única tabela. Qualquer aplicativo, inclusive o utilitário bcp com base na biblioteca cliente DB-Library fornecida com a versão Microsoft SQL Server 6.5 ou anterior não pode participar de carregamentos de dados paralelos em uma instância do SQL Server.

Se você não especificar a opção/dica TABLOCK, vários protocolos de importação em massa simultâneos adquirem bloqueios a uma granularidade abaixo do nível de tabela. Dependendo da distribuição de dados, os fluxos de carregamento em massa simultâneos podem bloquear um ao outro. Portanto, a importação em massa de dados em paralelo em uma tabela não indexada normalmente é executada com TABLOCK.

Quando importar dados em massa em paralelo em uma instância do SQL Server usando TABLOCK, considere o seguinte:

  • O cenário mais simples para a importação de dados em paralelo é carregar dados em uma tabela não indexada (um heap).

  • Se a tabela não tiver nenhum índice, especifique a opção TABLOCK para a operação de importação em massa. Para obter mais informações, consulte Controlando o comportamento de bloqueio para a importação em massa.

    ObservaçãoObservação

    Quando existirem índices em uma tabela, não será possível executar uma operação de carregamento paralela usando a opção TABLOCK. Além disso, os threads simultâneos bloqueiam um ao outro se TABLOCK não for especificada. Antes de uma operação de importação em massa, considere a remoção de índices da tabela. Para obter informações sobre manter ou remover índices, consulte Diretrizes para otimizar a importação em massa.

  • Divida os dados a serem importados entre os clientes no mesmo número de arquivos de dados que o número de clientes. Coloque um dos arquivos em cada um dos clientes.

    Prática recomendada   Para usar o processador de forma mais eficaz, distribua os dados uniformemente entre os clientes. Verifique se os arquivos de dados são semelhantes em tamanho se quiser importá-los em paralelo de vários clientes em uma instância do SQL Server. Caso contrário, um thread de cliente pouco carregado pode terminar cedo e, portanto, usar a CPU do cliente de forma ineficaz.

  • Para alcançar o melhor desempenho, o tamanho de lote especificado para cada cliente deve ser igual ao tamanho do arquivo de dados do cliente. Para obter mais informações, consulte Gerenciando lotes para importar em massa.

Depois que dados forem importados em massa para a tabela, pode-se criar qualquer índice exigido, como segue:

  1. Crie cada índice clusterizado, por sua vez, de um único cliente. Para obter mais informações, consulte Criando índices clusterizados.

  2. Crie índices não-clusterizados. Eles podem ser criados simultaneamente de clientes diferentes. Para obter mais informações, consulte Criando índices não clusterizados.

Se você não especificar TABLOCK, será possível importar dados em massa em paralelo independente do número de índices no destino. Mas nesse caso, otimizações em massa não são possíveis e você pode encontrar bloqueio ao obter bloqueios em linhas ou páginas individuais.