Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/09/2007, 10h53   #1
Invité de passage
 
Inscription : octobre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 5
Points : 1
Points : 1
Par défaut Réglages pour meilleures performances

Bonjour,

J'utilise un programme java qui accède à une base Oracle via jdbc. Mon but est d'insérer 7 millions de records dans ma base le plus vite possible. Pour à peu près les 60 premiers milliers d'insertions cela va très vite (10'000 insertions en 20 sec) puis cela ralentit violemment ensuite. A savoir que mon programme java exécute un update et un select de temps en temps en plus des inserts.

Ma première question est qu'est-ce que je peux faire pour aller plus vite quitte à ce qu'Oracle utilise ttes les capacités de la machine? Est-ce que vous avez des combines?

Deuxièmement et juste pour info, est-ce qu'il serait possible que Oracle stock en mémoire les premiers milliers de requêtes ou est-ce que l'énorme ralentissement serait juste du à l'augmentation du nombre de records dans la base?

Merci d'avance!
seb500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 11h16   #2
Membre du Club
 
Inscription : décembre 2005
Messages : 76
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 76
Points : 42
Points : 42
Si j'ai bien compris, le traitement que ton programme java fait n'est pas uniquement un chargement de record, il test avant de charger .Donc c'est une sorte de mise à niveau de ta base par rapport à une autre base selon une certain politique

Si c’est le cas il faut donnée un maximum de détails sur ce traitement pour conclure si il y a une possibilité pour l'optimisé.
sofiane1111 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 13h29   #3
Membre expérimenté

 
Inscription : décembre 2003
Messages : 480
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 480
Points : 539
Points : 539
et redo logs ? ils ont quelles tailles ? ils sont sur quels disques ? es-tu en mode archivelog ? si oui, sur quels disques ? les mêmes que les redo ? et le datafile auquel appartient la table ?

tu fais un commit tous les combien ?

aussi pourquoi charger autant de records via une connexion javajdbc ? pourquoi pas sqlloader en direct mode ? quels sont tes select exécutés lors du chargement ? pourquoi ne pas utiliser du BULK processing via le pl/sql

et puis surtout , tu veux que cela soit réalisé en combien de temps ? et en combien de temps cela est-il réalisé aujourd'hui ???
__________________

*** OPN Exadata Specialist ***
*** OCE Performance Tuning 11g ***
*** OCE Rac 10g ***
*** OCP DBA 9i-10g-11g ***
Marc Musette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 17h12   #4
Invité de passage
 
Inscription : octobre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 5
Points : 1
Points : 1
Merci de vos réactions rapides!

C'est vrai que j'ai été un peu vague sur le fonctionnement de mon applic. En gros elle reçoit en input un fichier qu'elle analyse et insert les données dans la base oracle. Selon sur quoi elle tombe elle peut aussi aller modifier des records existants. Il y a vraiment une étape d'analyse et c'est donc pour cette raison que je ne charge pas la base d'une autre facon.

En ce qui concerne les redo log, ils ont une taille d'enregistrement de 72 et je n'ai aucune idée sur quel disque ils sont... Comment tu vois ca?
Je ne suis pas en mode archivelog.
Pour les commits, mon programme java lançait un commit tous les 20'000 insertions. Puis je l'ai enlevé pour voir et cela ne changeait rien sur le temps d'exécution... Est-ce qu'il y a moyen de mettre un auto-commit dans Oracle Enterprise manager? Est-ce que ca vaudra le coup?

Pour te donner un ordre d'idée du temps nécessaire, pour un million d'insertion ca m'a pris environ 24 heures et j'en ai 7 millions à insérer... En sachant que plus ca avance et plus ca ralentit ca doit bien prendre plus que 7 jours... Je sais que ce n'est pas du coté de java que ca traine car en utilisant une base Access cela va nettement plus vite et j'arrive à environ 1000 insertions en 4 secondes et sans aucun ralentissement à mesure que la base se remplit... Le but serait de réduire le temps nécessaire à un ou deux jours max si c'est possible...

N'hésitez pas si vous avez d'autres questions...
seb500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 17h21   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Vérifie si c'est pas ta table d'insertion qui fait des extends.
Quelle est sa caractéristique (taille, initial, next).
Pas de trigger dessus ?
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 17h24   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Pour les redo :
Code :
SELECT * FROM dba_data_files
Pour 7M d'enreg, mieux vaut mettre des commit intermédiaires.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 17h27   #7
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
sans les waits générés pendant la session ça va être compliqué de savoir d'où ça vient
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 18h21   #8
Invité de passage
 
Inscription : octobre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 5
Points : 1
Points : 1
je sais pas si ma table d'insertion fait des extends, voila ses caractéristiques:
taille initiale: 64 KO
taille suivante: 0 KO
Augmenter la taille de 0%
Il y a un trigger dessus pour utiliser une séquence afin d'incrémenter ma clé primaire (puisqu'il n'y a pas d'auto-increment), c'est tout.

