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 24/08/2015 10:40:48

Mathieu Denat
Membre

Diagnostic segmentation fault

Bonjour à tous,

J'ai des déconnexions intempestives lors de requêtes simples (select sur 30 000 lignes par exemple) et sur des requêtes plus gourmandes.
Ce qui me donne côté client (psql) "erreur SYSCALL SSL : EOF détecté".

Exemple:

# SELECT cd_ref FROM inpn.taxref WHERE cd_ref NOT IN (cd_nom);erreur SYSCALL SSL : EOF détecté
La connexion au serveur a été perdue. Tentative de réinitialisation : Échec.
!>

Côté serveur (Debian 7 + PostgreSQL 9.1):

Pour le log système (syslog):

Aug 24 10:18:17 Marmoratux kernel: [ 4328.062786] postgres[7245]: segfault at d0233c98 ip b722ee62 sp bf9da570 error 5 in postgres[b71cb000+553000]

et pour le log PostgreSQL:

2015-08-24 10:18:17 CEST LOG:  processus serveur (PID 7245) a ?t? arr?t? par le signal 11 : Segmentation fault
2015-08-24 10:18:17 CEST LOG:  arr?t des autres processus serveur actifs
2015-08-24 10:18:17 CEST ATTENTION:  arr?t de la connexion ? cause de l'arr?t brutal d'un autre processus serveur
2015-08-24 10:18:17 CEST D?TAIL:  Le postmaster a command? ? ce processus serveur d'annuler la transaction
        courante et de quitter car un autre processus serveur a quitt? anormalement
        et qu'il existe probablement de la m?moire partag?e corrompue.
2015-08-24 10:18:17 CEST ASTUCE :  Dans un moment, vous devriez ?tre capable de vous reconnecter ? la base de
        donn?es et de relancer votre commande.
2015-08-24 10:18:17 CEST LOG:  tous les processus serveur se sont arr?t?s, r?initialisation
2015-08-24 10:18:17 CEST LOG:  le syst?me de bases de donn?es a ?t? interrompu ; dernier lancement connu ? 2015-08-24 10:17:28 CEST
2015-08-24 10:18:17 CEST LOG:  le syst?me de bases de donn?es n'a pas ?t? arr?t? proprement ; restauration
        automatique en cours
2015-08-24 10:18:17 CEST FATAL:  le syst?me de bases de donn?es est en cours de restauration
2015-08-24 10:18:17 CEST FATAL:  le syst?me de bases de donn?es est en cours de restauration
2015-08-24 10:18:17 CEST LOG:  enregistrement de longueur nulle ? 9/CF5C73C
2015-08-24 10:18:17 CEST LOG:  la r?-ex?cution n'est pas n?cessaire
2015-08-24 10:18:17 CEST LOG:  le syst?me de bases de donn?es est pr?t pour accepter les connexions
2015-08-24 10:18:17 CEST LOG:  lancement du processus autovacuum

De ce que j'en comprend le serveur PostgreSQL se prend les pieds dans le tapis mais je n'en comprend pas la cause.
Pourriez-vous m'éclairer de vos lanternes?

Merci d'avance.

PS: une migration est prévue sur une nouvelle machine bientôt suivi d'une mise à jour de postgresql, si au passage vous avez des conseils, liens ou informations diverses à me fournir je suis preneur. Car ce sera ma première fois!

Hors ligne

#2 24/08/2015 10:50:24

Marc Cousin
Membre

Re : Diagnostic segmentation fault

Les erreurs se produisent systématiquement sur les mêmes requêtes ou c'est plus aléatoire ?

Un plantage sur une requête aussi simple est assez surprenant.

Ça pourrait être une corruption de données, ou un problème sur le serveur.


Marc.

Hors ligne

#3 24/08/2015 11:02:12

Mathieu Denat
Membre

Re : Diagnostic segmentation fault

Les erreurs se produisent quasiment systématiquement, disons dans 60 à 80% des cas.
Si c'est une corruption de données comment puis-je identifier la donnée qui pose problème?
Dans le cas d'un problème serveur, il s'agirait d'un problème matériel type RAM ou disque dur montrant des signes de faiblesses ou tu penses à autre chose?
Merci en tous cas.

Hors ligne

#4 24/08/2015 11:03:56

Marc Cousin
Membre

Re : Diagnostic segmentation fault

Ma question c'est: si tu lances cette requête:

SELECT cd_ref FROM inpn.taxref WHERE cd_ref NOT IN (cd_nom)

Elle explose systématiquement ? C'est quoi d'ailleurs ce «cd_nom» (habituellement on voit un subselect dans un NOT IN)


Marc.

Hors ligne

#5 24/08/2015 11:29:31

Mathieu Denat
Membre

Re : Diagnostic segmentation fault

