6
votes

SQLBULKCOPY.BULKCOPYT propriété

J'utilise VSTS 2008 + C # + .NET 3.5 + ADO.net pour développer une application de console pour effectuer une copie d'insertion en vrac.

Je souhaite utiliser la propriété Timeout d'insertion en vrac et insert en vrac. Pour la propriété BulkcopyTimeout, je suis confus et je veux savoir si cela s'applique à l'ensemble de la masse ou s'applique à chaque lot de la masse?

http://msdn.microsoft. com / fr-nous / bibliothèque / system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx

Merci d'avance, George


0 commentaires

4 Réponses :


9
votes

Recherche et lecture de quelques publications sur le blog et les postes de forum sur la bande apparaît pour indiquer le sqlbulkcopytimeout ne s'applique pas à l'ensemble de l'opération, mais à chaque lot dans l'opération.

Les documents MSDN ne sont pas totalement clairs à ce sujet, mais la plupart des postes semblent indiquer que le délai d'attente s'applique au lot. La diminution de la taille du lot et / ou de l'augmentation de la SQLBulkCopyTimeOut semble être la solution aux problèmes de délai d'attente dans la plupart des cas.

Voir ce Poste du forum comme exemple .

marc


9 commentaires

J'ai défini le délai d'attente à 120 secondes. Mon opération en vrac durera 1 heure et chaque lot en vrac prend environ 20 secondes. Je n'ai jamais expérimenté le problème du délai d'attente. Dans vos commentaires, je devrais faire l'expérience du délai d'attente car 1 heure> 120 secondes?


Merci pour votre mise à jour, Marc! Ma plus grande confusion est que la copie en vrac a deux phases connexes pour chaque lot - (1) lue de la source et (2) écriture à la désination. Pensez-vous que cela signifie à la fois (1) et (2) de chaque lot ne peut pas dépasser BulkCopyTimeOut? Ou cela signifie que la somme de (1) et (2) de chaque lot ne peut pas dépasser BulkcopyTimeOut?


@ George2: tout à fait honnêtement: je ne sais pas. Les docs ne sont pas très concluants sur celui-ci, désolé.


Typiquement, si vous ne pouvez pas définir le délai d'attente pour la pièce de lecture et de l'écriture séparément, le délai d'attente s'applique à l'ensemble de l'opération (lecture + écriture)


Merci Marc, je suis également intéressé par le délai de connexion. Le délai de connexion est-il impacté après que nous commençons la copie en vrac? Je pense que le délai de connexion ne comporte que lorsque nous ouvrons la connexion à la base de données à la première fois, une fois que nous avons établi la connexion, le délai de connexion n'a aucun impact sur la copie en vrac (lecture + écriture). BTW: Délai de connexion Je veux dire MSDN.MicRosoft. COM / EN-US / Bibliothèque / ...


Le délai d'attente de connexion ne s'applique qu'au temps nécessaire pour établir la connexion au serveur SQL. Une fois connecté, il n'est plus pertinent.


Merci Marc, à ADO.net, il n'y a pas de réglage du délai d'attente de connexion inactif (Idle I Wein signifie si aucune opération de connexion, la connexion sera délimitée)?


@ George2: Non, une fois la connexion ouverte, il reste ouvert jusqu'à ce que vous puissiez spécifiquement le fermer.


Merci Marc, question a répondu!



2
votes

Il s'applique à l'ensemble de l'opération pour un lot. Vous devez vous assurer que votre délai d'attente de connexion est défini aussi. J'ai déjà touché le délai d'attente, réglez-le sur la copie en vrac et a découvert de manière difficile que le temps de connexion est également important.

Il semble que ce concept de fonctionnement soit drôle. Si cela finit par attendre plus que le délai d'attente à un moment donné, cela échouera. En d'autres termes, si la lecture d'un lot prend plus que le temps écoulé, il échouera, mais si la somme de toutes les lectures est> Timeout que vous allez bien. Si l'écriture d'un lot prend trop longtemps, cela échouera également.

Mais il semble être lot par lot, pas le tout.


5 commentaires

J'ai défini le délai d'attente à 120 secondes. Mon opération en vrac durera 1 heure et chaque lot en vrac prend environ 20 secondes. Je n'ai jamais expérimenté le problème du délai d'attente. Dans vos commentaires, je devrais faire l'expérience du délai d'attente car 1 heure> 120 secondes?


Mike, y a-t-il des documents officiels mentionnés sur la signification de BulkcopyTimeout s'appliquent à chaque lecture par lots et chaque écriture par lots? Apprécier si vous pouviez fournir un lien. Merci!


@ George2 pas que je sache. Je fondre cela sur des preuves empiriques apprises en frappant le délai d'attente. Désolé que mon premier passage à la réponse était trompeur.


Merci! Je suis également intéressé par vos commentaires - "Vous devez vous assurer que votre délai d'attente de connexion est également défini.". Pourriez-vous expliquer comment le délai de connexion impacte de la copie en vrac s'il vous plaît? Ma confusion est, une fois que nous nous connectons à la base de données source / destination, le délai de connexion ne prendra jamais d'effet. Le délai d'attente de connexion n'autorise que la durée pendant laquelle cela nous permet d'établir la connexion. S'il vous plait corrigez moi si je me trompe.


@ George2 - Vous avez raison L'heure de connexion se comporte comme vous le dites. Je me souvenais tout simplement de toutes les choses que j'ai essayées et que je ne pensais pas à quelles ont aidé.



5
votes

BulkcopyTimeOut: par défaut, il est de 30 secondes xxx

Batchsize: Par défaut, toute la source de données complète est un lot XXX

Pour plus de détails, voir ce lien: délai d'attente expiré avec sqlbulkcopy

Nous obtenons cette exception "Timetout expiré". Si la demande incapable d'insérer la source de données en 30 secondes.


0 commentaires

0
votes

Il n'est pas facile de trouver le délai d'expiration idéal pour la bulkcopie; Si vous choisissez un petit délai d'attente, vous ne devez pas sélectionner un gros lotchsize, car les erreurs de délai d'attente pourraient se produire. D'une autre partie, si vous décidez de choisir une petite taille de lot, vous avez moins de chance d'avoir une erreur de délai d'attente du serveur; Cependant, vous n'êtes pas sécurisé.

Ma recommandation est de définir le délai d'attente sur illimité, à savoir (sqlbulkcopy.bulkcopyttimeout = 0) et essayer de choisir une taille de lot considérable pour votre copie en vrac. Au moins, vous ne pouvez pas avoir l'exception de délai d'attente.


0 commentaires