|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 9 ![]() |
Bonjour,
Je travaille actuellement à l’optimisation d’un job de chargement dont les performances sont mauvaises. Le job en question se résume à charger massivement des données dans une table Oracle (9i) après l’avoir tronquée au préalable :
J’ai mis en place un chargement de type « bulk » pour vérifier si je pouvais gagner en perf : Code :
Après quelques tests je constate que les performances sont moins bonnes avec le bulk. Un extrait de perf : Bulk loadJ’ai effectué plusieurs tests dans différentes conditions :
Systématiquement les performances sont largement moins bonnes en Bulk Loader malgré les gains annoncés sur les sites de référence (Burleson et autre). Je constate que le temps total est moins bon (30% en moyenne) en bulk, mais que le temps CPU est toujours meilleur (+50 à 70% de gain). Du coup je m’interroge ![]()
J’ai le sentiment que le problème se pose à la création des fichiers CTL et DAT qui prendraient trop de temps. Merci pour vos éclaircissements. |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() |
Bonjour,
D'après ce document le bulk http://www2.sas.com/proceedings/sugi29/106-29.pdf la Proc append avec BULKLOAD=YES est la meilleur solution!!! Je te propose de faire des "commit" tout les x insertions, je pense qu'il faut renseigner le commit dans cette option BL_OPTIONS http://www.nesug.org/proceedings/nesug03/at/at003.pdf. Sinon utilise du SQL LOADER directement pour voir les temps de chargement (peut être qu'il y a des problèmes sur la base)... Cordialement
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 9 ![]() |
Oui, j'ai utilisé ce doc pour mon implémentation.
Par contre, il me semblait que l'option 'rows' n'était pas utilisée en direct=true. Je vais refaire quelques tests en agissant dessus. Citation:
Existe t il un moyen d'obtenir plus de détails dans les logs du sql*loader ? J'aimerais pouvoir décolérer le temps lié à la création des fichiers, et le temps lié au chargement. |
|
|
|
00
|
|
|
#4 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
Bonjour;
y a aussi insertbuff=nombre de ligne a insérer simultanément. |
|
|
00
|
|
|
#5 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
je rajoute ;
Il existe un effet indésirable dans la gestion des erreurs,lié à l’utilisation de cette option. En effet, les erreurs seront affichées dans la log comme étant associées au ‘buffer’ plutôt qu’à la ligne qui a généré l’erreur. Les erreurs ne sont donc pas affichées au fur et à mesure qu’elles se produisent mais par groupe. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 9 ![]() |
|
|
|
00
|
|
|
#7 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
es-tu obligé d'utilisé la proc append?
pk ne pas passer par la proc sql ( pass throuth) du moment tu charge dans un SGBD? |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() |
c'est possible en sql pass through?
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
00
|
|
|
#9 | |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 9 ![]() |
Citation:
Mais le problème n'est pas vraiment là. L'un dans l'autre, la différence ne devrait pas être aussi grande. Le vrai problème pour moi est de comprendre pourquoi les perfs du Bulk sont aussi désastreuses. Je vous tiens informés. |
|
|
|
00
|
|
|
#10 | ||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 9 ![]() |
Je viens de faire des tests pour passer en "Proc SQL" et "Data Step", je me fais jeter avec une erreur :
Code :
|
||
|
|
00
|
|
|
#12 | ||||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 9 ![]() |
Voila le code de mon plugin. Soyez indulgeant je débute
Donc en résumé j'utilise ici la méthode proc append. Les options et paramètres sont les suivants :
La première partie du code sert simplement à gérer les options du bulk load en fonction de mes paramètres, et à générer des noms unique de fichier CTL/DAT/LOG. Code :
Code :
|
||||
|
|
00
|
|
|
#13 | |||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#14 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
as tu essayé sans le schema vers la base?
Code :
libname libOra oracle user=&v_usr password=&v_pwd /*path=&v_dsn*/; |
|
|
00
|
|
|
#15 | |||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 9 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 9 ![]() |
|
|
|
00
|
|
|
#17 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
|
|
|
00
|
|
|
#18 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
|
|
|
00
|
|
|
#19 | ||||||||||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 9 ![]() |
Le viens de refaire quelques tests.
J'ai un job des plus simples qui prend les données d'une table A pour les envoyer dans une table B Oracle. 1million de lignes sur 10 colonnes sans index. Cas 1 : Utilisation du plugin chargeur de table sas classique:
Cas 2 : Utilisation du bulkload en direct true, sql append (Cf mon code plus haut)
Conclusion : D'une part le bulk dans sas est moins rapide que le plugin sas de base. Mais surtout, le sql*loader se la traîne en prennant à lui seul plus de temps qu'en prend sas en mode classique 18 secondes contre 14sec ... Y'a un truc qui m'échappe ! En faisant des tests avec plus de données, 2M, 5M et 10 millions les résultats sont linéaires. ![]() ___________________________________________________ Pour ceux qui auraient la patience de faire le test ![]() Et me prouver que mon serveur est en mousse ___________________________________________________ Scripts oracle Scripts de création des tables A et B (FLM_TEST_1_TODELETE, et FLM_TEST_2_TODELETE Code :
Code :
Code :
Cas 1 : Job Insert Sas classique ![]() Cas 2 : Job Insert Sas avec mon plugin bulk ![]() Les options du plugin Code :
Code :
|
||||||||||
|
|
00
|
|
|
#20 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
fallait poster dans la rubrique SAS BI.
c'est du DIS ? je me trompe ? si c'était INFORMATICA, je t'aurai bien aidé assez performant. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com