Ah pardon je n'avais pas compris.
Oui elle plante systématiquement.
cd_nom est un champ issu de TaxRef, le référentiel espèces fournit par le ministère de l'environnement (grosso modo!).
Là l'idée est de trouver les cd_ref qui ne sont pas dans les cd_nom.
En fait une espèce peut être saisie sous plusieurs noms car la taxonomie évolue.
Le crapaud croa peut s'appeler crapaud karaoua dans le référentiel suivant (la magie de la génétique! smile ).
Le référentiel évoluant plus vite que les naturalistes (imagine si tu devais réapprendre X noms d'espèces à chaque version ça deviendrait compliqué) il faut qu'on puisse saisir crapaud croa mais qu'en base le crapaud croa fasse bien référence au crapaud karoua.
D'où l'idée de cd_ref et cd_nom: cd_ref pour le code de référence saisi et cd_nom pour le code du nom valide de l'espèce pour le référentiel TaxRef.
Ainsi lorsque je t'envoie mes données naturalistes tu te trouveras avec uniquement des crapauds karoua même si j'ai saisi un crapaud croa. Puisque nous utilisons le même référentiel alors nous pouvons échanger sans trop bricoler (c'est une des utilités de TaxRef).

C'est peut-être un peu touffu mais j'espèce avoir été clair.

Si ça t'intéresse voici un lien vers TaxRef: http://inpn.mnhn.fr/programme/referenti … que-taxref

Hors ligne

#6 24/08/2015 11:32:08

Marc Cousin
Membre

Re : Diagnostic segmentation fault

cd_nom, c'est donc un champ de la table taxref… il est de quel type ? (c'est un peu inhabituel d'avoir autre chose qu'un select dans un NOT IN).


Marc.

Hors ligne

#7 24/08/2015 11:40:48

Mathieu Denat
Membre

Re : Diagnostic segmentation fault

Oui c'est un champ de la table taxref, de même que cd_ref.
Ce sont des champs en character varying pour les deux.

Hors ligne

#8 24/08/2015 11:43:50

Marc Cousin
Membre

Re : Diagnostic segmentation fault

Ok. Donc il ne peut y avoir qu'un seul cd_nom… Pourquoi un NOT IN et pas un <> ?

Sinon, pour revenir au problème de crash inital…

un «\copy inpn.taxref to /tmp/toto» (dans un psql) crash aussi ?


Marc.

Hors ligne

#9 24/08/2015 12:03:07

Mathieu Denat
Membre

Re : Diagnostic segmentation fault

Euh joker pour le NOT IN! C'est un bout de code filé par un collègue qui touche plus que moi! (je suis plutôt débutant débutant/avancé).
J'obtiens le même résultat avec la requête suivante: SELECT cd_ref FROM inpn.taxref WHERE cd_ref <> cd_nom;


Alors le crash initial:
tentative 1 --> semble avoir marché
tentative 2 --> déconnecté du serveur
tentative 3 --> semble avoir marché
tentative 4 --> déconnecté du serveur
tentative 5 --> semble avoir marché
tentative 6 --> déconnecté du serveur
tentative 7 --> semble avoir marché
tentative 8 --> déconnecté du serveur
tentative 9 --> semble avoir marché
tentative 10 --> déconnecté du serveur


Je ne sais pas à partir de combien d'essai on peut dire que ça marche une fois sur deux mais ça semble être 50% fonctionnel et 50% problématique (même si j'attends un laps de temps variable entre chaque tentative).
Par contre côté contenu devrais-je avoir 452 103 lignes dans toto?
J'ai 452 103 dans la table taxref.


