|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
Bonjour,
J'ai besoin dans mon travail de regler des problèmes de performance d'injection Oracle pour l'un de nos produits. J'ai vu que l'api OCI permettait d'injecter en mode bulk et je suis en train de me demander si les performances de ce mode seront comparable à SQL Loader ou non ? En gros, est-ce que je peux integrer l'injection de masse dans mon programme ou est-ce qu'il vaut mieux faire des appels à SQL Loader ? Merci d'avance. Falcon |
|
|
00
|
|
|
#2 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
salut,
SQL*Loader est codé avec OCI et peut être utilisé en mode DIRECT PATH qui comme son nom l'indique utilise l'API direct path de OCI. SQL*Loader est un très outil éprouvé. Tu pourra peut être faire plus optimisé en codant ton appli pour tes besoins mais je doute que tu gagnes beaucoup en perf et tu perdras du temps !.... A moins que tu ne tunes ta connexion en jouant sur les paramètre mémoire de ta session avec des alter session. Mon conseil est de prendre sql*loader et utiliser son mode direct path.
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
SQL Loader est bien codé avec OCI, merci de la confirmation.
Je m'en doutais mais je voulais en être sur. En fait je regarde OCI car SQL loader à quelques limitations au niveau de son fichier de contrôle qui nous oblige à faire au moins 8 fichiers de contrôle, et donc 8 passes, pour injecter toutes les lignes du fichier (qui fait au minimum 6 Go au passage). Les limites sont de ne pas pouvoir faire des tests avec <, > ou que le fichier de contrôle ai une taille maximale. Je sais que si j'utilise OCI cela va me prendre du temps, mais je dois de toute façon faire un programme pour d'autre prétraitement. Au début je me disais que j'appellerai juste SQL Loader depuis mon programme, mais les limitations ne me le permettent pas. Je pense donc que je vais regarder du coté d'OCILIB |
|
|
00
|
|
|
#4 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Effectivement OCILIB te facilitera le travail....
Généralement, le rapport de volume de code est de minimum de 4:1 en faveur de OCILIB PS : OCILIB v3.0.0 va sortir fin septembre... Grosse version majeure avec plein de nouveautés !
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
C'est clair que ca va etre plus facile avec OCILIB, surtout que je vais pas etre le seul à développer le programme et que le C pour les petits nouveaux c'est pas leur tasse de thé, alors avec du pure OCI ...
![]() C'est aussi une très bonne nouvelle la sortie de la nouvelle version, car pour avoir l'autorisation d'utiliser une lib opensource, il faut prouver au chef qu'elle est maintenue en cas de problème. |
|
|
00
|
|
|
#6 | ||
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
juste pour infos, la prochaine version d'ocilib qui sort début avril supporte désormais l'api direct path de sql*loader.
Exemple d'application : Code :
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
||
|
00
|
|
|
#7 | ||
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
J'ai enfin eux le temps de lire ton exemple, et effectivement si les perfs sont similaire au mode bulk, c'est très intéressant et bien plus dans la logique de ce que je dois faire, je vais essayer.
D'ailleurs je suis en train de galérer avec le mode bulk, j'ai un souci avec les dates : Quand j'injecte plusieurs lignes à la fois, aucun problème les dates sont bien formatées à l'insertion. Mais quand j'injecte une seule ligne, cas rare mais qui peux m'arriver,et bien la date est mal formatée. J'ai fait un test depuis l'exemple de bulk du tutoriel : Code :
|
||
|
|
00
|
|
|
#8 | |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
salut,
effectivement, dans le cas de liaison de tableau, si le nombre d'éléments du tableau était = 1, la valeur pouvait être mal insérée dans la base... Je viens de la corriger et cela sera inclus dans la 3.2.0 qui sort début de semaine prochaine. voici l'entrée du changelog concernant ce bug : Citation:
et pour la remontée du bug
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
J'ai testé l'injection d'une ligne avec la 3.2.0, ca marche sans problème.
![]() Pour le mode direct path, j'essaye et je te fais un retour sur mes impressions d'utilisation. |
|
|
00
|
|
|
#10 | |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Citation:
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
|
00
|
|
|
#11 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
des nouvelles de tes tests ?
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#12 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
J'ai pas encore eu le temps de tester.
J'ai d'autres fonctionnalités récalcitrante du prog à finir avant de pouvoir remplacer le mode bulk par le direct path. J'espere pouvoir faire des tests d'ici à Lundi. |
|
|
00
|
|
|
#13 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
Je suis en train d'implémenter le mode direct path et j'ai un souci avec la fonction OCI_DirPathSetArray.
Je ne trouve pas sa description dans l'aide en ligne de ton site et elle n'a pas l'air d'etre connu dans la lib ![]() Aurais-tu une idée ? |
|
|
00
|
|
|
#14 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
cette fonction, prévue dans l'implémentation initiale, a été retirée de la version finale car ne servant a rien (car ocilib gère déja un tableau interne à cause des bugs oci en utf16...).
Il faut utiliser OCI_DirPathSetEntry()
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#15 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
Ok, il faut donc que j'adapte un petit peu plus mon prog.
Avec le mode bulk, j'avais defini mes classes pour qu'elle me génère directement les tableaux de valeurs. Donc ca va prendre un chtit peu plus de temps avant de pouvoir faire un test
|
|
|
00
|
|
|
#16 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
tu peux garder les tableaux.
fais juste un loop à la fin...
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#17 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
oui, c'est une idée quand on réfléchit un peu
![]() Il est temps que la journée se finisse .... |
|
|
00
|
|
|
#18 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Des nouvelles en cette veille de 1er mai ???
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#19 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 35 ![]() |
Je suis dessus, j'ai du bosser sur d'autres trucs ces derniers jours, mais j'ai réussi à finir le portage depuis le mode bulk et en ce moment je me bats avec un segfault dans mon propre code, mais je pense qu'il va pas me bloquer trop longtemps
![]() Donc si tout va bien, test aujourd'hui
|
|
|
00
|
|
|
#20 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
good
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
Copyright © 2000-2012 - www.developpez.com