Remi4444, à quoi sert cette commande ? Est ce que l'exécution prend du temps ?Citation:
Envoyé par remi4444
Version imprimable
Remi4444, à quoi sert cette commande ? Est ce que l'exécution prend du temps ?Citation:
Envoyé par remi4444
Je ne suis pas un habitué de longue date mais je pense que les problèmes d'analyse et de plan d'exécution ont été maintes fois abordés sur le site mais je vais résumer.
Lorsque tu fais une demande à oracle, tu as pu constater que tu n'as pas eu besoin de concevoir un algorithme.
Imagine que tu doives faire un programme (en n'importe quel language tel que C, java, VB ....) pour récupérer des données situées dans 4 ou 5 fichier différents croisements entre les données. Tu peux programmer tes boucles de 36 manières différentes pour que arriver à tes fins, seulement lorsque les fichiers sont trés gros, selon l'algorithme que tu va choisir, tu va avoir de très grandes disparités dans les performances. Si tu veux optimiser ton algorithme, tu va avoir besoin de connaître en gros la répartition de tes données (quels sont les gros fichiers, quels sont les petit, tel fichier à une donnée qui se répète pour la moitié des lignes etc...). Une fois que tu connais ça, tu va pouvoir adapter ton algorithme par exemple en évitant de faire un parcours complet d'un gros fichier en creu de boucle...
Eh bien, une base de donnée fait tout ce travail pour toi, elle fabrique l'algorithme à ta place, alors que toi tu lui a posé une simple question (requête). Cet algorithme fabriqué automatiquement s'appelle le "PLAN D'EXECUTION". Et donc de la même manière que n'importe qu’un programmeur à besoin de savoir ou il met les pieds, si on veux que l'algorithme ne sois pas fait au hasard, il faut que la base ait un maximum d’information sur les données. C’est ce qui s’appelle « L’ANALYSE » de la base. Cette ne dois pas se faire à chaque requête évidement, elle dois se faire régulièrement selon l’évolution de la base. (Ex : 1 fois par semaine + à chaque gros chamboulement dans les données…)
Rapport à l'une de tes questions précédentes, la table "communes" comporte 300 données (communes d'Ille et Vilaine), ce qui n'est pas très important non plus... Mais je ne peux pas supprimer le "to_char(code_insee)", car les champs "dep" et "cmm" correspondant dans la table "gdtc1" sont des caractères et pas des nombres comme dans "communes"...
Donc si je comprend bien, l'exécution de la commande que tu m'as fourni va calculer les stats, et donc établir un plan d'exécution ?!
oui ça devrait l'aider à en établir un le plus efficace possible en effet...
Sinon il faudrait au moins que tu saches le nombre de lignes (grosso modo) de chacune de tes tables pour envisager de comprendre ce qui peut se passer, parceque des ordre de grandeur de 1000, c'est vraiment que-dale....
ça marche, ça marche ça maaaaaarche !!!!!!!!!!!!!!!!
J'ai bien exécuté ta commande
et ça marche nickel !Code:
1
2
3 BEGIN SYS.DBMS_UTILITY.ANALYZE_SCHEMA('COMUN','COMPUTE'); END;
Je vais l'appliquer à tous les autres schémas, histoire d'améliorer un peu tout ça, mais ça marche !!!!
youpi, je suis trop content, merci merci merci, et encore merci !
J'ai juste une autre question : c'est quoi un schéma ?! :? :oops:
normal que ça marche puisque tu n'as que peu de données, si ça ramait tant c'est peut etre que les analyses avaient été passées il y a longtemps au moment ou certaines tables était vides, ce qui devait induire gravement l'optimiseur en erreur....
Un schéma est un groupement de tables, et sous oracle un user est d'autorité attaché à un schéma qui porte exactement le meme nom que lui. Ce qui fait qu'on fait l'équivalence USER=SCHEMA et vice versa... ;)
Merci beaucoup pour tes explications et ta patience, tu m'as permis d'enlever une sacré épine !
En effet, je crois que la seule fois où une analyse a été passée sur ces tables date de 2003, c'est à dire de la création de la base... Pas facile de récupérer tout ça ! (ça ne fais que 3 mois que je travaille dessus, et encore...)
Eh bien, je crois que je peux rajouter le tag "résolu" !
Merci encore !