Controlando o comportamento de bloqueio para a importação em massa
O comando bcp, a instrução BULK INSERT e INSERT... e a instrução SELECT * FROM OPENROWSET(BULK...) lhe permitem especificar que a tabela seja bloqueada durante uma operação de importação em massa. O bloqueio é usado pelo SQL ServerMecanismo de Banco de Dados para sincronizar o acesso simultâneo de vários usuários a mesma parte dos dados. Quando uma transação modifica uma parte dos dados, ela mantém o bloqueio protegendo a modificação até o fim da transação. Ao especificar o bloqueio de tabela para uma operação de importação em massa, um bloqueio de atualização em massa (BU) é ativado durante a operação de importação em massa. Um bloqueio de BU permite que vários threads importem dados em massa simultaneamente para a mesma tabela, ao mesmo tempo em que impede que outros processos que não sejam dados da importação em massa acessem a tabela. O bloqueio de tabela pode melhorar o desempenho da operação de importação em massa reduzindo a contenção de bloqueio na tabela.
Se o bloqueio de tabela não for usado, o padrão usará bloqueios em nível de linha, a menos que a opção table lock on bulk load seja definida como on. Definindo-se a opção table lock on bulk load usando sp_tableoption define o comportamento de bloqueio para uma tabela durante uma operação de importação em massa.
Bloqueio de tabela em importação em massa |
Comportamento de bloqueio de tabela |
---|---|
Desativado |
Bloqueios de nível de linha usados |
Em |
Bloqueio de nível de tabela usado |
Se o bloqueio de tabela for especificado, a configuração padrão para o conjunto de tabelas com sp_tableoption será substituído durante a operação de importação em massa.
Observação |
---|
Não é necessário usar bloqueio de tabela para importar dados em massa para uma tabela de vários clientes em paralelo, mas isso pode melhorar o desempenho. |
Qualificadores de comando
A tabela a seguir resume os qualificadores especificando-se bloqueio de tabela em comandos de importação em massa.
Comando |
Qualificador |
Tipo de qualificador |
---|---|---|
bcp |
-h"TABLOCK" |
Dica |
BULK INSERT |
TABLOCK |
Argumento |
INSERT ... SELECT * FROM OPENROWSET(BULK...) |
WITH(TABLOCK) |
Dica de tabela |
Observação |
---|
Em versões do SQL Server 2005 e posteriores, ao especificar-se TABLOCK em uma tabela com um índice clusterizado evita-se a importação de dados em massa em paralelo. Nesse caso, se você quiser executar uma importação em massa em paralelo, não use TABLOCK. Para obter mais informações sobre carregamento em massa em paralelo, consulte Diretrizes para otimizar a importação em massa. |