Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 12/01/2011, 19h19   #1
Invité de passage
 
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 2
Points : 2
Par défaut Résultat d'une vue qui diffère suivant ordre de tri

Bonjour,

Je suis sur Oracle 11 et travaille avec TOAD, j'ai un problème pour lequel je ne vois aucune explication rationnelle :

J'ai une vue v1 (vue standard du type create view as subquery) qui associe une clef c1 à un clob contenant du XML à partir d'une table t1 (identifiée par c1) et d'une autre vue générant du XML.

Dans une procédure stockée, j'essaie de lire le contenu de cette vue v1 et de l'ajouter dans une table physique t2.
Pour ce faire :
- je fais d'abord un select bulk collect des clés d'une table t0 (table mère de t1 identifiée elle-aussi par c1 et qui contient plus d'enregistrement que t1) dans un type table indexé par binary_integer.
- je fais ensuite à l'intérieur d'un forall un insert dans t2 à partir d'un select de v1 en me basant sur les clef stockées dans mon type table.

Ma procédure stockée insère toujours le même clob XML dans la table t2 (la variable utilisée dans le forall elle varie bien).

C'est comme si ma vue s'exécutait une première fois, mettait son résultat en cache puis, lors des select suivant sur d'autres clefs, prendrait la valeur en cache plutôt que de se rafraichir...

J'ai fait la requête suivante pour voir le paramétrage de mon cache et, normalement, oracle ne devrait pas l'utiliser dans la mesure ou je ne lui demande pas.

Code :
1
2
3
SELECT name, value, isdefault
FROM v$parameter
WHERE name LIKE 'result_cache%';
ça me dit : result_cache_mode MANUAL

Dans le doute, j'ai quand même essayé de rajouter des hints /*+ NO_RESULT_CACHE */ dans tous les select impliqués mais ça ne fonctionne pas mieux.

Est-ce que ça parle à quelqu'un, parce que là je sèche ?


Merci infiniment pour votre aide

EDIT : Message initial mis à jour
jjjjjggggg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 21h51   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
La description est complète mais demande un peu trop de temps à analyser.

Pouvez-vous publier un comportement similaire avec des tables t1 t2 t3 et quatre / cinq lignes dedans ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 00h09   #3
Invité de passage
 
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 2
Points : 2
Je met un exemple

Citation:
table : t0
Colonne : cle | colonne quelconque 1 | col qcq 2
------------------------------------------------
a | toto | tutu
b | tata | titi
c | tete | tyty


table : t1
Colonne : cle | colonne quelconque 1 | col qcq 2
------------------------------------------------
a | toto | tutu
b | tata | titi

vue : v1
Colonne : cle | XML
------------------------------------------------
a | <toto><tutu/></toto>
b | <tata><titi/></tata>


Avec tri descendant dans la procédure stockée
t2
Colonne : cle | XML
------------------------------------------------
a | <toto><tutu/></toto>
b | <toto><tutu/></toto>
c |

Avec tri ascendantdans la procédure stockée
t2
Colonne : cle | XML
------------------------------------------------
c |
b |
a |
jjjjjggggg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 09h20   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par jjjjjggggg Voir le message
- je fais d'abord un select bulk collect des clés d'une table t0 (table mère de t1 identifiée elle-aussi par c1 et qui contient plus d'enregistrement que t1) dans un type table indexé par binary_integer.
- je fais ensuite à l'intérieur d'un forall un insert dans t2 à partir d'un select de v1 en me basant sur les clef stockées dans mon type table.
Et pourquoi pas INSERT INTO t2 SELECT * FROM t0 ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 14h50   #5
Invité de passage
 
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 2
Points : 2
J'ai volontairement simplifié l'explication, la vue v1 fait des modifs sur les colonnes de to : calculs, renommage de colonne, encapsulation dans une seule chaine XML contenue dans un clob. Et en fait il n'y a pas qu'une seule table t0 : il y en a 4, 4 tables t1 et 4 vues v1. La procédure stockée fait bien un insert de select, select qui lui même est décomposé en 4 select distincts sur les 4 vues v1.


Il y a beaucoup de volume donc j'ai suivi les conseils du fameux Don Burleson pour optimiser mes inserts : select des clefs en bulk collect + forall d'insert avec hint append et table en nologging

cf http://www.dba-oracle.com/t_optimize...erformance.htm
jjjjjggggg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 16h56   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par jjjjjggggg Voir le message
...Il y a beaucoup de volume donc j'ai suivi les conseils du fameux Don Burleson pour optimiser mes inserts : select des clefs en bulk collect + forall d'insert avec hint append et table en nologging
...
Pas vraiment fiable Don Burleston. Le "insert into ...' proposé par orafrance peut aussi être exécuté avec le hint append, etc.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h23.


 
 
 
 
Partenaires

Hébergement Web