Importazione di dati in parallelo tramite il blocco a livello di tabella
Data aggiornamento: 5 dicembre 2005
Microsoft SQL Server consente a più client di importare in massa dati in parallelo in una singola tabella non indicizzata. Ciò consente di migliorare le prestazioni delle operazioni di importazione di massa. L'importazione parallela dei dati è supportata per tutti e tre i comandi di importazione di massa, ovvero bcp, BULK INSERT e INSERT ... SELECT * FROM OPENROWSET(BULK...).
[!NOTA] Il caricamento parallelo di dati in un'unica tabella è supportato solo dalle applicazioni che utilizzano le API ODBC o SQL OLE DB. Qualsiasi applicazione, inclusa l'utilità bcp, che sia basata sulla libreria client DB-Library disponibile con Microsoft SQL Server versione 6.5 o precedenti non è in grado di prendere parte ai carichi di dati paralleli in un'istanza di SQL Server.
Se non si specifica l'opzione/hint TABLOCK, più flussi di importazione di massa simultanei acquisiscono i blocchi con una granularità inferiore al livello della tabella. A seconda della distribuzione dei dati, i flussi di caricamento di massa simultanei potrebbero bloccarsi reciprocamente. Per tale motivo, l'importazione di massa di dati in parallelo in una tabella non indicizzata viene in genere eseguita con TABLOCK.
Quando si esegue l'importazione di massa dei dati in parallelo in un'istanza di SQL Server utilizzando TABLOCK, si consideri quanto segue:
Lo scenario più semplice per l'importazione di dati in parallelo è il caricamento dei dati in una tabella non indicizzata, ovvero un heap.
Se la tabella è priva di indici, specificare l'opzione TABLOCK per l'operazione di importazione di massa. Per ulteriori informazioni, vedere Controllo della modalità di blocco per l'importazione di massa.
[!NOTA] Se la tabella dispone di indici, non è possibile eseguire un'operazione di caricamento parallelo utilizzando l'opzione TABLOCK. Inoltre, i thread concorrenti si bloccano a vicenda se non si specifica TABLOCK. Prima di eseguire un'operazione di importazione di massa, si consideri l'opportunità di rimuovere gli indici dalla tabella. Per informazioni su come valutare l'opportunità di mantenere o rimuovere gli indici, vedere Linee guida per l'ottimizzazione dell'importazione di massa.
Dividere i dati da importare tra i client in un numero di file di dati uguale a quello di client presenti. Includere un file in ogni client.
Procedura consigliata Per utilizzare il processore in modo ottimale, distribuire i dati uniformemente tra i client. Se si desidera importare i file di dati in parallelo da più client in un'istanza di SQL Server, verificare che tali file abbiano dimensioni simili. In caso contrario, il thread di un client con carico ridotto potrebbe terminare in anticipo e, pertanto, utilizzare la CPU del client in modo non efficiente.Per ottenere prestazioni ottimali, le dimensioni del batch specificate per ogni client devono essere identiche alle dimensioni del file di dati del client. Per ulteriori informazioni, vedere Gestione dei batch per l'importazione di massa.
Al termine dell'importazione di massa dei dati nella tabella, è possibile creare gli indici necessari eseguendo le operazioni seguenti:
- Creare ogni indice cluster, in sequenza, da un singolo client. Per ulteriori informazioni, vedere Creazione di indici cluster.
- Creare gli indici non cluster. Gli indici non cluster possono essere creati simultaneamente da client diversi. Per ulteriori informazioni, vedere Creazione di indici non cluster.
Se non si specifica TABLOCK, è possibile eseguire l'importazione di massa di dati in parallelo indipendentemente dal numero di indici presenti nella destinazione. In questo caso, però, l'ottimizzazione delle operazioni di massa non è possibile e possono verificarsi problemi durante l'acquisizione di blocchi su righe o pagine singole.
Vedere anche
Concetti
Creazione di indici (Motore di database)
Prerequisiti per la registrazione minima nell'importazione di massa
Ottimizzazione delle prestazioni dell'importazione di massa
Altre risorse
Utilità bcp
BULK INSERT (Transact-SQL)
FROM (Transact-SQL)
OPENROWSET (DMX)
INSERT (Transact-SQL)
SELECT (Transact-SQL)
table_hint (Transact-SQL)