Voici la fin du fichier toto qui fait 33 116 lignes.

 $tail /tmp/toto
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        16409   188682  16409   ES      Acallocrates denticollis        (Germar, 1824)  Acallocrates denticollis (Germar, 1824) <i>Acallocrates denticollis</i> (Germar, 1824)      Acallocrates denticollis (Germar, 1824)                 3       P                                                                                                                       http://inpn.mnhn.fr/espece/cd_nom/16409
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        16410   188682  16409   ES      Acalles denticollis     Germar, 1824    Acalles denticollis Germar, 1824        <i>Acalles denticollis</i> Germar, 1824     Acallocrates denticollis (Germar, 1824)                 3       P                                                                                                                       http://inpn.mnhn.fr/espece/cd_nom/16410
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        16411   188682  16409   ES      Acalles (Acallocrates) denticollis              Acalles (Acallocrates) denticollis      <i>Acalles </i>(<i>Acallocrates</i>)<i> denticollis</i>     Acallocrates denticollis (Germar, 1824)                 3       P                                                                                                                       http://inpn.mnhn.fr/espece/cd_nom/16411
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        16412   188682  16412   ES      Acallocrates minutesquamosus    (Reiche, 1860)  Acallocrates minutesquamosus (Reiche, 1860)     <i>Acallocrates minutesquamosus</i> (Reiche, 1860)  Acallocrates minutesquamosus (Reiche, 1860)                     3       P                                                                                                                  http://inpn.mnhn.fr/espece/cd_nom/16412
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        409293  188682  16412   ES      Acalles discors Hoffmann, 1958  Acalles discors Hoffmann, 1958  <i>Acalles discors</i> Hoffmann, 1958       Acallocrates minutesquamosus (Reiche, 1860)                     3       P                                                                                                                       http://inpn.mnhn.fr/espece/cd_nom/409293
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        16413   188682  16412   ES      Acalles minutesquamosus Reiche, 1862    Acalles minutesquamosus Reiche, 1862    <i>Acalles minutesquamosus</i> Reiche, 1862 Acallocrates minutesquamosus (Reiche, 1860)                     3       P                                                                                                                       http://inpn.mnhn.fr/espece/cd_nom/16413
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        188685  184685  188685  GN      Acalyptus               Acalyptus       <i>Acalyptus</i>        Acalyptus                       \N P
                                                                                                                        http://inpn.mnhn.fr/espece/cd_nom/188685
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        15772   188685  15772   ES      Acalyptus carpini       (Fabricius, 1792)       Acalyptus carpini (Fabricius, 1792)     <i>Acalyptus carpini</i> (Fabricius, 1792)  Acalyptus carpini (Fabricius, 1792)                     3       P                                                                                                                       http://inpn.mnhn.fr/espece/cd_nom/15772
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        409198  188685  15772   ES      Acalyptus caucasicus    Reitter, 1900   Acalyptus caucasicus Reitter, 1900      <i>Acalyptus caucasicus</i> Reitter, 1900   Acalyptus carpini (Fabricius, 1792)                     3       P                                                                                                                       http://inpn.mnhn.fr/espece/cd_nom/409198
Animalia        Arthropoda      Insecta Coleoptera      Curculionidae   Arthropodes     Insectes        409197  188685  15772   ES      Acalyptus fuscipes      Thomson, 1870   Acalyptus fuscipes Thomson, 1870        <i>Acalyptus fuscipes</i> Thomson, 1870     Acalyptus carpini (Fabricius, 1792)                     3       P                                                                                                                       http://inpn.mnhn.fr/espece/cd_nom/409197

Toutes mes versions de toto semblent identiques (même poids, même nombre de lignes, terminent tous par http://inpn.mnhn.fr/espece/cd_nom/409197 ).
C'est grave docteur?

Hors ligne

#10 24/08/2015 17:14:31

Marc Cousin
Membre

Re : Diagnostic segmentation fault

C'est vraiment très bizarre. Je ne vois pas comment il ferait autre chose qu'un full scan sur cette table, c'est donc une requête vraiment simple. À tout hasard, Postgres est à jour ? Il y a eu il y a un certain temps des bugs d'initialisation de variables, qui pouvaient entraîner ce genre de plantages. Mais ça date...

=> Quelle est la version exacte de PG ?  (select version() )


Marc.

Hors ligne

#11 24/08/2015 17:32:49

Mathieu Denat
Membre

Re : Diagnostic segmentation fault

Ouf!
Je crois avoir réglé le problème à l'instant! smile
J'ai recréé ma table taxref, notamment à l'aide de ce tuto:
http://si.cenlr.org/postgresql_fdw_taxref
Et ça semble résoudre mes soucis.
Pour info le "\copy toto" semble fonctionner aussi (400 000 lignes et des poussières).


Je penche vers la table corrompue (je ne sais pas pourquoi ni à cause de quoi...).
Comme taxref est une table centrale (comprendre appelée par beaucoup d'autres), ça devait être le grain de sable qui grippait l'engrenage.

Existe-t-il une procédure pour savoir si une table contient des erreurs?
Je suis preneur de ce type d'information sur la maintenance globale du serveur.


Pour info notre version vieillissante:
PostgreSQL 9.1.15 on i686-pc-linux-gnu, compiled by gcc (Debian 4.7.2-5) 4.7.2, 32-bit

Merci pour ton aide en tous cas.

Hors ligne

#12 24/08/2015 17:35:08

Marc Cousin
Membre

Re : Diagnostic segmentation fault

C'est très étrange… mais bon, si le problème est résolu de cette façon, ça devait effectivement être une corruption de table.

Pour détecter les corruptions, il faut créer une instance avec checksums. Ce n'est disponible qu'à partir de la 9.3.


Marc.

Hors ligne

#13 24/08/2015 18:21:12

Mathieu Denat
Membre

Re : Diagnostic segmentation fault

Ok merci pour tout.
J'attends le nouveau serveur pour upgrader la base, et j'attends avec impatience les vues dématérialisées de PostGIS.
Bonne soirée.

Hors ligne

Pied de page des forums