Des commits intermédiaires d'accord, mais tous les 10'000, 100'000, 1'000'000?
seb500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 10h08   #9
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Citation:
Envoyé par McM Voir le message
Pour les redo :
Code :
SELECT * FROM dba_data_files
Non, DBA_DATA_FILES ne liste que les datafiles (les fichiers de données utilisés par les tablespaces non temporaires) et non les online redo logs.Pour lister les online redo logs, il faut utiliser V$LOGFILE et V$LOG.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 10h20   #10
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
Citation:
Envoyé par seb500 Voir le message
A savoir que mon programme java exécute un update et un select de temps en temps en plus des inserts.
Est-ce que par hasard le temps passé n'est pas dans ces quelques select et update ?
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 10h57   #11
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Citation:
Envoyé par seb500 Voir le message
je sais pas si ma table d'insertion fait des extends, voila ses caractéristiques:
taille initiale: 64 KO
taille suivante: 0 KO
Augmenter la taille de 0%
Il y a un trigger dessus pour utiliser une séquence afin d'incrémenter ma clé primaire (puisqu'il n'y a pas d'auto-increment), c'est tout.

Des commits intermédiaires d'accord, mais tous les 10'000, 100'000, 1'000'000?
Pour voir les extends :
Code :
1
2
3
4
5
SELECT SUM(bytes) / 1024 / 1024 AS Mo, COUNT(*) AS nb
FROM DBA_EXTENTS
WHERE tablespace_name = 'LETABLESPACE'
AND segment_type ='TABLE'
AND segment_name = 'LATABLEINSERTION'
Mais je suppose qu'avec des extends de 64 Ko, ca doit être monstreux.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 12h30   #12
Membre expérimenté

 
Inscription : décembre 2003
Messages : 480
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 480
Points : 539
Points : 539
vérifie si le tablespace dans lequel la table est créée est bien LMT et ASSM

Code :
1
2
3
4
5
6
 
SELECT TABLESPACE_NAME FROM DBA_TABLES WHERE table_name = 'NOM_TABLE';
 
SELECT EXTENT_MANAGEMENT, SEGMENT_SPACE_MANAGEMENT 
FROM dba_tablespaces
WHERE TABLESPACE_NAME = 'NOM_TBS';
cette dernière requête devrait te renvoyer LOCAL, AUTO ce qui devrait exclure un problème d'allocation des extents

néanmoins, il semble opportun commele précisait orafrance de nous envoyer un trace de ta session lorsqu'elle exécute ta procédure

il y a trop de possibilités (pblm des redo trop petis sur même disque que TEMP par exemple, pblm de PGA, pblm d'UNDO qui ne grandit pas assez vite ...)
__________________

*** OPN Exadata Specialist ***
*** OCE Performance Tuning 11g ***
*** OCE Rac 10g ***
*** OCP DBA 9i-10g-11g ***
Marc Musette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 13h02   #13
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Pour vérifier la gestion des extents il faut utiliser DBA_TABLESPACES.EXTENT_MANAGEMENT:

Citation:
EXTENT_MANAGEMENT VARCHAR2(10) Indicates whether the extents in the tablespace are dictionary managed (DICTIONARY) or locally managed (LOCAL)
SEGMENT_SPACE_MANAGEMENT VARCHAR2(6) Indicates whether the free and used segment space in the tablespace is managed using free lists (MANUAL) or bitmaps (AUTO)
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 14h20   #14
Membre expérimenté

 
Avatar de plabrevo
 
Inscription : décembre 2005
Messages : 541
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 541
Points : 598
Points : 598
Citation:
Envoyé par seb500 Voir le message
Il y a un trigger dessus pour utiliser une séquence afin d'incrémenter ma clé primaire (puisqu'il n'y a pas d'auto-increment), c'est tout.
C'est tout mais malgre tout suffisant pour degrader les performances dans un ratio de 1 a 10.

Verifier que:
1) le trigger est absolument necessaire pour recuperer la valeur de cle
2) sinon, que la sequence a ete creee avec un CACHE significatif.
plabrevo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 16h41   #15
Invité de passage
 
Inscription : octobre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 5
Points : 1
Points : 1
Citation:
Envoyé par remi4444 Voir le message
Est-ce que par hasard le temps passé n'est pas dans ces quelques select et update ?
Oui effectivement, tout le temps quasiment passait dans un select qui m'avait échapé... La ca va beaucoup mieux, j'insère 1 million de lignes en environ 30 minutes alors qu'avec le select qui s'exécutait à chaque insertion il me fallait plus de 24 heures!!!!

En tout cas merci à tous pour votre coup de main!
seb500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h25.


 
 
 
 
Partenaires

Hébergement Web