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/07/2012 15:57:35

ouilhe
Membre

ERROR: could not access status of transaction... Could not open file

Bonjour,
je tourne sur un environnement linux avec un postgresql 8.4.
J'ai eu des soucis de place sur le disque dur, et j'ai ceci dans les logs :

DETAIL:  Could not open file "pg_subtrans/0000": No such file or directory.
CONTEXT:  automatic analyze of table "database2.pg_catalog.pg_opclass"
ERROR:  could not access status of transaction 21374

Ce message apparait plein de fois dans les logs, et le pb semble venir de 5 transactions (21371 ... 21375).

Le fichier pg_subtrans/0000 était bien absent.

J'ai alors tenté de faire le fameux :
dd bs=8k count=1 < /dev/zero >> $PGDATA/pg_data/0000

voici le retour de la commande :
        1+0 records in
        1+0 records out
        8192 bytes (8.2 kB) copied, 7.9429e-05 s, 103 MB/s

puis j'ai fait un chown postgres:postgres sur le fichier.

Maintenant, les logs sont les suivantes :

CONTEXT:  automatic analyze of table "database2.pg_catalog.pg_index"
ERROR:  could not access status of transaction 21373
DETAIL:  Could not read from file "pg_subtrans/0000" at offset 81920: Success.

Il semble qu'il y ait toujours ces pb de transactions "suspendues" ...

Je sèche vraiment ...

Z'auriez des lumières à m'apporter plizzzz ??

Merci

Hors ligne

#2 24/07/2012 16:01:06

ouilhe
Membre

Re : ERROR: could not access status of transaction... Could not open file

PS : J'ai aussi tenté de faire un VACUUM standard sur la base, ça a pris prêt de 5h (mais la base est conséquente), et je n'ai pas vu de pb dans le rapport. Merci

Hors ligne

#3 24/07/2012 16:24:36

ouilhe
Membre

Re : ERROR: could not access status of transaction... Could not open file

Voici le retour de "ps -ef | grep postgres" :

postgres 21880     1  0 07:54 ?        00:00:01 /usr/lib/postgresql/8.4/bin/postgres -D /srv/host-app/pgdata/main -c config_file=/etc/postgresql/8.4/main/postgresql.conf
postgres 21883 21880  0 07:54 ?        00:00:14 postgres: writer process
postgres 21884 21880  0 07:54 ?        00:00:03 postgres: wal writer process
postgres 21885 21880  0 07:54 ?        00:00:00 postgres: autovacuum launcher process
postgres 21886 21880  0 07:54 ?        00:00:02 postgres: stats collector process
admin    21930     1  1 07:54 ?        00:07:36 java -javaagent:/srv/host-app/myapp/myapptools/myapphome-21/play/framework/play.jar -Duser.timezone=GMT -Xmx512m -Xms512m -server ...
postgres 21952 21880  0 07:54 ?        00:01:40 postgres: myapp database2 127.0.0.1(46869) idle
postgres 21953 21880  0 07:54 ?        00:00:43 postgres: myapp database2 127.0.0.1(46870) idle
postgres 21954 21880  0 07:54 ?        00:01:26 postgres: myapp database2 127.0.0.1(46871) idle
postgres 21988 21880  0 07:58 ?        00:01:29 postgres: myapp database2 127.0.0.1(43760) idle
postgres 21989 21880  0 07:58 ?        00:00:05 postgres: myapp database2 127.0.0.1(43761) idle
postgres 21990 21880  0 07:58 ?        00:00:29 postgres: myapp database2 127.0.0.1(43762) idle

Je trouve qu'il y a beaucoup de monde ...

Dois je killer les processus notés "idle" ?

Merci

Hors ligne

#4 24/07/2012 17:32:11

gleu
Administrateur

Re : ERROR: could not access status of transaction... Could not open file

Je n'ai pas trop le temps de regarder, mais juste un message très rapide : killer les processus postgres est certainement l'idée la pire qui soit. Si vous faites un kill -9, c'est tout le système qui s'arrête puis redémarre.


Guillaume.

