|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2004 Messages : 46 ![]() |
Sous Windows 2000 Professionnel, Delphi 7 et Interbase 6 je remplis une Table par des insertions successives à partir d'un fichier texte ( 120 000 lignes environ, autant d'enregistrements).
La table ne comporte ni constraint ni index (qui seront rajoutés plus tard) En début de chargement j'insére environ 20 000 lignes à l'heure, puis les "performances" s'effondrent à 2 000 lignes à l'heure à mi-parcours ! Pour quelle raison ? Comment améliorer -si possible- les choses ? |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Peut-être en commitant de temps en temps !
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Oui il faut commiter régulièrement.
Par contre 20 000 insertions à l'heure c'est extrèmement lent Votre serveur est une vielle machine assez lente et/ou vos enregistrements sont très grandes et/ou le serveur et surchargé par d'autres appli qui pompe les resources et/ou vous avez une liaison au serveur via internet ?? Pour vous donner un ordre de grandeur, sur mon PC qui n'est pas un foudre de guerre, j'insère à plus de 35 000 enregistrements à la minute. Avec un entregistrement d'environ 100 octets. Dans une table qui n' a pas d'index/clé. Donc on est bien loin des 20 000 à l'heure |
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2004 Messages : 46 ![]() |
Le fichier de données est en local ainsi que le serveur.
Ma machine n'est pas trop antédiluvienne (même si elle est fournie par l'administration...) Mes enregistrements font 77 caractéres de long ! ( avec une transformation en type entier et une en type date) Bref : le commit qui dans mon innocence me paraissait suceptible de ralentir... fait tout l'inverse. J'ai encore bcp à apprendre sur les transactions et les commits !!! Je reteste et vous tiens au courant. Merci infiniment |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Ne pas faire de commit apporte le confort de pouvoir annuler en cas de problème...
Le revers de la médaille est la nécessité pour le serveur de garder la trace de toutes les opérations effectuées (pour pouvoir les défaire), mais cela coute en ressources...
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 379 ![]() |
comme dit plus haut essayez un commit tout les 1000 insertions par exemple.
n'y a t'il pas des triggers qui se déclenchent à chaque insertion? si vous insérez aussi massivement, utilisez une table externe puis un insert into select from la table externe, c'est ce qu'il y a de plus rapide. bien sur, cela demande plus de programmation, mais le résultat est spéctaculaire! |
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2004 Messages : 46 ![]() |
Je n'ai pas trouvé de bonnet d'âne dans les smilies !
"si vous insérez aussi massivement, utilisez une table externe puis un insert into select from la table externe, c'est ce qu'il y a de plus rapide. " dans IBCOnsole : CREATE TABLE_PROVISOIRE EXTERNAL FILE 'C:\...........' (............. ..............) a fait passer le temps d'insertion d'une douzaine d'heures (INSERTRECORD sous Delphi ) à ... une fraction de seconde ! Eblouissant ! Puis un INSERT INTO "TABLE_DEFINITIVE" en "CASTANT" en un entier et un Timestamp : moins d'une minute ! Reste à automatiser cette procédure ! Mille Mercis aux généreux contributeurs |
|
|
00
|
|
|
#8 | ||
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 379 ![]() |
un exemple fonctionnel (pour moi!) c'est un script que je balance avec isql
si cela peux t'aider. Code :
|
||
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2004 Messages : 46 ![]() |
Superbe exemple... dont je m'empare avec avidité !
La vie est belle. Merci |
|
|
00
|
|
|
#10 |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 379 ![]() |
pas de quoi
n'oubli pas le "résolu" bonne chance |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com