Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Transaction sur de gros traitement

2 réponses
Avatar
Gilles TOURREAU
Bonjour tout le monde !

De temps en temps, mes clients doivent importer des données via une
feuille Excel ou un fichier Texte dans une table SQL Server (Entre 10 000
et 200 000 enregistrements à importer). Il utilise pour cela un logiciel
client sous .NET.

Je voudrais savoir s'il est sage de mettre cette importation dans une
transaction pour de grosse importations ?

Comme ceci :

BEGIN TRANSACTION

DELETE FROM Table; //Pour effacer le contenu précédent
--Importer tous les enregistrements dans Table.

COMMIT

En essayant cette technique j'ai remarqué que la transaction bloque la
table pendant la durée de l'importation, ceci est embêtant pour mes
clients, car ça bloque l'accès à la table (et donc l'application) pendant
5 min au accès de type SELECT...

Existe-t-il un moyen d'éviter le blocage de la table ?

En vous remerciant par avance de vos lumières...

Cordialement

--
Gilles TOURREAU
Responsable Informatique
gilles.tourreau@pos.fr

S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr

2 réponses

Avatar
Fred BROUARD
Gilles TOURREAU a écrit :
Bonjour tout le monde !

De temps en temps, mes clients doivent importer des données via une
feuille Excel ou un fichier Texte dans une table SQL Server (Entre 10
000 et 200 000 enregistrements à importer). Il utilise pour cela un
logiciel client sous .NET.

Je voudrais savoir s'il est sage de mettre cette importation dans une
transaction pour de grosse importations ?

Comme ceci :

BEGIN TRANSACTION

DELETE FROM Table; //Pour effacer le contenu précédent
--Importer tous les enregistrements dans Table.

COMMIT

En essayant cette technique j'ai remarqué que la transaction bloque la
table pendant la durée de l'importation, ceci est embêtant pour mes
clients, car ça bloque l'accès à la table (et donc l'application)
pendant 5 min au accès de type SELECT...



C'est le but même du principe des transactions....


Existe-t-il un moyen d'éviter le blocage de la table ?



ne pas utiliser de transaction ou fragmenter l'importe ne petits lots.
Par exemple la commande T SQL "BULK INSERT" permet de fragmenter en lots
de n Ko ou de n lignes. Dans ce cas l'optimum est généralmement obtenur
avec n Ko = 64 (taille d'une extent de SQL Server).

A +



En vous remerciant par avance de vos lumières...

Cordialement

--Gilles TOURREAU
Responsable Informatique


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Toff
Salut,

Voici ce que je ferais :
Je fais l'import dans une table temporaire
Si l'import est OK, je truncate ta table de destination puis je fais un
insert select pour y insérer les données de la table temporaire.

a+

"Gilles TOURREAU" a écrit dans le message de news:

Bonjour tout le monde !

De temps en temps, mes clients doivent importer des données via une
feuille Excel ou un fichier Texte dans une table SQL Server (Entre 10 000
et 200 000 enregistrements à importer). Il utilise pour cela un logiciel
client sous .NET.

Je voudrais savoir s'il est sage de mettre cette importation dans une
transaction pour de grosse importations ?

Comme ceci :

BEGIN TRANSACTION

DELETE FROM Table; //Pour effacer le contenu précédent
--Importer tous les enregistrements dans Table.

COMMIT

En essayant cette technique j'ai remarqué que la transaction bloque la
table pendant la durée de l'importation, ceci est embêtant pour mes
clients, car ça bloque l'accès à la table (et donc l'application) pendant
5 min au accès de type SELECT...

Existe-t-il un moyen d'éviter le blocage de la table ?

En vous remerciant par avance de vos lumières...

Cordialement

--
Gilles TOURREAU
Responsable Informatique


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr