Salut !
J'essaie de faire marcher le query rewrite sur materialized view.
En fait, il s'agit d'un subterfuge pour gruger un progiciel (dont je ne peux modifier les requêtes, donc) qui calcule à chaque étape d'un certain traitement un gros agrégat.
Au cours de l'exécution, le résultat de la VM est altéré, mais tout le monde s'en fout parce que ce calcul correspond à une option du progiciel que nous n'utilisons pas.
Donc j'ai mis le système en QUERY_REWRITE_INTEGRITY = STALE_TOLERATED.
- Lorsque j'exécute ma requête qui doit être réécrite par TOAD ou sqlplus en interactif, ça passe : le plan d'exécution donné par EXPLAIN PLAN confirme l'utilisation de la VM. Je modifie la table, la VM passe en stale, je réessaie : c'est toujours bon.
- Pour le traitement en "batch", lorsque j'utilise "Kill/Trace Session" de Toad, le plan d'exécution affiché est également celui avec la VM.
- Par contre, toujours pour le traitement "batch", comme le temps d'exécution en découlant ne correspondait pas à une économie de gros agrégat, j'ai tracé la session : et là, le plan d'exécution affiché indique que la VM n'est pas prise !
Bon, j'ai essayé de me documenter un peu sur le sujet, et voici quelques indications supplémentaires :
- La VM est créée avec l'option ENABLE QUERY REWRITE, sans indication de rafraîchissement
- QUERY_REWRITE_ENABLE = TRUE
- Optimizer mode : chose
- l'unique table utilisée dans la vue est analysée
- les conteneurs des VM ont été analysées
- le traitement batch s'exécute avec le même USER que les tests en interactif : c'est l'OWNER
- dans le doute, mon DBA a passé : optimizer_secure_view_merging = FALSE
Ah, oui : Oracle 10.2.0.3
Ma question (on l'aura devinée) : Pourquoi est-ce que ma vue matérialisée n'est pas utilisée ??
Partager