Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Destination SQL Server contre destination OLE DB

Dans cette réponse, je vais essayer de fournir des informations provenant de la documentation officielle de SSIS et je mentionnerai mon expérience personnelle avec la destination SQL Server.

1. Destination du serveur SQL

Selon la documentation officielle de SQL Server Destination :

La destination SQL Server se connecte à une base de données SQL Server locale et charge en bloc les données dans les tables et les vues SQL Server. Vous ne pouvez pas utiliser la destination SQL Server dans des packages qui accèdent à une base de données SQL Server sur un serveur distant. Au lieu de cela, les packages doivent utiliser la destination OLE DB.

La destination SQL Server offre la même insertion rapide de données dans SQL Server que la tâche d'insertion en bloc; cependant, en utilisant la destination SQL Server, un package peut appliquer des transformations aux données de colonne avant que les données ne soient chargées dans SQL Server.

Pour charger des données dans SQL Server, vous devez envisager d'utiliser la destination SQL Server au lieu de la destination OLE DB

2. Destination OLEDB

Selon la documentation officielle de la destination OLEDB :

Destination OLEDB - option de chargement rapide :chargez les données dans une table ou une vue dans la destination OLE DB et utilisez l'option de chargement rapide, qui est optimisée pour les insertions en masse

3. Destination OLEDB et destination SQL Server

Selon la destination SQL Server par rapport à la destination OLE DB - rubrique MSDN :

Donald Farmer, l'ancien responsable de programme du groupe pour les services d'intégration, a déclaré que vous pouvez obtenir une augmentation de 5 à 10 % des performances en utilisant la SQL Server Destination .

De plus, en se référant au post suivant de Matt Masson un spécialiste de l'intégration de données chez Microsoft où il a répondu à la question suivante :

Dois-je utiliser la destination SQL Server ?

La réponse était

Non

...

Ma recommandation est que si vous avez besoin de toutes les performances (une augmentation de 10 % des performances sur une charge de 10 heures peut être significative), essayez la destination SQL Server pour voir comment cela fonctionne pour vous. Cependant, gardez à l'esprit les limitations suivantes de la destination SQL Server :

  • Vous devez exécuter SSIS sur le même ordinateur que la base de données de destination
  • Vous devez exécuter le package en tant qu'administrateur
  • Il est très difficile de déboguer quand les choses tournent mal

Compte tenu de ces limitations, je recommande d'utiliser la destination OLE DB même si vous constatez une augmentation des performances avec la destination SQL Server.

3.1. Guide des performances de chargement des données

(Mise à jour @ 2019-03-25)

En cherchant sur les meilleures pratiques SSIS, j'ai trouvé un article Microsoft très utile qui peut être utilisé comme référence :

  • Guide des performances de chargement des données

Dans cet article, ils ont fait une comparaison entre toutes les méthodes de chargement de données, y compris la destination SQL Server et la destination OLEDB, ils ont mentionné que :

Destination du serveur SQL La destination SQL Server est le moyen le plus rapide de charger en masse des données d'un flux de données Integration Services vers SQL Server. Cette destination prend en charge toutes les options de chargement en bloc de SQL Server, à l'exception de ROWS_PER_BATCH.

Sachez que cette destination nécessite des connexions de mémoire partagée à SQL Server. Cela signifie qu'il ne peut être utilisé que lorsque Integration Services s'exécute sur le même ordinateur physique que SQL Server.

Destination OLE DB : La destination OLE DB prend en charge toutes les options de chargement en bloc pour SQL Server. Cependant, pour prendre en charge le chargement en bloc commandé, une configuration supplémentaire est requise. Pour plus d'informations, voir "Données d'entrée triées". Pour utiliser l'API de masse, vous devez configurer cette destination pour le "chargement rapide".

La destination OLE DB peut utiliser à la fois des connexions TCP/IP et des canaux nommés vers SQL Server. Cela signifie que la destination OLE DB, contrairement à la destination SQL Server, peut être exécutée sur un ordinateur autre que la cible de chargement en bloc. Étant donné que les packages Integration Services qui utilisent la destination OLE DB n'ont pas besoin de s'exécuter sur l'ordinateur SQL Server lui-même, vous pouvez faire évoluer le flux ETL avec des serveurs performants.

3.2. Expérience personnelle

(Mise à jour @ 2019-03-25)

Étant donné que cette question est utilisée comme référence par beaucoup, et après avoir été plus expérimenté dans ce domaine, j'ai ajouté cette section pour mentionner mon expérience personnelle avec la destination SQL Server.

Bien que la documentation officielle mentionne que la destination SQL Server augmentera les performances, je ne recommande pas du tout d'utiliser ces composants pour de nombreuses raisons :

  1. Il faut que le serveur de destination et le serveur ETL soient identiques (fonctionne uniquement avec le serveur SQL local)
  2. Il lance toujours des exceptions qui n'ont aucune signification
  3. Après des tests sur un énorme volume de données, la différence de performances avec la destination OLEDB est négligeable (testé sur environ 500 Go de données chargées en blocs et la différence de temps est inférieure à une minute)

Vous pouvez également vous référer au message suivant (de @billinkc) pour obtenir plus d'informations sur ce sujet :

  • Les packages SSIS et la base de données SQL doivent-ils être sur le même serveur ?

4. Conclusion

D'après les articles de Microsoft, vous pouvez dire que SQL Server Destination augmenter les performances d'insertion des données (il utilise l'insertion BULK) , mais il est conçu pour un cas spécifique qui est le serveur SQL local. OLEDB Destination est plus général et recommandé dans les autres cas et en utilisant le Fast Load mode d'accès aux données (qui utilise également l'insertion BULK) sur la OLE DB destination cela augmentera les performances de chargement des données.

D'autre part, sur la base de mon expérience et de nombreux articles écrits par des experts SSIS, il n'est pas du tout recommandé d'utiliser SQL Server Destination puisqu'il n'est pas stable et qu'il génère souvent des exceptions et que les performances peuvent être considérées comme négligeables.

Informations supplémentaires

Récemment, j'ai publié un article détaillé sur ce sujet. Vous pouvez le vérifier à :

  • Destination SSIS OLE DB contre destination SQL Server