Hors ligne

#5 24/07/2012 21:29:40

gleu
Administrateur

Re : ERROR: could not access status of transaction... Could not open file

Vous êtes sûr du fait que le fichier non trouvé est bien situé dans pg_subtrans ? il me semblerait plus logique que ce soit pg_clog.

Si c'est bien dans pg_subtrans, je ne vois qu'une chose à faire : arrêter PostgreSQL, renommer pg_subtrans, recréer pg_subtrans (attention aux droits et propriétaires), puis redémarrer PostgreSQL. Ceci fait, ré-essayer le VACUUM.


Guillaume.

Hors ligne

#6 24/07/2012 21:38:55

ouilhe
Membre

Re : ERROR: could not access status of transaction... Could not open file

Merci Guillaume pour ta réponse si rapide ! Je tente ça dès demain. Pour te répondre, oui, oui, c'est bien dans pg_subtrans ... et c'est bien le fichier 0000. Merci pour le tuyau.

Hors ligne

#7 25/07/2012 16:47:41

ouilhe
Membre

Re : ERROR: could not access status of transaction... Could not open file

Finalement, je ne peux pas faire la manip aujourd'hui ... Je te tiens informé quand je l'aurai fait. Merci

Hors ligne

#8 20/12/2012 09:38:46

ouilhe
Membre

Re : ERROR: could not access status of transaction... Could not open file

Je suis parti sur la réinstall de la base à partir d'un dump, merci pour ton aide gleu.

Hors ligne

#9 20/12/2012 11:51:57

sphax
Membre

Re : ERROR: could not access status of transaction... Could not open file

Bonjour,
J'ai exactement la même erreur sur un postgres 9.1

Caused by: org.postgresql.util.PSQLException: ERROR: could not access status of transaction 65426205
  Detail: Could not open file "pg_subtrans/03E6": No such file or directory.

J'ai aussi fait un
dd bs=49152 count=1 < /dev/zero > 03E6
1+0 records in
1+0 records out
49152 bytes (49 kB) copied, 0.000233787 s, 210 MB/s

(je lui ai donné la même taille qu'un autre fichier situé au même endroit)

et j'ai
Caused by: org.postgresql.util.PSQLException: ERROR: could not access status of transaction 65426205
  Detail: Could not read from file "pg_subtrans/03E6" at offset 81920: Success.

J'imagine qu'il ne peut pas lire a l'offset indiqué car le fichier n'est pas assez grand.

Si j'augmente la taille de ce fichier de manière trop importante, est-ce que cela peut avoir des impactes?

Merci d'avance.

Hors ligne

#10 20/12/2012 12:40:43

Marc Cousin
Membre

Re : ERROR: could not access status of transaction... Could not open file

Dans tous les cas, c'est de la bidouille. pg_subtrans et pg_clog contiennent des informations sur la visibilité des données. Recréer ces fichiers avec des zéros à l'intérieur, c'est encore plus dangereux que de mettre des zéros dans un fichier de données pour recréer des blocs corrompus.

Si vous avez des fichiers qui disparaissent comme ça du système de fichiers, il faut que vous trouviez la cause (probablement un problème disque)


Marc.

Hors ligne

#11 20/12/2012 12:45:18

sphax
Membre

Re : ERROR: could not access status of transaction... Could not open file

Mmm oui je pense bien.
Cependant c'est une base pour sonar, on a pas de dump, on pourrait tout casser et refaire la base de zero mais je cherchais une solution plus rapide smile

Si comme la dit Gleu je supprime le dossier pg_subtrans et que je lance un VACUUM ça va recréer le fichier?

Merci smile

Hors ligne

#12 20/12/2012 12:47:22

Marc Cousin
Membre

Re : ERROR: could not access status of transaction... Could not open file

Jamais essayé. J'en doute, mais ça ne vous coûte rien d'essayer. Plutôt que de le supprimer, renommez le. Et surtout, faites un backup de vos fichiers avant de commencer à faire ces manipulations, qui sont assez dangereuses.


Marc.

Hors ligne

Pied de page des forums