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 :

pg_restore prend trop de temps


Sujet :

PostgreSQL

  1. #1
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut pg_restore prend trop de temps
    Bonjour,

    J'ai fait une petite recherche sur le forum au sujet d'un problème que j'ai avec des pg_restore. Remonter un backup de 105mo me prend quasiment 45 minutes!

    J'ai cherché un peu sur le net, et modifié mes fichiers de configs pour donner plus de ressources aux tâches de maintenance (256mo) mais il semble que rien n'y fait...

    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
     
    #------------------------------------------------------------------------------
    # RESOURCE USAGE (except WAL)
    #------------------------------------------------------------------------------
     
    # - Memory -
     
    shared_buffers = 128MB			# min 128kB or max_connections*16kB
    					# (change requires restart)
    #temp_buffers = 8MB			# min 800kB
    #max_prepared_transactions = 5		# can be 0 or more
    					# (change requires restart)
    # Note:  Increasing max_prepared_transactions costs ~600 bytes of shared memory
    # per transaction slot, plus lock space (see max_locks_per_transaction).
    #work_mem = 1MB				# min 64kB
    maintenance_work_mem = 256MB		# min 1MB
    #max_stack_depth = 2MB			# min 100kB
    Je n'ai pas réussi à trouver la solution en cherchant sur le forum. Quelqu'un aurait un tuyau?

    Merci

  2. #2
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 285
    Points
    7 285
    Par défaut
    Bonjour.


    Regarde dans ton dump si tes insertions sont au format INSERT ou COPY.
    Il vaut mieux utiliser COPY pour ton dump dans la mesure où il sera reconstruit beaucoup plus vite.
    Dans le cas du INSERT, à ce qu'il me semble, il va créer une transaction pour chaque INSERT, avec tout ce qui s'en suit (écritures dans le journal de transactions etc)
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  3. #3
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Merci,

    En ouvrant le fichier au notepad, je vois bien des COPY FROM stdin en suivant pour chacune des tables, s'en suit un gros bloc illisible jusqu'au bout du fichier.

  4. #4
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 285
    Points
    7 285
    Par défaut
    Pourrais-tu préciser la commande que tu lance pour ta restauration? (paramètres etc)
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  5. #5
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Ok, je fais ça depuis pgadmin, sitôt que j'ai a nouveau le controle de la bête je poste la ligne de commande...

  6. #6
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    C'est cette syntaxe qui est utilisée, la forme minimale en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pg_restore -h <host> -p 5432 -U <user> -d <database> "C:\temp\....backup"

  7. #7
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 285
    Points
    7 285
    Par défaut
    Ta base possède t elle des triggers ou des règles d'écriture qui pourraient ralentir les insertions?

    Sinon, pourrait tu essayer avec la commande suivante?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psql -h <host> -p 5432  -U <username> -d <database> < "C:\temp\....backup"
    ?
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  8. #8
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Aucun trigger, et très peu de contraintes d'intégrité. Et aussi la base reste disponible aux applications pendant toute la phase de restauration du backup, je sais pas si le fait de la locker pourrait aider.

    Je vais essayer ta commande, je te tiens au courant.

  9. #9
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 285
    Points
    7 285
    Par défaut
    Essaye ma commande avec psql, et regarde si elle prend autant de temps.

    Si oui:
    Tu as un moyen d'essayer le pg_restore sans qu'il n'y ait q'autres requêtes qui tournent sur ta base?


    Si oui alors essaye ton pg_restore sans charge derrière.

    Si ça prend toujurs autant de temps, alors il faudra peut-être regarder les paramètres du postgresql.conf car tu peux avoir des limites logicielles trop basses pour ton application.
    http://www.varlena.com/GeneralBits/Tidbits/perf.html
    http://www.revsys.com/writings/postg...rformance.html
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

Discussions similaires

  1. classpath scanning prend trop de temps
    Par hatinfo dans le forum NetBeans
    Réponses: 0
    Dernier message: 21/02/2011, 00h12
  2. ça prend trop de temps
    Par jadey dans le forum SQL
    Réponses: 5
    Dernier message: 08/09/2007, 16h20
  3. Update qui dure beaucoup trop de temps
    Par hoaxpunk dans le forum Oracle
    Réponses: 12
    Dernier message: 04/05/2006, 23h29
  4. IIS prend trop de temps pour démarrer?
    Par Gabrielly dans le forum Autres Logiciels
    Réponses: 10
    Dernier message: 22/08/2005, 15h36
  5. [Win XP + Sp2] svchost.exe prend trop de ram
    Par Halleck dans le forum Windows XP
    Réponses: 2
    Dernier message: 13/06/2005, 14h35

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