Controllo della modalità di blocco per l'importazione bulk
Il comando bcp e le istruzioni BULK INSERT e INSERT ... SELECT * FROM OPENROWSET(BULK...) consentono di specificare che la tabella deve essere bloccata durante un'operazione di importazione bulk. Il blocco viene utilizzato nel Motore di database di SQL Server per sincronizzare l'accesso simultaneo agli stessi dati eseguito da più utenti. Quando una transazione modifica un dato, il blocco di protezione della modifica viene mantenuto fino alla fine della transazione. Quando si specifica il blocco della tabella per un'operazione di importazione bulk, sulla tabella viene applicato un blocco all'aggiornamento bulk per tutta la durata dell'operazione. Un blocco di questo tipo consente a più thread di eseguire operazioni simultanee di importazione bulk dei dati nella stessa tabella, impedendo ai processi che non eseguono l'importazione bulk di accedere alla tabella. Il blocco a livello di tabella può consentire un miglioramento delle prestazioni durante l'operazione di importazione bulk grazie alla riduzione della contesa tra blocchi nella tabella.
Se non si utilizza il blocco a livello di tabella, per impostazione predefinita vengono utilizzati i blocchi a livello di riga, a meno che l'opzione table lock on bulk load non sia impostata su on. L'impostazione dell'opzione table lock on bulk load tramite sp_tableoption consente di specificare la modalità di blocco per una tabella durante un'operazione di importazione bulk.
Blocco a livello di tabella durante l'importazione bulk |
Modalità di blocco della tabella |
---|---|
Disattivato |
Blocchi a livello di riga |
Attivato |
Blocco a livello di tabella |
Se si specifica il blocco a livello tabella, l'impostazione predefinita per la tabella impostata con sp_tableoption viene ignorata per la durata dell'operazione di importazione bulk.
Nota
Benché non sia necessario utilizzare il blocco a livello di tabella per eseguire un'importazione bulk dei dati in una tabella da più client in parallelo, questa modalità assicura prestazioni migliori.
Qualificatori dei comandi
Nella tabella seguente è incluso un riepilogo dei qualificatori che consentono di specificare il blocco a livello di tabella nei comandi di importazione bulk.
Comando |
Qualificatore |
Tipo di qualificatore |
---|---|---|
bcp |
-h"TABLOCK" |
Hint |
BULK INSERT |
TABLOCK |
Argomento |
INSERT ... SELECT * FROM OPENROWSET(BULK...). |
WITH(TABLOCK) |
Hint di tabella |
Nota
In SQL Server 2005 e versioni successive la specifica di TABLOCK su una tabella con un indice cluster impedisce l'importazione bulk di dati in parallelo. Se si desidera eseguire un'importazione bulk di dati in parallelo, non utilizzare TABLOCK. Per ulteriori informazioni sul caricamento bulk in parallelo, vedere Linee guida per l'ottimizzazione dell'importazione bulk.