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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 ***********************
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).
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 ***********************
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 ***********************
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
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" <gilles.tourreau@pos.fr> a écrit dans le message de news:
op.tm93zkgdr4w555@bureau1.pos.fr...
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 ?
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