PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 02/04/2010 09:24:56

scheu
Membre

Lenteur fonction dblink_connect

Bonjour

Avec Postgresql 8.2 sous Linux, j'essaie d'utiliser la contrib dblink pour me connecter à une base distante. J'utilise la commande suivante :

select dblink_connect('host=serveur_distant port=5432 dbname=BDD_DISTANTE user=user_distant password=le_pwd');

Le problème c'est que quand le serveur_distant est déclaré dans mon fichier /etc/hosts, la connexion se fait instantanément
Par contre quand le serveur_distant n'est pas déclaré dans mon fichier /etc/hosts, la connexion met environ 1 minute.

Pourtant, même quand le serveur_distant n'est pas déclaré dans le /etc/hosts, j'arrive ç faire un ping qui est instantané et une connexion du type " psql -h serveur_distant -d BDD_DISTANTE" est instantanée aussi donc je ne pense pas que cela puisse venir du réseau ni du temps de réponse de notre serveur DNS

Y a-t-il une particularité avec la fonction dblink_connect qui pourrait expliquait qu'il mette 1 minute à m'ouvrir la connexion ?

Merci d'avance

Hors ligne

#2 02/04/2010 10:24:06

Marc Cousin
Membre

Re : Lenteur fonction dblink_connect

Un timeout de 1 minute fait penser à un problème de résolution DNS 'inverse' : il doit y avoir un des composants dans la chaîne qui essaye de résoudre une IP en nom (par exemple à des fins de traçage).

Il faudrait aller chercher dans le code ou les appels système faits par PostgreSQL ou dblink pour repérer ce problème de résolution ?

Pour résumer ce qui se passe probablement (je n'ai pas vérifié) : serveur_distant est résolu en son adresse IP (c'est très rapide, c'est la résolution DNS classique), puis quelque chose dans le code veut retransformer cette adresse IP en nom de machine (c'est souvent fait pour des fonctions de logging par exemple), et le serveur DNS ne sait alors pas résoudre IP -> nom (c'est la résolution DNS inverse), et fini par partir en timeout. C'est malheureusement assez fréquent que les administrateurs réseau oublient ou fassent l'impasse sur cette résolution inverse.

Vous pouvez demander aux administrateurs réseau de vérifier que la résolution inverse de cette IP est renseignée pour commencer (en espérant que je ne vous envoie pas sur une fausse piste smile )


Marc.

Hors ligne

#3 06/04/2010 11:25:48

scheu
Membre

Re : Lenteur fonction dblink_connect

Merci pour ta réponse

J'ai étudié la piste de la résolution DNS inverse avec notre administrateur réseau et ça ne donne rien :
- la résolution inverse est bien activée
- nous avons même fait un test en créant une entrée DNS qui à partir de l'adresse IP renvoie vers le nom du serveur utilisé dans la chaîne de connexion, mais le problème apparaît toujours

J'ai même désactivé le paramètre log_hostname dans le postgresql.conf au cas où ça aurait pu influer mais sans résultat ...

C'est d'autant plus bizarre que sur certains de nos serveurs Postgresql le problème ne se pose pas alors qu'ils sont tous configurés de la même manière et sont dans le même LAN ...

Enfin bon en tout cas j'ai au moins la solution de contournement consistant à déclarer dans le fichier /etc/hosts les serveurs sur lesquels Postgresql est susceptible de se connecter en dblink

Merci pour ton aide en tout cas

Hors ligne

Pied de page des forums