IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Plantage pendant reindexation


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 138
    Points : 47
    Points
    47
    Par défaut Plantage pendant reindexation
    Salut a tous.

    Bon j'ai un petit souci avec ma base postgresql 8.1.
    En effet, il a ete mis en place sur le serveur linux (Ubuntu 6.06 lts) une procedure (en perl, planifiee chaque nuit) qui permet dans un premier temps de faire vacuum sur sur toutes mes bases (y'en a 183), vacuumdb, puis un reindexdb, et enfin, une sauvegarde avec pg_dump.

    Voila ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #! /usr/bin/perl
     
    # day of week
    use POSIX qw(strftime);
    my $day=strftime("%a", localtime());
     
    my $argument = $ARGV[0]; # just in case
    my $pgdir = "/home/postgresql/";
    my $pgbin = $pgdir."bin/";
    my $savedir = $pgdir."/dumpdatabase/".$day."/";
    my $dblist = $savedir."list.out";
    my $pguser = "postgres";
    my $pgport = "5442";
    my $savedirwin = $pgdir."mnt/devwin1/phptmp/dumpdatabase/";
     
    system("rm -rf $savedir");
    system("rm -rf $savedirwin".$day."/");
    system("mkdir $savedir");
     
    # vacuum databases
    system("echo \"Performing vacuum on all databases\"");
    system($pgbin."vacuumdb -a -U $pguser -p $pgport"); 
    system("echo \"Performing reindex on all databases\""); 
    system($pgbin."reindexdb -a -U $pguser -p $pgport");
     
    # create database list
    system($pgbin."psql -U $pguser -p $pgport -l > $dblist");
     
    unless(open(INPUT, $dblist))
    {
    	die("cannot open $dblist\n");
    }
     
    my $i=0;
    while(<INPUT>)
    {
    	$line=$_;
    	chomp($line);
     
    	if($i>2)
    	{
    		my $start=1;
    		my $end=index($line, "|");
     
    		# for each database		
    		if($end!=-1)
    		{
    			my $dbname=substr($line, $start, $end-1);
    			$dbname =~ s/^\s+//; # trim spaces
    			$dbname =~ s/\s+$//;
     
    			if($dbname !~ m/^$pguser$/) # do not dump/restore maintenance database
    			{
    				system("echo \"Performing vacuum large objects on '$dbname'\"");
    				system($pgbin."vacuumlo -U $pguser -p $pgport $dbname");
     
    				system("echo \"Dumping '$dbname'\"");
    				system($pgbin."pg_dump -O -U $pguser -p $pgport -i -Ft $dbname > ".$savedir.$dbname.".tar");
     
    				if($day !~ m/^Fri$/) # delete blobs if not Friday
    				{
    					system($pgdir."scripts/dropblob.sh ".$savedir." ".$dbname);
    				}
    			}
    		}
    	}
    	$i++;
    }
     
    system("echo \"Copying $savedir to $savedirwin\"");
    system("cp -r $savedir $savedirwin");
    system("echo \"All done\"");
    Le probleme, c'est que ce script tourne depuis plusieurs annees, sans aucun probleme, mais depuis quelques jours, il plante regulierement...
    Et apparement, ca plante pendant le reindexage. Et suite a ca, postgresql n'est plus accessible (j'ai des database failure).
    Je fais ecrire dans un fichier ce qu'il se passe, mais je n'ai pas de message d'erreur. Donc j'ai tente de faire un reindexdb a partir d'une fenetre de commande, et la, je me rends compte que le reindexdb plante de facon aleatoire. Une fois sur une base, une autre fois sur une autre, pas tout le temps sur la meme table (chaque base comporte les memes tables). Et j'ai eu par exemple aujourd'hui deux messages d'erreur differents :

    1)- reindexdb: reindexing of database "xxxx" failed: ERROR: could not sync relation 1663/146801/35984216: Input/output error

    2)- reindexdb: reindexing of database "yyyy" failed: ERROR: PANIC: could not fdatasync log file 24, segment 53: Input/output error

    Par contre, la ca plante, mais ca ne me bloque pas ma base...

    Donc voila, je ne sais pas ce qu'il peut se passer.

    Si quelqu'un a une petite idee, merci de bien vouloir eclairer ma lanterne...

    Merci d'avance, jinpol...

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    Bonsoir
    1] faire un sync en root au shell
    2] il faut chercher les fichiers (core) find / -name core -print
    (en général il faut les supprimer)
    3] il faut faire un contrôle inode du système de fichiers en mode 1
    (suivant votre fs ,fsck ou reiserfsck)
    4] il faut contrôler l'espace (partition disque) disponible au moment de la ré-indexation.
    5] il faut faire un ulimit -a pour voir si votre configuration est adaptée
    Conseil Par prudence il vaut mieux déplacer les bases par une copie globale sur une autre zone de stockage , le problème peut s'aggraver ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 138
    Points : 47
    Points
    47
    Par défaut
    Salut,

    et tout d'abord merci pour la reponse.
    Avant de faire quoique ce soit, je voudrais preciser une chose. Je peux aussi administrer ma base a partir de PGAdmin III installee sur un PC Windows. Et j'ai essaye de reindexer les bases pour lesquelles ca a plante, et la, je n'ai aucun souci. Est-ce que si je fais ca base par base depuis PGAdmin, ca ne peut pas regler le probleme plutot que de prendre le risque de l'aggraver ???

    Disons que je ne connais pas grand chose a l'administration de BD, donc je veux prendre le moins de risque possible car si je fais tout planter, je suis dans la mouise

  4. #4
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Quel intérêt de faire des réindexdb toutes les nuits ?
    A part si vraiment tu as une grosse table qui fait en permanence des insert/delete, ça n'a aucun intérêt, il n'a jamais été prouvé que ça améliorait les perfs
    J'ai déjà eu des soucis avec réindexdb notamment parce que ça pose des verrous sur les tables, et du coup tu peux te retrouver avec des traitements applicatifs en attente, qui vont jusqu'à saturer le nombre maximal de sessions autorisées et donc rendre ta base indisponible

    Sinon pour répondre à ton problème, ça sent en effet le problème de corruption des données sur le disque, vérifie avec l'administrateur système s'il n'y a pas un soucis, sinon essaie de recréer la base depuis ton dump sur un autre disque ça devrait sans doute résoudre le problème
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 138
    Points : 47
    Points
    47
    Par défaut
    Oui, c'est vrai que faire un reindex toutes les nuits n'est surement pas necessaire, et j'ai d'ailleurs deja change le script afin que cela ne se fasse plus toutes les nuits.
    Je vais en mettre un autre en place juste pour la reindexation qui se fera plus rarement.

    Sinon pour verifier les donnees sur le disk, c'est avec fsck, c'est ca ???
    Bon je dois vraiment passer pour un debutant, mais c'est normal...j'en suis un

    En tous cas merci pour ton aide.

    jinpol

Discussions similaires

  1. Plantage pendant écriture fichier *.txt
    Par Franck.H dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/02/2014, 11h45
  2. [PC fixe] plantage pendant l'installation XP
    Par eric___ dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 28/10/2012, 14h48
  3. [PC fixe] plantage pendant un jeu
    Par pop_up dans le forum Ordinateurs
    Réponses: 5
    Dernier message: 09/01/2012, 17h12
  4. Plantage d'Apache 2 pendant test identification
    Par paratge dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 02/09/2008, 15h36
  5. Plantage graphique pendant jeux
    Par DiabloZizi dans le forum Composants
    Réponses: 9
    Dernier message: 29/10/2007, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo