Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 22/12/2010 11:40:01
- postman
- Membre
directive sql
Bonjour,
J'ai pas trouvé dans la doc, et je me pose une question.
Sous postgres, a t on le moyen de définir une directive sql pour obliger tel ou tel plan d'exécution de requête.
Merci pour votre réponse.
Hors ligne
#2 22/12/2010 11:45:03
- Marc Cousin
- Membre
Re : directive sql
Non, il n'y a pas de «hint» sous PostgreSQL. C'est un choix volontaire des développeurs: un HINT est une façon, pour l'utilisateur, de compenser une déficience de l'optimiseur. Ils préfèrent un rapport de bug.
Il y a quelques paramètres qui permettent de le faire très grossièrement : les paramètres en enable_*
On peut décourager les scans séquentiels, parcours d'index, merge join, etc… mais c'est vraiment très grossier.
Si c'est pour une requête particulière, n'hésitez pas à la poster sur le forum. La plupart du temps, les problèmes de plan d'exécution proviennent de la façon dont est écrite la requête, ou d'un problème de modélisation…
Dernière modification par Marc Cousin (22/12/2010 11:46:06)
Marc.
Hors ligne
#3 22/12/2010 11:58:18
- postman
- Membre
Re : directive sql
C'est plus dans le cas d'etude de comparaison de SGBD, par exemple si j'ai un prob de prod qu'une requete prendre pas le bon index car le modèle de données n'est pas bon, une purge n'est pas faite, cas d'un progiciel ou on ne peut pas intervenir. Sur certain moteur on peut mettre des directives externes ( pas un hint dans les requêtes ).
Voila j'ai pas de cas concret sur postgres ce jour car très peut de base encore.
Merci.
Hors ligne
#4 22/12/2010 11:59:49
- Marc Cousin
- Membre
Re : directive sql
Ok. Vous parlez donc plutôt d'outline à la Oracle ? Non, on ne peut pas davantage.
Marc.
Hors ligne
#5 22/12/2010 12:07:58
- postman
- Membre
Re : directive sql
Très bien, c'est dommage car en cas de pb c'est pratique, même si effectivement c'est pour palier a de pb de conception sql ou modèle.
Merci.
Hors ligne
#6 22/12/2010 12:16:59
- Marc Cousin
- Membre
Re : directive sql
Après 12 ans de DBA Oracle, je n'ai utilisé les outline qu'une seule fois. Et c'était le début de la fin pour l'application. Après quelques semaines, les cardinalités avaient changé, et l'outline était devenu complètement faux. Nous avons passé des mois à suivre la base et à redéfinir l'outline toutes les quelques semaines. Le coût d'administration de l'application a explosé.
Il y a une raison pour laquelle on est passé du RBO au CBO sur Oracle, c'est pour être dynamique quand le contenu de la base change. Les outline ne sont, la plupart du temps, une solution que pour une application vraiment mal écrite. En mettant des outline, on revient à ce qu'on avait avec le mode rule: des plans figés, incapables de s'adapter durant la vie de l'application.
Bref, je pense que le choix de PostgreSQL est le bon: ne pas déplacer le travail du développeur vers l'administrateur de la base, et forcer les gens à résoudre le problème au bon endroit. Après, vous trouverez toujours un contre-exemple de 'oui mais là, dans ce cas là, l'outline m'a sauvé la vie'. Mais je pense que dans l'ensemble, ils font largement plus de mal que de bien, justement en permettant au développeur de se défausser sur le DBA.
Mais c'est vrai qu'on s'éloigne de la question, là
Marc.
Hors ligne
Pages : 1