Importation de données en parallèle avec un verrouillage de niveau table
MicrosoftSQL Server permet à plusieurs clients d'importer en bloc des données en parallèle dans une table unique non indexée. Ceci permet d'améliorer les performances des opérations d'importation en bloc. L'importation de données en parallèle est prise en charge par les trois commandes d'importation en bloc suivantes : bcp, BULK INSERT, and INSERT ... SELECT * FROM OPENROWSET(BULK...).
[!REMARQUE]
Seules les applications utilisant les API basées sur ODBC ou SQL OLE DB peuvent effectuer un chargement de données en parallèle dans une table unique. Toute application, y compris l'utilitaire bcp, basée sur la bibliothèque cliente DB-Library fournie avec MicrosoftSQL Server version 6.5 ou antérieure ne peut pas participer aux chargements de données en parallèle dans une instance de SQL Server.
Si vous ne spécifiez pas l'option-indicateur TABLOCK, plusieurs flux d'importation en bloc concurrents obtiennent des verrous à un niveau de granularité inférieur au niveau table. En fonction de la distribution des données, les flux de chargement en masse concurrents risquent de se bloquer mutuellement. Par conséquent, l'importation en bloc de données en parallèle dans une table non indexée s'effectue généralement à l'aide de TABLOCK.
Lors de l'importation en bloc de données en parallèle dans une instance de SQL Server au moyen de TABLOCK, tenez compte des points suivants :
Le scénario d'importation de données en parallèle le plus simple consiste à charger les données dans une table non indexée (un segment).
Si la table ne possède pas d'index, spécifiez l'option TABLOCK pour l'opération d'importation en bloc. Pour plus d'informations, consultez Contrôle du mécanisme de verrouillage pour l'importation en bloc.
[!REMARQUE]
Si la table contient des index, vous ne pouvez pas effectuer une opération de chargement en parallèle par le biais de l'option TABLOCK. En outre, les threads simultanées se bloquent entre-elles si l'option TABLOCK n'est pas spécifiée. Avant une opération d'importation en bloc, envisagez la suppression des index de la table. Pour plus d'informations sur l'opportunité de conserver ou supprimer les index, consultez Recommandations pour l'utilisation de l'importation en bloc.
Divisez les données à importer parmi les clients en autant de fichiers de données qu'il y a de clients. Placez l'un des fichiers sur chaque client.
Pratiques recommandées Pour optimiser l'utilisation du processeur, distribuez les données entre les clients de façon équitable. Assurez-vous que les fichiers de données sont de taille comparable si vous envisagez de les importer en parallèle dans une instance de SQL Server à partir de plusieurs clients. À défaut, le thread d'un client légèrement chargé risque de s'arrêter prématurément, ce qui se traduira par une utilisation inefficace de l'UC du client.
Pour optimiser les performances, la taille de traitement spécifiée pour chaque client doit correspondre à la taille du fichier de données du client. Pour plus d'informations, consultez Gestion de traitements pour l'importation en bloc.
Après avoir importé en bloc les données dans la table, vous pouvez créer les index nécessaires en procédant comme suit :
Créez tour à tour chaque index cluster à partir d'un seul client. Pour plus d'informations, consultez Création d'index cluster.
Créez les index non-cluster. Ceux-ci peuvent être créés simultanément à partir de clients différents. Pour plus d'informations, consultez Création d'index non-cluster.
Si vous ne spécifiez pas l'option TABLOCK, vous pouvez importer en bloc des données en parallèle, quel que soit le nombre d'index dans la cible. Toutefois, dans ce cas, les optimisations en bloc ne sont pas possibles et vous pouvez rencontrer un blocage lors de l'obtention de verrous sur des lignes ou des pages individuelles.
Voir aussi