Non, ce sont deux choses différentes.
Voici comme activer et lire une trace :
http://oracle.developpez.com/guide/tuning/tkprof/
Non, ce sont deux choses différentes.
Voici comme activer et lire une trace :
http://oracle.developpez.com/guide/tuning/tkprof/
Email : http://scr.im/waldar
En fait mon programme se divise en trois grandes partie :
1 - Charger depuis un fichier plat les lignes dans la table INTERFACE
2 - Enrichir(update) les colonnes de la table depuis d'autres tables
3 - Contrôler que les données enrichies sont correctes sinon udapte de la table pour les lignes concernées.
Donc en fin de compte je fais beaucoup de mise à jour, et je crée, puis drop les index dynamiquement dans le package.
Le temps est un point très important et j'ai une plage à ne pas dépasser...
Il fallait commencer par là, si le temps est important pour vous ce n'est pas du tout ce qu'il faut faire.
Dans les grandes lignes :
- Créer une table externe qui pointe vers votre fichier
- Écrire un select qui sort les bonnes données avec les bonnes jointures
- Effectuer un merge ou insert into table finale depuis le select précédent selon le besoin
Email : http://scr.im/waldar
J'ai trouvé tkprof, mais je n'ai pas compris comment l'utiliser sur une requête.
Pouvez vous m'aider svp?
C'est la table INTERFACE, il faut que je charge les données du fichier pour pouvoir les exploiter.
Il faut que je récupère toutes valeurs qu'elles soient bonnes ou mauvaises, car à la fin de mon programme, il y a un compte rendu relatant toutes les mauvaises valeurs lors de l'enrichissement et du contrôle.
Dans le même sens que Waldar, si tu as beaucoup d'étapes de mise à jour successives, tu peux peut être commencer par charger dans une table temporaire, effectuer le job dessus, et finir par insérer la version définitive dans INTERFACE.
L'avantage étant de générer potentiellement beaucoup moins de redo...
(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...
Le pacblog : http://pacmann.over-blog.com/
Les mises à jour, je vais le faire soit sur une table temp, soit sur INTERFACE directement, et du moment que les index je peux les créer et supprimer sans problème sur INTERFACE, pourquoi je vais ajouter une autre étape dans ma boucle?
Cet update, prendra le même temps, puisque dans la table TEMP, il y aura aussi 2,5 millions d'écritures.
A vrai dire, pas tout à fait le même temps...
La table normale :
L'update de la table normale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SQL> CREATE TABLE pastempt AS 2 SELECT level l 3 FROM DUAL 4 CONNECT BY level <= 1000000; Table crÚÚe. EcoulÚ : 00 :00 :06.03
La table temporaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 SQL> set autot on statistics SQL> UPDATE pastempt SET l = l + 1; 1000000 ligne(s) mise(s) Ó jour. EcoulÚ : 00 :00 :38.08 Statistiques ---------------------------------------------------------- 662 recursive calls 2041212 db block gets 1882 consistent gets 2058 physical reads 465180960 redo size 379 bytes sent via SQL*Net to client 305 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1000000 rows processed
L'update de la table temporaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SQL> CREATE GLOBAL TEMPORARY TABLE tempt AS 2 SELECT level l 3 FROM DUAL 4 CONNECT BY level <= 1 5 / Table crÚÚe. SQL> INSERT INTO tempt 2 SELECT level l 3 FROM DUAL 4 CONNECT BY level <= 1000000; 1000000 ligne(s) crÚÚe(s). EcoulÚ : 00 :00 :04.04
Il y a une différence sur le redo généré...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 SQL> UPDATE tempt SET l = l + 1; 1000000 ligne(s) mise(s) Ó jour. EcoulÚ : 00 :00 :24.01 Statistiques ---------------------------------------------------------- 591 recursive calls 2024026 db block gets 1822 consistent gets 1496 physical reads 164687196 redo size 378 bytes sent via SQL*Net to client 302 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 1000000 rows processed
(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...
Le pacblog : http://pacmann.over-blog.com/
Et pour appuyer également les arguments de Waldar, quand tu crées une table en faisant un
Tu gagnes aussi ... par exemple, tu as pu voir que le CREATE TABLE initial remplit les lignes de la table à créer, le tout en 4 secondes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CREATE TABLE [GLOBAL TEMPORARY]tatable AS SELECT lesbonnesvaleursquicorrespondentatamiseajour FROM ta_table_a_modifier JOIN ta_table_qui_contient_les_donnees_a_affecter ON ...
(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...
Le pacblog : http://pacmann.over-blog.com/
Faudrait peut-être pas trop abuser, il y a tout dans le tutoriel
C'est pas une trace de requête mais de session. Tu mets ta session en trace, tu lances ton programme, tu arrêtes la trace et tu lances le tkprof pour faciliter l'interprétation de la trace... y'a plus qu'à lire le détail dans le tuto
Et bien c'est le tuto que je n'ai pas compris.
Je ne peux pas lancer la trace rien que pour ma requête d'UPDATE?
Non, on trace une session... suffit de lancer l'update dans la session pour qu'elle soit dans la trace.
Quand on suit une trace à la chasse, on peut pas tracer que les sangliers borgnent... on trace tous les passages et dedans, on trouvera les sangliers borgnent
Ok, j'ai activé la trace pour ma session, mais sur le tuto il n'y a pas un exemple pour lancer tkprof.
Je comprends que vous incitez les gens à chercher d'abord, mais dans mon cas, Google a été la première alternative et c'est parce que je n'ai pas trouvé de réponse que je suis venu vous demander conseils.
Oui j'ai fait aussi mes recherches!!
Je vais être plus explicite : Je ne sais pas d'où j'obtiens le fichier trace en entrée dans tkprof.
Par défaut il est dans le répertoire udump que l'on trouve en tapant sous SQL*Plus :
show parameter user_back
cette commande ne m'a rien retournée sur SQL*PLUS.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager