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 30/09/2013 11:42:03

lemjid
Membre

DUMP trop lent

Bonjour,

Je constate depuis quelques jours sur une base postgresql8.4.7 la sauvegarde met 5h21min pour une base de ~40Go ce qui est énorme et aussi gênant pour des traitement qu'on est obligé de les scheduler plus tard.
J'ai fait quelques essaie de tuning comme l'augmentation du paramètre "maintenance_work_mem" vi cron avant le lancement de la sauvegarde. Je n'ai eu aucun résultat.
Voici qq information sur mon environnement et merci d'avance de votre aide.

MemTotal:     16432980 kB
PostgreSQL 8.4.7 on x86_64-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50), 64-bit "Linux xxxxxx 2.6.18-194.el5"
checkpoint_segments = 90
checkpoint_timeout = 5min
checkpoint_completion_target = 0.9
shared_buffers = 4000MB
temp_buffers = 8MB
work_mem = 1000MB

Pour la partie système je n'ai pas rajouté l'option (noatime) dans /etc/fstab pour les FS de la base de donnée. Si ceci pourra me faire gagner du temps sur la sauvegarde je le ferai.
Merci d'avance pour votre aide.

B.LEMJID

Hors ligne

#2 30/09/2013 14:25:38

gleu
Administrateur

Re : DUMP trop lent

Il n'y a pas vraiment de paramètres dans postgresql.conf pour accélérer une sauvegarde. Elle utilise déjà toute la puissance du serveur. Avez-vous regardé ce qui vous bloquait ? CPU ? disque ?


Guillaume.

Hors ligne

#3 01/10/2013 14:50:23

lemjid
Membre

Re : DUMP trop lent

Bonjour Guillaume,

Merci beaucoup pour l’intérêt que vous avez accordé à mon post.
Je me doute bien que pour les performances postgresql c'est une association de plusieurs paramètres dans le fichier conf de plus les caractéristiques matériels et logiciels de la machine hébergeant la base...

Réponse à votre question je n'ai pas remarqué par rapport aux graphs que j'ai prélevé une saturation mémoire ou cpu, en revanche j'ai eu jusqu’à 237 locks "granted à true" dans la vue pg_loks. Ci après le query:
SELECT 'locks' AS locks,
       (SELECT count(*) FROM pg_locks WHERE granted=true) AS granted,
       (SELECT count(*) FROM pg_locks WHERE granted=false) AS waiting;
Juste pour ne pas perdre le nord. J'ai essayé de faire mon mieux pour investiguer et solutionner le problème, peut être j'ai fait fausse route...! J'aimerai bien si vous pouvez m’aiguiller pour être sur le bon chemin et ainsi atteindre le but.
D'avance merci.

Hors ligne

#4 01/10/2013 16:08:37

gleu
Administrateur

Re : DUMP trop lent

Le fait que vous ayez des verrous pendant le dump est normal. PostgreSQL s'assrange juste pour que les objets en cours de sauvegardes (tables, fonctions, vues, etc) ne soient pas supprimables pendant la sauvegarde.


Guillaume.

Hors ligne

#5 01/10/2013 22:58:00

lemjid
Membre

Re : DUMP trop lent

Alors quels sont les pistes ou les paramètres qu'il faut explorer STP.

Hors ligne

#6 02/10/2013 10:37:17

lemjid
Membre

Re : DUMP trop lent

Voici un échantillon du log bgwriter:
select 'bgwstats' as bgwstats,
       checkpoints_timed,
       checkpoints_req,
       buffers_checkpoint,
       buffers_clean,
       maxwritten_clean,
       buffers_backend,
       buffers_alloc
  from pg_stat_bgwriter
bgwstats 2329 9 1005961 9468 83 835438 35146557
bgwstats 2329 9 1005961 9468 83 835438 35146599
bgwstats 2329 9 1005961 9468 83 835438 35146599
bgwstats 2329 9 1005961 9468 83 835438 35146599
bgwstats 2329 9 1005961 9468 83 835438 35146599
bgwstats 2337 9 1007655 10449 89 835561 36007367
bgwstats 2337 9 1007655 10449 89 835561 36104104
bgwstats 2342 9 1007895 10449 89 835569 36975411
bgwstats 2342 9 1007895 10449 89 835569 36981076
bgwstats 2343 9 1008419 10449 89 837324 37027722
bgwstats 2343 9 1008419 10449 89 837538 37031873
bgwstats 2358 9 1011383 10450 89 837630 38713533
bgwstats 2358 9 1011383 10450 89 837630 38713533
bgwstats 2358 9 1011383 10450 89 837630 38713533

Bien à vous

Hors ligne

#7 02/10/2013 11:25:03

gleu
Administrateur

Re : DUMP trop lent

> Alors quels sont les pistes ou les paramètres qu'il faut explorer STP.

Déjà demandé plus haut, consommation CPU ou disque ?


Guillaume.

Hors ligne

#8 02/10/2013 18:03:35

lemjid
Membre

Re : DUMP trop lent

Bonjour,
Voici aussi un échantillon de mpstat:
02:18:32     CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
02:19:02     all    6.25    0.00    0.29    3.51    0.00    0.11    0.00   89.84   1935.68
02:19:02       0    0.03    0.00    0.07    0.10    0.00    0.00    0.00   99.80   1000.37
02:19:02       1    0.03    0.00    0.03    0.00    0.03    0.03    0.00   99.87     67.49
02:19:02       2    0.03    0.00    0.00    0.13    0.00    0.00    0.00   99.83      1.77
02:19:02       3    0.03    0.00    0.07    0.00    0.00    0.03    0.00   99.87     62.29
02:19:02       4    6.30    0.00    0.77   27.22    0.00    0.70    0.00   65.01    197.07
02:19:02       5    8.93    0.00    1.30   26.63    0.00    0.70    0.00   62.43    239.68
02:19:02       6    0.57    0.00    0.00    0.00    0.00    0.00    0.00   99.43      8.97
02:19:02       7    2.00    0.00    0.07    0.00    0.00    0.00    0.00   97.93     96.10
02:19:02       8   45.15    0.00    0.63    0.30    0.00    0.03    0.00   53.88      0.00
02:19:02       9    0.37    0.00    0.10    0.03    0.00    0.03    0.00   99.47     64.32
02:19:02      10    9.03    0.00    0.20    0.03    0.00    0.00    0.00   90.73      1.43
02:19:02      11    2.80    0.00    0.07    0.33    0.00    0.10    0.00   96.70     62.19
02:19:02      12    0.07    0.00    0.13    0.60    0.00    0.00    0.00   99.20      2.00
02:19:02      13   23.10    0.00    0.47    0.87    0.03    0.13    0.00   75.40     64.95
02:19:02      14    1.23    0.00    0.00    0.00    0.00    0.00    0.00   98.77      1.93
02:19:02      15    0.23    0.00    0.70    0.00    0.00    0.07    0.00   99.00     65.12

et ce log pour iostat:
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               9.57       410.40       533.33      12312      16000
sda2              4.60       320.00       554.53       9600      16636
sdg               9.33       473.33       525.33      14200      15760
sdg2             21.37       773.60       587.47      23208      17624
sdm               8.87       416.53       522.67      12496      15680
sdm2              4.80        74.27       526.40       2228      15792
sds               9.10       404.27       587.60      12128      17628
sds2              6.13       536.67       500.53      16100      15016
sdu               0.03         0.27         0.00          8          0
dm-0            575.13      1704.53      2168.93      51136      65068
dm-2            575.13      1704.53      2168.93      51136      65068
dm-3              2.67         0.00        10.67          0        320
dm-4             33.83      1704.80         3.60      51144        108
dm-5            517.87         0.00      2071.47          0      62144
dm-8              0.50         0.00         2.00          0         60
dm-9              0.30         0.00         1.20          0         36
dm-10             0.60         0.00         2.40          0         72
dm-11            13.63         0.00        54.53          0       1636
dm-12             1.40         0.00         5.60          0        168
dm-15             4.37         0.00        17.47          0        524
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                6.66         0.00    0.23    0.45         0.00      92.66

Merci encore pour votre attention.

Hors ligne

#9 02/10/2013 21:20:13

gleu
Administrateur

Re : DUMP trop lent

Le CPU n'a pas l'air très occupé. Par contre, niveau disque, les périphériques dm-0, dm-2, dm-4 et dm-5 sont très demandés (env. 1,7 Mo/sec en lecture, et 2,1 Mo en écriture). Ce qui n'est pas énorme non plus.


Guillaume.

Hors ligne

#10 03/10/2013 07:00:51

lemjid
Membre

Re : DUMP trop lent

En effet et ce que me rend vraiment dingue, car je ne voit pas la raison de mettre tout ce temps pour le dump. De plus via un cron j'augmente la valeur de "maintenance_work_ment" à 6GB à cette plage de dump mais ça n'a strictement rien donné et je n'ai presque rien gagné en temps!! Faut il arrêter toutes le connexions même celles qui font du "select" à cette période et ne laisser que le pg_dump travailler?

Hors ligne

#11 03/10/2013 10:58:20

lemjid
Membre

Re : DUMP trop lent

Je pense juste à une chose.
Dans la base postgresql il existe des BLOB, J'ai juste voulu faire un "\dl" sur cette base et ça met un temps fou pour répondre!
Voilà ce que j'ai comme info sur les BLOB:
=# select count(*) from pg_largeobject ;
  count
----------
12198724
=# select sum(length(lo.data)) from pg_largeobject lo;
    sum
