|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2006 Messages : 50 ![]() |
Bonjour,
Je dois étudier une requête et l'optimiser si besoin et pour cela, j'aurais voulu avoir des précisions sur les hints: Peut-on rajouter par un hint un index qui n'existe pas sur une colonne juste pour observer le plan d'exécution résultant, ou faut-il absolument créer cet index? Merci d'avance. |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Non, mais avec l'option NOSEGMENT tu peux créer un index "virtuel"
|
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2006 Messages : 50 ![]() |
NOSEGMENT?
Et a quel moment tu l'utilises? Et comment? En fait, je m'impregne de la doc pdf que j'ai trouvé sur ce site, mais je ne vois pas parler de cette option. Comme tu l'auras compris, je débute en tant que tunneuse !!! Désolée si mes questions semblent un peu bêtes. Merci d'avance. |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
c'est un paramètre du CREATE INDEX. Ca crée ton index mais vide, donc évidemment il n'est pas utilisé mais ça permet de voir ce que ça donne dans les plans d'exécution.
pense à calculer les stats dessus aussi |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2006 Messages : 50 ![]() |
Merci j'essaye tout de suite.
Si encore des problèmes, je te recontacte. Sinon, je clos. Merci encore. |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
Code :
|
||
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2006 Messages : 50 ![]() |
Déjà, s'il me permet de voir sur le plan d'exécution une amélioration au niveau du cout, ce serait pas mal.
J'ai des requêtes qui sont vraiment trop longues, et elles mettent à genou le serveur. Donc avec la création d'un index "virtuel", je devrais deja voir si ca m'avance un peu. Merci encore... |
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
bon, disons qu'il faudrait déjà revoir ta requête, puis ensuite ton plan d'execution. Si tu as des full tables scans, tu peux créer un index pour voir si ça améliore quelque chose...
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2006 Messages : 50 ![]() |
Mon problème est bien là... J'ai des accès en full scan sur des tables de plusieurs dizaines de millions de lignes...
Autre question un peu bête, sûrement. Un index sur 2 colonnes ne sera jamais utilisé si la requête ne concerne que l'une d'entre elles? |
|
|
00
|
|
|
#10 |
|
Membre éprouvé
![]() Inscription : juillet 2006 Messages : 445 ![]() |
|
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
si l'index est sur 2 colonnes et que tu as une condition sur la première colonne alors il sera utilisé. Sinon, probablement pas, mais peut-être quand même.
Il faudrait que tu nous donnes ta requête et ton plan |
|
00
|
|
|
#12 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2006 Messages : 50 ![]() |
Voici la requete:
Code :
Code :
INDEX_NAME COLUMN_NAME COLUMN_POSITION ------------------------------ -------------------- --------------- ITEM_LOC_I2 PRIMARY_SUPP 2 ITEM_LOC_I2 ITEM 1 ITEM_LOC_I3 ITEM_PARENT 1 ITEM_LOC_I4 ITEM_GRANDPARENT 1 ITEM_LOC_I5 PRIMARY_VARIANT 1 ITEM_LOC_I6 SELLING_UOM 1 PK_ITEM_LOC ITEM 1 PK_ITEM_LOC LOC 2 Merci d'avance |
||||
|
|
00
|
|
|
#13 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
1) FROM inter1 a, inter2 b, item_loc c, dual
enlève-moi vite ce dual de là !!! 2) La table la plus problématique à mon gout est item_loc, qui a 6 index Non, tu sélectionnes toutes les lignes, donc un index ne va pas te servir à grand chose, un full table scan est dans ton cas tout à fait efficace. Si tu as plusieurs millions de lignes, il faut plutôt se pencher vers le partitioning et le parallélisme |
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
enlève aussi le
to_char(add_months(sysdate, -1), 'YYYYMM') de la clause group by |
|
00
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2006 Messages : 50 ![]() |
La requete n'est pas de moi, et je ne sais pas pour quelle raison ils avaient besoin de dual.
Je vais me renseigner à la rigueur. Mais c'est le dual qui fait que le plan d'exécution est si mauvais? Quand tu parles de partitionning, c'est sur cette fameuse table de 34 millions de lignes? Malheureusement, cette table étant déjà en prod, je ne sais pas si c'est réalisable. |
|
|
00
|
|
|
#16 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
1) le plan n'est pas du tout mauvais
2) pour dual, c'est parcequ'il y a des ânes qui croient que SYSDATE est une colonne de dual 3) le partitionement d'une table existante est une tâche de maintenance comme une autre. Attention, l'option Partitioning n'est pas gratuite et nécessite Enterprise Edition + Partitioning |
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2006 Messages : 50 ![]() |
Ok pour le dual, j'aurais dû/pu y penser toute seule.....
merci Pour le reste, je vais voir si je peux chronométrer ma requête pour voir si elle est acceptable... Savoir s'ils veulent bien que je mette a genou leur serveur.... Pour info, la table fait 6,25Go pour 34 million de lignes, c'est correct.... Je ne sais pas si ca sert à quelque chose de partitionner la table; je vais leur proposer quand-même. |
|
|
00
|
|
|
#18 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
c'est sûr que ça sert, surtout si le serveur est multiprocesseur.
Il faut être sûr aussi d'avoir une valeur de PGA_AGGREGATE_TARGET suffisante. En gros, si tu as des ressources (mémoire+processeurs), tu peux terriblement réduire le temps d'exécutation, style avec une dizaine de processeurs et une dizaine de gigas de mémoire, tu pourras passer de plusieurs heures à quelques minutes. bien sûr si tu as une machine monoprocesseur avec Windows, tu risque d'être déçue... A+ Laurent |
|
00
|
|
|
#19 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
encore faut-il que le parallélisme soit paramétré ou au moins l'async IO sinon, ça va pas donner grand chose
|
|
|
00
|
|
|
#20 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2006 Messages : 50 ![]() |
Bon, plus de peur que de mal, la requête met 6 min à s'exécuter. C'est donc pas dramatique, sachant que c'est un traitement mensuel nocturne.
Je vais voir avec le client ce qu'il en pense. Merci encore |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com