------------
1000308488
(1 row)
Comme j'ai fait ce que j'ai pu au niveau de la base et la configuration et je n'ai rien trouvé d'anormale. A premier vu aussi Guillaume me dit presque la même chose (pour l'instant) je me demande si ce n'est pas ces vilains de BLOBs qui font que pg_dump met ce temps fou?
Merci d'avance pour votre réponse.

Hors ligne

#12 03/10/2013 20:18:34

gleu
Administrateur

Re : DUMP trop lent

Pas très étonnant pour le maintenance_work_mem, il ne sert à rien sur le pg_dump.

Pour les Large Objects, vous avez certainement raison. PostgreSQL doit les convertir en séquence d'échappement si vous utilisez le format plain (SQL, texte). Utilisez un format binaire, ça sera beaucoup plus rapide.


Guillaume.

Hors ligne

#13 03/10/2013 21:50:07

lemjid
Membre

Re : DUMP trop lent

Pour le maintenance_work_mem, vous avez entièrement raison c'est utile pour le pg_restore mais dans le doute! je l'avait fait.
Absolument pas pour le format du dump j'utilise le format custum.
j'utilise ça comme commande:
pg_dump -Fc $DB > /répertoire_destination/$DB-$DATE.dump.
Voyez vous la casse tête?

Hors ligne

#14 03/10/2013 22:54:01

gleu
Administrateur

Re : DUMP trop lent

Je vois surtout que vous n'allez pas pouvoir améliorer la vitesse de création d'un dump.


Guillaume.

Hors ligne

#15 04/10/2013 05:55:07

lemjid
Membre

Re : DUMP trop lent

C'est un comportement normale de postgresql!? plus de 5h pour 40 Go de donnée? C'est possible de m'expliquer pour quoi? Que faire alors car surtout on est devant une évolution de la base. il n y a pas d'autre alternative? Exemple migration vers V9.X ...

Hors ligne

#16 04/10/2013 14:25:29

gleu
Administrateur

Re : DUMP trop lent

Sans avoir les mains sur le serveur, c'est difficile de répondre à vos questions. Si une majorité des 40 Go sont des objets binaires, oui, ça peut être normal. Est-ce qu'une mise à jour de PostgreSQL améliorerait les choses, c'est possible. En tout cas, vous pouvez très facilement tester ça vous-même.


Guillaume.

Hors ligne

#17 04/10/2013 15:48:43

gleu
Administrateur

Re : DUMP trop lent

Je viens de penser à un truc. Si vous utilisez -Fc et que vous avez de la place disque, désactivez la compression. Il y a de fortes chances qu'elle ne serve pas à grand chose avec des objets binaires et qu'elle vous prenne beaucoup de temps.


Guillaume.

Hors ligne

#18 04/10/2013 23:45:13

lemjid
Membre

Re : DUMP trop lent

Merci Guillaume pour la réponse.
En effet le jeudi j'avais ajouté l'option -Z 2 car à ma connaissance  postgresql compresse le fichier de sauvegarde avec pg_dump. La valeur de compression par défaut est de 6 sur un échelle de 9.
C'est vrai que j'ai gagné énormément sur le temps de la sauvegarde mais j'ai eu un fichier beaucoup plus grand. Cette option à résolu partiellement mon problème vu que le fichier dump est grand. Aussi je reste toujours sur ma faim.

En revanche que voulez vous dire par désactiver la compression? est ce que c'est l'option (-Z 0) ou il y a une autres astuce?
Faut il changer la commande pg_dump c.a.d d'autres options et autre format de fichier? lequel?
Est ce que par cela on peut dire que postgresql ne peut pas faire mieux? et que mon sujet est clos!?

Merci encore pour le temps que vous m'avez accordé merci pour votre disponibilité et réactivité.

Hors ligne

#19 04/10/2013 23:50:22

gleu
Administrateur

Re : DUMP trop lent

> En revanche que voulez vous dire par désactiver la compression? est ce que c'est l'option (-Z 0) ou il y a une autres astuce?

C'est en effet l'option -Z0.

> Faut il changer la commande pg_dump c.a.d d'autres options et autre format de fichier? lequel?

Non, c'est l'option -Z0.

> Est ce que par cela on peut dire que postgresql ne peut pas faire mieux? et que mon sujet est clos!?

Faire mieux que quoi ? encore une fois, de telles questions si ouvertes ne peuvent pas vraiment avoir de réponses.


Guillaume.

Hors ligne

#20 05/10/2013 16:42:26

lemjid
Membre

Re : DUMP trop lent

Désolé d'être imprécis.
Je veux dire par cela: Sans rajouter l'option "-Z" comment peut on faire un temps correcte et aussi dump pas trop volumineux.

Hors ligne

#21 10/10/2013 13:29:40

gleu
Administrateur

Re : DUMP trop lent

Vous pouvez essayer de configurer zone_reclaim_mode à 0 (attention, paramètre linux, pas PostgreSQL).


Guillaume.

Hors ligne

#22 10/10/2013 14:48:17

lemjid
Membre

Re : DUMP trop lent

Non je ne l'ai pas fait. De plus ce paramètre n'existe même pas dans mon "sysctl.conf" faut il le rajouter?
ça mérite d'être testé. Je le ferai sur un environnement d'étude et je vous communiquerai le résultat.

Merci davance

Hors ligne

#23 10/10/2013 14:55:36

rjuju
Administrateur

Re : DUMP trop lent

Oui, en spécifiant bien le nom complet (vm.zone_reclaim_mode).

Hors ligne

#24 10/10/2013 17:55:16

lemjid
Membre

Re : DUMP trop lent

OK! Julien,

Je rappel juste ma version OS et Postgresql pour être sûre.
PostgreSQL 8.4.7 on x86_64-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50), 64-bit "Linux xxxxxx 2.6.18-194.el5"

Hors ligne

#25 10/10/2013 22:19:25

gleu
Administrateur

Re : DUMP trop lent

À priori, pour un collègue, ça a fait des miracles. J'avoue que je suis intéressé par le résultat.


Guillaume.

Hors ligne

Pied de page des forums