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).

#2 Re : Installation » Postgres9.6 récupération base 9.3 » 06/09/2016 16:32:14

Merci pour la réponse, je ne pense pas que ce soit des fonctions que nous ayons mis nous même en place, ce peut être des scories de vieilles versions de postgres? (on a commencé sur du pg7.4).

#3 Installation » Postgres9.6 récupération base 9.3 » 06/09/2016 10:36:38

olivier.bouiron
Réponses : 4

Bonjour,
j'ai précédemment fait une demande pour un problème avec la lib pltcl, j'ai refait mon install avec apt-get plutôt qu'une compilation manuelle, tout va bien.

J'ai quelques erreurs qui subsistent (ou avertissements).

psql:/opt/infocentre.dat:556: ATTENTION:  la fonction en entrée du type chkpass_in ne doit pas être volatile
psql:/opt/infocentre.dat:556: ATTENTION:  la fonction en entrée du type chkpass_out ne doit pas être volatile
psql:/opt/infocentre.dat:658: ATTENTION:  la fonction en entrée du type gbtreekey16_in ne doit pas être volatile
psql:/opt/infocentre.dat:658: ATTENTION:  la fonction en entrée du type gbtreekey16_out ne doit pas être volatile
psql:/opt/infocentre.dat:702: ATTENTION:  la fonction en entrée du type gbtreekey32_in ne doit pas être volatile
psql:/opt/infocentre.dat:702: ATTENTION:  la fonction en entrée du type gbtreekey32_out ne doit pas être volatile
psql:/opt/infocentre.dat:746: ATTENTION:  la fonction en entrée du type gbtreekey4_in ne doit pas être volatile
psql:/opt/infocentre.dat:746: ATTENTION:  la fonction en entrée du type gbtreekey4_out ne doit pas être volatile
psql:/opt/infocentre.dat:790: ATTENTION:  la fonction en entrée du type gbtreekey8_in ne doit pas être volatile
psql:/opt/infocentre.dat:790: ATTENTION:  la fonction en entrée du type gbtreekey8_out ne doit pas être volatile
psql:/opt/infocentre.dat:834: ATTENTION:  la fonction en entrée du type gbtreekey_var_in ne doit pas être volatile
psql:/opt/infocentre.dat:834: ATTENTION:  la fonction en entrée du type gbtreekey_var_out ne doit pas être volatile
psql:/opt/infocentre.dat:878: ATTENTION:  la fonction en entrée du type ghstore_in ne doit pas être volatile
psql:/opt/infocentre.dat:878: ATTENTION:  la fonction en entrée du type ghstore_out ne doit pas être volatile
psql:/opt/infocentre.dat:922: ATTENTION:  la fonction en entrée du type gtrgm_in ne doit pas être volatile
psql:/opt/infocentre.dat:922: ATTENTION:  la fonction en entrée du type gtrgm_out ne doit pas être volatile
psql:/opt/infocentre.dat:996: ATTENTION:  la fonction en entrée du type hstore_in ne doit pas être volatile
psql:/opt/infocentre.dat:996: ATTENTION:  la fonction en entrée du type hstore_out ne doit pas être volatile
psql:/opt/infocentre.dat:1093: ATTENTION:  la fonction en entrée du type lquery_in ne doit pas être volatile
psql:/opt/infocentre.dat:1093: ATTENTION:  la fonction en entrée du type lquery_out ne doit pas être volatile
psql:/opt/infocentre.dat:1137: ATTENTION:  la fonction en entrée du type ltree_in ne doit pas être volatile
psql:/opt/infocentre.dat:1137: ATTENTION:  la fonction en entrée du type ltree_out ne doit pas être volatile
psql:/opt/infocentre.dat:1181: ATTENTION:  la fonction en entrée du type ltree_gist_in ne doit pas être volatile
psql:/opt/infocentre.dat:1181: ATTENTION:  la fonction en entrée du type ltree_gist_out ne doit pas être volatile
psql:/opt/infocentre.dat:1225: ATTENTION:  la fonction en entrée du type ltxtq_in ne doit pas être volatile
psql:/opt/infocentre.dat:1225: ATTENTION:  la fonction en entrée du type ltxtq_out ne doit pas être volatile
psql:/opt/infocentre.dat:25109: ERREUR:  erreur de syntaxe sur ou près de « => »
LIGNE 1 : CREATE OPERATOR => (
                          ^
psql:/opt/infocentre.dat:25112: ERREUR:  erreur de syntaxe sur ou près de « => »
LIGNE 1 : ALTER OPERATOR public.=> (text, text) OWNER TO postgres;

Je vous donne le code de la fonction create:

CREATE OPERATOR => (
    PROCEDURE = tconvert,
    LEFTARG = text,
    RIGHTARG = text
);

Une idée? et que penser des alertes au dessus concernant le "volatile"?
Le code par exemple pour ltxtq_out:

CREATE FUNCTION ltxtq_out(ltxtquery) RETURNS cstring
    LANGUAGE c STRICT
    AS '$libdir/ltree', 'ltxtq_out';


ALTER FUNCTION public.ltxtq_out(ltxtquery) OWNER TO postgres;

Merci par avance.

Olivier

#4 Re : Installation » Postgres9.6: pltcl » 05/09/2016 09:32:36

Merci pour vos réponses.
Effectivement je n'avais pas ajouté l'option --with-tcl, mais si je peux faire un apt-get c'est encore mieux, merci Julien.

#5 Installation » Postgres9.6: pltcl » 02/09/2016 09:59:31

olivier.bouiron
Réponses : 3

Bonjour,

J'ai installé postgres9.6 pour faire quelques tests sur cette version (installation via code source sous debian car pas de packets dispo).
J'ai ces erreurs lors d'un psql -f avec un de mes dumps :

psql:/opt/infocentre.dat:345: ERROR:  could not open extension control file "/usr/local/pgsql/share/extension/pltcl.control": Aucun fichier ou dossier de ce type
psql:/opt/infocentre.dat:352: ERROR:  extension "pltcl" does not exist
...

Or si je liste les extensions dispo dans le repertoire contrib de mes sources j'ai:

adminpack     btree_gin   contrib-global.mk  dict_xsyn	    hstore	     intarray  ltree_plpython  passwordcheck	pg_prewarm	    pgstattuple    README   sslinfo	   test_decoding    unaccent
auth_delay    btree_gist  cube		     earthdistance  hstore_plperl    isn       Makefile        pg_buffercache	pgrowlocks	    pg_trgm	   seg	    start-scripts  tsearch2	    uuid-ossp
auto_explain  chkpass	  dblink	     file_fdw	    hstore_plpython  lo        oid2name        pgcrypto		pg_standby	    pg_visibility  sepgsql  tablefunc	   tsm_system_rows  vacuumlo
bloom	      citext	  dict_int	     fuzzystrmatch  intagg	     ltree     pageinspect     pg_freespacemap	pg_stat_statements  postgres_fdw   spi	    tcn		   tsm_system_time  xml2

Pas de pltcl à l'horizon...

Quelle extension dois-je utiliser svp?

Merci par avance,

Olivier Bouiron

#6 Re : Optimisation » PgAdmin et Postgres 9.6 vs 9.3 » 18/08/2016 15:15:19

rjuju a écrit :

Surtout que l'écart de temps est probablement du au contenu des données (transit réseau, affichage dans pgAdmin) plutôt qu'au traitement de la requête par le serveur.

Ce sont les mêmes datas qui sont renvoyées, j'ai ajouté un order by pour prendre les mêmes lignes.
Aprés, c'est vrai que ce n'est pas trés important mais c'était par curiosité.

#7 Re : Optimisation » PgAdmin et Postgres 9.6 vs 9.3 » 18/08/2016 14:12:17

Effectivement, mais c'est justement ça qui me surprends, c'est que l'execution est quasi la même sur les deux serveurs, mais que le rappatriement des datas via pgadmin prends 2x plus de temps sur le serveur 9.3.

#8 Re : Optimisation » PgAdmin et Postgres 9.6 vs 9.3 » 18/08/2016 12:28:31

Désolé je viens de voir que je ne suis pas dans la partie pgadmin...

#9 Optimisation » PgAdmin et Postgres 9.6 vs 9.3 » 18/08/2016 12:25:33

olivier.bouiron
Réponses : 6

Bonjour,
Notre base de prod étant en 9.3, nous planifions une mise à jour en fin d'année vers la 9.6 si la roadmap est tenue...
On a donc préparé un serveur de tests en 9.6: les conditions sont similaires au niveau du postgresql.conf, les deux serveurs sont sous debian (mais versions de debian différentes).
Par contre grosse différence: la 9.6 tourne sur des disques 7k tours en raid 5 alors que la 9.3 est sur du ssd.

J’exécute une même requête:

select * from premio_presc_v2 a inner join dsi_presc_cycle b on a.id=b.idpres inner join premio_presc_jour_produit c on c.idcycle=b.id where a.nip=200903667 and b.cycle=2 limit 10;

Sous 9.6 ça prends 13ms pour afficher le resultat dans pg_admin
Sous 9.3 ça prends 22ms pour afficher le resultat dans pg_admin

Le explain analyze en 9.6 donne:

 Limit  (cost=1.14..18.45 rows=5 width=1439) (actual time=0.059..0.085 rows=10 loops=1)
   ->  Nested Loop  (cost=1.14..18.45 rows=5 width=1439) (actual time=0.057..0.083 rows=10 loops=1)
         ->  Nested Loop  (cost=0.71..13.53 rows=1 width=986) (actual time=0.042..0.042 rows=1 loops=1)
               ->  Index Scan using idx_presc_premio_nip on premio_presc_v2 a  (cost=0.29..5.41 rows=2 width=577) (actual time=0.017..0.017 rows=1 loops=1)
                     Index Cond: (nip = 200903667)
               ->  Index Scan using idx_dsi_cycle on dsi_presc_cycle b  (cost=0.42..4.05 rows=1 width=409) (actual time=0.019..0.019 rows=1 loops=1)
                     Index Cond: (idpres = a.id)
                     Filter: (cycle = 2)
                     Rows Removed by Filter: 2
         ->  Index Scan using idx_presc_jour_premio1 on premio_presc_jour_produit c  (cost=0.43..4.58 rows=34 width=453) (actual time=0.011..0.022 rows=10 loops=1)
               Index Cond: (idcycle = b.id)
 Planning time: 1.645 ms
 Execution time: 0.480 ms

et le explain analyze en 9.3 donne:

Limit  (cost=1.14..13.53 rows=5 width=1447) (actual time=0.040..0.055 rows=10 loops=1)
   ->  Nested Loop  (cost=1.14..13.53 rows=5 width=1447) (actual time=0.040..0.054 rows=10 loops=1)
         ->  Nested Loop  (cost=0.71..9.79 rows=1 width=994) (actual time=0.027..0.027 rows=1 loops=1)
               ->  Index Scan using idx_presc_premio_nip on premio_presc_v2 a  (cost=0.29..3.91 rows=2 width=577) (actual time=0.012..0.012 rows=1 loops=1)
                     Index Cond: (nip = 200903667)
               ->  Index Scan using idx_dsi_cycle on dsi_presc_cycle b  (cost=0.42..2.93 rows=1 width=417) (actual time=0.013..0.013 rows=1 loops=1)
                     Index Cond: (idpres = a.id)
                     Filter: (cycle = 2)
                     Rows Removed by Filter: 2
         ->  Index Scan using idx_presc_jour_premio1 on premio_presc_jour_produit c  (cost=0.43..3.48 rows=26 width=453) (actual time=0.010..0.020 rows=10 loops=1)
               Index Cond: (idcycle = b.id)
 Total runtime: 0.178 ms

Sauriez-vous pourquoi pgadmin prends plus de temps à afficher le résultat depuis la 9.3 alors que normalement, les requêtes devraient être plus rapide sur la 9.3 (cf explain), ce qui d'ailleurs se vérifie par exemple via une connexion jdbc: la requête en 9.3 prends 3ms, tandis qu'en 9.6, c'est 4ms.

Question annexe: est-on censé gagner sérieusement en perf en passant de la 9.3 à la 9.6?

#10 Re : Général » Taille d'une table » 12/08/2016 23:35:40

Bonjour Guillaume,
Je comprends mieux, c'est bien ce qui s'est passé.
Au final mes colonnes à null ne prennent donc qu'une place insignifiante alors si je comprends bien.

Merci pour votre aide!

Cordialement

#11 Re : Général » Taille d'une table » 12/08/2016 18:08:53

Déjà une table avec une cinquantaine de colonnes il y a très probablement un problème de modélisation.
Merci pour votre commentaire, mais en toute franchise je ne pense pas qu'il soit pertinent.
Il vous faudrait un minimum de connaissance de la fonction de cette table pour formuler un avis...
Je vous remercie quand même de vouloir etre utile.
-------------
Pour en revenir au problème initial:
Une chose m'étonne concernant la taille de la table :
Je crée une table avec 10 millions d'enregistrements: sa taille est T1
Je lui ajoute 10 colonnes de type bigint, sa taille reste T1, j'aurais pensé que ça gonfle pourtant.
Enfin, je fait un update de ces 10 colonnes en mettant tout à null et là la taille explose ...

Quand on ajoute des colonnes, la valeur de ces cellules créées n'est donc pas null, qu'est-ce alors?

#12 Re : Général » Taille d'une table » 12/08/2016 12:46:50

Merci pour la réponse, c'est intéressant mais complexe pour les non initiés...
En fait ma réflexion portait sur une table que j'ai contenant 18 millions d'enregistrements (4,1G de table et 3.9G d'index).

Il y a une cinquantaine de colonnes dont une trentaine de type int, text ou timestamp la plupart du temps à null (95% des lignes ont ces colonnes à null).

Si je comprends bien, je gagnerai de l'espace à créer une table annexe pointant par id la première table et sur laquelle je mettrai la trentaine de colonnes ?

#13 Général » Taille d'une table » 11/08/2016 17:38:14

olivier.bouiron
Réponses : 6

Bonjour,

Une question: si je crée une table :
CREATE TABLE test.table1
(
  c1 double precision,
  c2 bigint,
  c3 double precision
)WITH (  OIDS=FALSE );
ALTER TABLE test.table1  OWNER TO postgres;

Et que j'insere 18 400 000 de lignes en mettant tout à null, ma table fait : 989MB.
Je pensais que si les valeurs étaient nulles on ne perdait pas de place...
Plus étrange, si j'enleve les colonnes c2 et c3, la taille passe à 495MB, soit la moitié, alors que j'ai retiré deux colonnes sur trois.

Enfin, j'ai tenté des calculs, si il y avait des infos dans ces colonnes au lieu de null:
18 400 000 * ( 8 bits + 8 bits + 8 bits, soit 24 bits ) = 421Mo de datas

Au lieu des 421Mo j'ai 989Mo et en plus c'est tout null...

Quelqu'un saurait m'expliquer svp?

Merci!

Olivier B.

#14 Re : Général » pg_stat_activity » 29/07/2015 11:41:21

Il s'agit de clients java lourds (swing) donc pas de pool.
Je vais lire la doc que vous m'avez donnez en lien, merci.

#15 Général » pg_stat_activity » 29/07/2015 11:03:55

olivier.bouiron
Réponses : 3

Bonjour,

Je connecte des clients à postgres depuis une appli java via JDBC.
Une connection par client, la connection reste toujours active.

Cependant par moment je ne vois pas certains clients dans pg_stat_activity puis ils réapparaissent.

Il me semblait que cette vue permettait d'avoir la liste des backend avec leur pid.
Est-il possible qu'un client garde une connection acteve via jdbc mais n'apparaisse pas dans pg_stat_activity? (par exemple s'il ne fait pas de requetes pendant quelques secondes)?

De plus imaginons que j'ai des coupures réseaux, quelle durée faut il pour que le client n'apparaisse plus dans pg_stat_activity? c'est immédiat des que la personne n'est plus sur le reseau ou il y a un temps défini?

Merci pour votre aide.

Olivier Bouiron

#16 Re : Général » TopMemoryContext récurrent » 29/06/2015 16:21:18

C'est donc assez complexe...
Je vais travailler à une simulation pg_bench assez proche de la réalité et régler mes parametres à taton alors.

Merci pour votre aide !

#17 Re : Général » TopMemoryContext récurrent » 29/06/2015 13:39:05

Dommage...
Du coups, pour info, si j'ai par exemple:
select * from a inner join b on a.id=b.id inner join c on c.id_a=a.id and c.num>2 where a.code='mon code' and c.code='autre code' order by a.id
Je compterai :
=> 2 inner join=2 work_mem
=> 2 conditions dans le where = 2 work_mem
=> 1 order by = 1 work_mem
Soit 5 work_mem au total?

#18 Re : Général » TopMemoryContext récurrent » 29/06/2015 12:16:30

Je comprends.
Merci pour votre aide, je pense que ça va résoudre le problème!

Par contre deux questions:

si je veux correctement estimer ma conso max, c'est bien:
shared_mem+ (nb de workers*maintenance_mem) + (max_connexions*work_mem*nb_max de work_mem par requete) ? Sachant que le nombre de work_mem par requete est dur à estimer pour faire une estimation max... ?

ça m'amène à la question 2: est-il possible d'afficher un graphe de l'utilisation des work_mem, un graphe de la shared, et un des maintenance dans un outil du genre pg_badger par exemple?

#19 Re : Général » TopMemoryContext récurrent » 29/06/2015 11:46:10

C'est utile du coups de le laisser à 2?
C'est pas mieux de repasser sur un overcommit par défaut à 0 finalement?

#20 Re : Général » TopMemoryContext récurrent » 29/06/2015 10:54:27

J'ai ceci:

vm.overcommit_memory = 2
vm.overcommit_ratio = 50

#21 Re : Général » TopMemoryContext récurrent » 26/06/2015 15:43:16

Je rajoute une info: j'ai fais un petit test: repasser à 8GB de shared, je plante dans les 30 secondes.
Donc augmenter le shared fait empirer les choses... Ca rejoint ce que disait Julien.

Je stoppe pgcluu au moment du plantage et j'ai ceci dans la vue memory:
15.34 GB Total memory
4.25 GB Free memory
113.46 MB Buffers
10.54 GB Cached
1.95 GB Total swap
1.95 GB Free swap
1.75 GB Shared memory
9.62 GB Commit limit
8.58 GB Committed

On a là 4.25GB libre et un cache à 10.54 donc on semble pas à la rue coté ram...
pgbadger me donne un pic de 17query/s (je trace uniquement les >20ms).

#22 Re : Général » TopMemoryContext récurrent » 26/06/2015 13:39:26

C'est postgres 9.3.6.

En fait ce n'est pas toujours la même requete, par contre du moment ou on en a une qui passe en out of memory, dans la foulée le fichier logs se rempli à vitesse grand V de nouvelles requetes différentes passant en out of memory et sur des clients distincts. (8000 out of memory sur 90 minutes !)

J'ai lancé un free -m quand se produisait le out of memory: pas de swap et pres de 10GB free.

à moins que ponctuellement sur quelques millisecondes toute la ram soit full puis libérée et que mon free -m passe donc à coté...
cependant je verrais du swap non?

C'est ça qui est étonnant, pas de swap et de la ram dispo alors que out of memory...

Je fournis quand même le explain de cette requete:

QUERY PLAN
Sort  (cost=321.47..321.48 rows=3 width=186) (actual time=0.028..0.028 rows=0 loops=1)
  Sort Key: a.nip, a.depart
  Sort Method: quicksort  Memory: 25kB
  Buffers: shared hit=2
  ->  Nested Loop Left Join  (cost=19.75..321.45 rows=3 width=186) (actual time=0.019..0.019 rows=0 loops=1)
        Buffers: shared hit=2
        ->  Nested Loop Left Join  (cost=19.33..70.65 rows=3 width=168) (actual time=0.018..0.018 rows=0 loops=1)
              Buffers: shared hit=2
              ->  Bitmap Heap Scan on dsi_planning_salle_attente_secteur a  (cost=2.48..8.02 rows=3 width=152) (actual time=0.018..0.018 rows=0 loops=1)
                    Recheck Cond: ((idsecteur = 2) AND (depart <= 1435355999999::bigint))
                    Filter: ((fin > 1435269600000::bigint) OR (fin IS NULL))
                    Buffers: shared hit=2
                    ->  Bitmap Index Scan on idx_planning_sa_secteur_id_dates  (cost=0.00..2.48 rows=4 width=0) (actual time=0.016..0.016 rows=0 loops=1)
                          Index Cond: ((idsecteur = 2) AND (depart <= 1435355999999::bigint))
                          Buffers: shared hit=2
              ->  Index Scan using idx_agenda_planning_lit_id on dsi_agenda_planning_lit d  (cost=16.85..20.87 rows=1 width=24) (never executed)
                    Index Cond: (id = (SubPlan 6))
                    Filter: (nip = a.nip)
                    SubPlan 6
                      ->  Aggregate  (cost=16.55..16.56 rows=1 width=4) (never executed)
                            ->  Index Scan using index_dsi_agenda_planning_lit_nip on dsi_agenda_planning_lit f  (cost=0.29..16.54 rows=1 width=4) (never executed)
                                  Index Cond: (nip = a.nip)
                                  Filter: ((depart < 1435355999999::bigint) AND ((depart > 1435269600000::bigint) OR (depart IS NULL)))
                    SubPlan 6
                      ->  Aggregate  (cost=16.55..16.56 rows=1 width=4) (never executed)
                            ->  Index Scan using index_dsi_agenda_planning_lit_nip on dsi_agenda_planning_lit f  (cost=0.29..16.54 rows=1 width=4) (never executed)
                                  Index Cond: (nip = a.nip)
                                  Filter: ((depart < 1435355999999::bigint) AND ((depart > 1435269600000::bigint) OR (depart IS NULL)))
        ->  Index Scan using agenda_agenda_pk on agenda_agenda e  (cost=0.42..1.61 rows=1 width=18) (never executed)
              Index Cond: (id = d.id)
        SubPlan 1
          ->  Aggregate  (cost=18.98..18.99 rows=1 width=248) (never executed)
                ->  Bitmap Heap Scan on dsi_planning_lit z  (cost=4.97..18.98 rows=1 width=248) (never executed)
                      Recheck Cond: (((nip = a.nip) AND (depart >= a.fin)) OR ((nip = a.nip) AND (depart < a.fin) AND (fin > 0) AND (fin > a.fin)))
                      Filter: ((('1970-01-01 01:00:00+01'::timestamp with time zone + (((depart / 1000))::double precision * '00:00:01'::interval)))::date = (('1970-01-01 01:00:00+01'::timestamp with time zone + (((a.fin / 1000))::double precision * '00:00:01'::interval)))::date)
                      ->  BitmapOr  (cost=4.97..4.97 rows=7 width=0) (never executed)
                            ->  Bitmap Index Scan on idx_planning_lit_4  (cost=0.00..2.47 rows=5 width=0) (never executed)
                                  Index Cond: ((nip = a.nip) AND (depart >= a.fin))
                            ->  Bitmap Index Scan on idx_planning_lit_4  (cost=0.00..2.50 rows=2 width=0) (never executed)
                                  Index Cond: ((nip = a.nip) AND (depart < a.fin) AND (fin > 0) AND (fin > a.fin))
        SubPlan 2
          ->  Aggregate  (cost=12.06..12.07 rows=1 width=248) (never executed)
                ->  Index Scan using idx_planning_lit_4 on dsi_planning_lit z_1  (cost=0.42..12.05 rows=1 width=248) (never executed)
                      Index Cond: ((nip = a.nip) AND (depart < a.depart))
                      Filter: ((('1970-01-01 01:00:00+01'::timestamp with time zone + (((fin / 1000))::double precision * '00:00:01'::interval)))::date = (('1970-01-01 01:00:00+01'::timestamp with time zone + (((a.depart / 1000))::double precision * '00:00:01'::interval)))::date)
        SubPlan 3
          ->  Aggregate  (cost=21.69..21.70 rows=1 width=377) (never executed)
                ->  Nested Loop Left Join  (cost=1.42..21.69 rows=1 width=377) (never executed)
                      ->  Nested Loop  (cost=1.28..21.52 rows=1 width=368) (never executed)
                            ->  Nested Loop  (cost=1.14..21.35 rows=1 width=358) (never executed)
                                  Join Filter: ((a_1.dateko IS NULL) OR (a_1.dateko > CASE WHEN (c.datereelle IS NULL) THEN c.datetheo ELSE c.datereelle END))
                                  ->  Nested Loop  (cost=0.71..15.62 rows=5 width=293) (never executed)
                                        ->  Index Scan using idx_presc_premio_nip on premio_presc_v2 a_1  (cost=0.29..6.01 rows=2 width=273) (never executed)
                                              Index Cond: (nip = a.nip)
                                              Filter: (dateko IS NULL)
                                        ->  Index Scan using idx_dsi_cycle on dsi_presc_cycle b  (cost=0.42..4.78 rows=3 width=24) (never executed)
                                              Index Cond: (idpres = a_1.id)
                                              Filter: (etat = 2)
                                  ->  Index Scan using idx_premio_jour_5 on premio_presc_jour_produit c  (cost=0.43..1.13 rows=1 width=73) (never executed)
                                        Index Cond: (idcycle = b.id)
                                        Filter: (CASE WHEN (datereelle IS NULL) THEN datetheo ELSE datereelle END = (('1970-01-01 01:00:00+01'::timestamp with time zone + (((a.depart / 1000))::double precision * '00:00:01'::interval)))::date)
                            ->  Index Scan using pk_id_voieadm on dsi_med_code_voieadmin d_1  (cost=0.14..0.16 rows=1 width=18) (never executed)
                                  Index Cond: (id = c.idvoieadm)
                      ->  Index Scan using pk_id_voieabord on dsi_med_code_voieadmin_abord e_1  (cost=0.14..0.16 rows=1 width=17) (never executed)
                            Index Cond: (id = c.idvoieabord)
        SubPlan 4
          ->  Aggregate  (cost=7.47..7.48 rows=1 width=220) (never executed)
                ->  Bitmap Heap Scan on agenda_agenda z_2  (cost=5.45..7.46 rows=1 width=220) (never executed)
                      Recheck Cond: ((depart = d.date_rdz) AND (nip = a.nip))
                      Filter: (idress = d.id_ressource)
                      ->  BitmapAnd  (cost=5.45..5.45 rows=1 width=0) (never executed)
                            ->  Bitmap Index Scan on agenda_idx_date  (cost=0.00..2.49 rows=9 width=0) (never executed)
                                  Index Cond: (depart = d.date_rdz)
                            ->  Bitmap Index Scan on index_agenda_nip  (cost=0.00..2.70 rows=37 width=0) (never executed)
                                  Index Cond: (nip = a.nip)
        SubPlan 5
          ->  Aggregate  (cost=21.69..21.70 rows=1 width=377) (never executed)
                ->  Nested Loop Left Join  (cost=1.42..21.69 rows=1 width=377) (never executed)
                      ->  Nested Loop  (cost=1.28..21.52 rows=1 width=368) (never executed)
                            ->  Nested Loop  (cost=1.14..21.35 rows=1 width=358) (never executed)
                                  Join Filter: ((a_2.dateko IS NULL) OR (a_2.dateko > CASE WHEN (c_1.datereelle IS NULL) THEN c_1.datetheo ELSE c_1.datereelle END))
                                  ->  Nested Loop  (cost=0.71..15.62 rows=5 width=293) (never executed)
                                        ->  Index Scan using idx_presc_premio_nip on premio_presc_v2 a_2  (cost=0.29..6.01 rows=2 width=273) (never executed)
                                              Index Cond: (nip = a.nip)
                                              Filter: (dateko IS NULL)
                                        ->  Index Scan using idx_dsi_cycle on dsi_presc_cycle b_1  (cost=0.42..4.78 rows=3 width=24) (never executed)
                                              Index Cond: (idpres = a_2.id)
                                              Filter: (etat = 2)
                                  ->  Index Scan using idx_premio_jour_5 on premio_presc_jour_produit c_1  (cost=0.43..1.13 rows=1 width=73) (never executed)
                                        Index Cond: (idcycle = b_1.id)
                                        Filter: (CASE WHEN (datereelle IS NULL) THEN datetheo ELSE datereelle END = (('1970-01-01 01:00:00+01'::timestamp with time zone + (((a.depart / 1000))::double precision * '00:00:01'::interval)))::date)
                            ->  Index Scan using pk_id_voieadm on dsi_med_code_voieadmin d_2  (cost=0.14..0.16 rows=1 width=18) (never executed)
                                  Index Cond: (id = c_1.idvoieadm)
                      ->  Index Scan using pk_id_voieabord on dsi_med_code_voieadmin_abord e_2  (cost=0.14..0.16 rows=1 width=17) (never executed)
                            Index Cond: (id = c_1.idvoieabord)
Total runtime: 0.803 ms

#23 Général » TopMemoryContext récurrent » 26/06/2015 11:52:53

olivier.bouiron
Réponses : 13

Bonjour, je fais face régulièrement à des TopMemoryContext sur mon serveur postgres , obligé à chaque fois de faire un restart pour que tout rentre dans l'ordre.

J'ai beau chercher, je ne comprends pas le pourquoi du problème.

C'est aléatoire... par contre à ma grande surprise hier j'ai changé le shared_buffers à 7GB au lieu des 4GB habituels, et ce matin, 3 plantages similaires, cette fois-ci le restart ne corrigeait le problème que quelques minutes puis ça recommençait...  jusqu’à ce que je repasse à 4GB, et là c'est revenu à la normale.

Pourtant free -m montrait aucun swap et plusieurs GB encore free.

Je précise que à 4GB de sharred j'ai environ un plantage par semaine de ce type.

Ma config:
Postgresql 9.3.6 64bits sur debian wheezy virtualisé sous vmware, dédié à postgres.
Ram : 16GB
Taille de la base: 35GB

config postgres:
shared_buffers = 4GB
work_mem=4MB
maintenance_WM=256MB
max_stack_depth=4MB

J'ai analysé les logs du jour du plantage: pas de pics de requêtes, ou de connexions au moment des plantages.

Que veut dire topmemorycontext? le passage à 7GB de shared_buffers peut-il réellement avoir une incidence négative??

Voici une des traces d'erreur:

Date: 2015-06-26 08:53:01
Detail: Failed on request of size 4240.
Statement: select a.log_user_cre, a.oid, a.provenance, a.type_entree_planification, a.type_prevision_sortie,a.nip,a.depart,a.fin,if('dsi_planning_salle_attente_secteur'='dsi_planning_salle_attente_secteur' and ((select count(z.*)>0 from dsi_planning_lit z where z.nip = a.nip and (z.depart >= a.fin or (z.depart<a.fin and z.fin>0 and z.fin >a.fin) ) and cast(gc2pg(z.depart) AS date) = cast(gc2pg(a.fin) as date))or (a.etat = 0 and (select count(z.*)>0 from dsi_planning_lit z where z.nip = a.nip and (z.depart < a.depart ) and cast(gc2pg(z.fin) AS date) = cast(gc2pg(a.depart) as date)))),3,a.etat) AS etat,a.commentaire,a.motif,a.demande,a.motif2,a.motif3, a.degre_autonomie, a.idsecteur, frenchtime(a.date_creation_planif) AS fdDateCreation, a.liste_permission, a.destination, a.chambre_particuliere ,d.id AS idOriginePlanning ,if((select count(z.*)=0 from vue_premio_presc_detail_toppe z where z.nip = a.nip and z.dateadm = cast(gc2pg(a.depart) as date) and z.dateko is null) and (cast(e.depart as date)!=cast(gc2pg(a.depart) as date) or (d.date_rdz is not null and e.id is null and (select count(z.*)=0 from agenda_agenda z where z.idress= d.id_ressource and z.nip = a.nip and z.depart = d.date_rdz))),-1,if((select count(z.*)=0 from vue_premio_presc_detail_toppe z where z.nip = a.nip and z.dateadm = cast(gc2pg(a.depart) as date) and z.dateko is null) ,null,e.etat)) AS etatRdz from dsi_planning_salle_attente_secteur a left join dsi_agenda_planning_lit d ON d.nip = a.nip and d.id=(select min(f.id) from dsi_agenda_planning_lit f where f.nip = a.nip and if(1435355999999 is null, true, f.depart< 1435355999999) and (f.depart > 1435269600000 or f.depart is null )  ) left join agenda_agenda e on e.id = d.id where if(1435355999999 is null, true, a.depart<= 1435355999999) and (a.fin > 1435269600000 or a.fin is null ) and a.idsecteur in (2) order by a.nip,a.depart
TopMemoryContext: 221952 total in 17 blocks; 18952 free (56 chunks); 203000 used
  TopTransactionContext: 8192 total in 1 blocks; 7392 free (0 chunks); 800 used
  Type information cache: 24240 total in 2 blocks; 3744 free (0 chunks); 20496 used
  Operator lookup cache: 24576 total in 2 blocks; 11888 free (5 chunks); 12688 used
  TableSpace cache: 8192 total in 1 blocks; 3216 free (0 chunks); 4976 used
  MessageContext: 16544 total in 2 blocks; 2328 free (3 chunks); 14216 used
  Operator class cache: 8192 total in 1 blocks; 1680 free (0 chunks); 6512 used
  smgr relation table: 24576 total in 2 blocks; 5696 free (4 chunks); 18880 used
  TransactionAbortContext: 32768 total in 1 blocks; 32736 free (0 chunks); 32 used
  Portal hash: 8192 total in 1 blocks; 1680 free (0 chunks); 6512 used
  PortalMemory: 8192 total in 1 blocks; 7888 free (0 chunks); 304 used
    PortalHeapMemory: 1024 total in 1 blocks; 848 free (0 chunks); 176 used
  Relcache by OID: 24576 total in 2 blocks; 11792 free (3 chunks); 12784 used
  CacheMemoryContext: 1342128 total in 21 blocks; 4256 free (3 chunks); 1337872 used
    CachedPlanSource: 3072 total in 2 blocks; 352 free (0 chunks); 2720 used
      unnamed prepared statement: 24576 total in 2 blocks; 15904 free (2 chunks); 8672 used
    idx_planning_salleattente_1: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_dsi_planning_secteur_idsecteur_depart_fin: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    idx_planning_secteur_1: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    idx_planning_secteur_0: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_idx_planning_chambre_0_idchambre_deb_fin: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    index_dsi_planning_chambre_depart_fin: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    idx_planning_chambre_0: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_dsi_code_lit_id: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_dsi_code_chambre_id: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_dsi_code_secteur_id: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pk_bugzilla_utilisateur: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_adm_param_type: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_adm_param_param: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    EventTriggerCache: 8192 total in 1 blocks; 8160 free (2 chunks); 32 used
      Event Trigger Cache: 8192 total in 1 blocks; 3744 free (0 chunks); 4448 used
    dextr_date_extraction_pkey: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    idx_quicklinks: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    idx_util_work_mem: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    index_prog_connexion_logs_users_connexion: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    index_prog_connexion_pid: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    prog_connexion_pkey: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_prog_utilisateur_preference_cle_login: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    index_prog_group_utilisateur_utilisateur: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_prog_appli_group_groupe: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pk_prog_appli_group_groupe: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_toast_2619_index: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    index_prog_utilisateur_code: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    prog_utilisateur_password_index_for_ldap: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_prog_utilisateur_id: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    unik_prog_util_login: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    unik_prog_util_code: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pk_prog_utilisateur_initiales: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pk_pro_util_id: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    index_adm_code_entite_code: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pkeycode: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_index_indrelid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_attrdef_adrelid_adnum_index: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    pg_db_role_setting_databaseid_rol_index: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    pg_opclass_am_name_nsp_index: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    pg_foreign_data_wrapper_name_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_enum_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_class_relname_nsp_index: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    pg_foreign_server_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_statistic_relid_att_inh_index: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    pg_cast_source_target_index: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    pg_language_name_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_collation_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_amop_fam_strat_index: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    pg_index_indexrelid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_ts_template_tmplname_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_ts_config_map_index: 3072 total in 2 blocks; 1784 free (2 chunks); 1288 used
    pg_opclass_oid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_foreign_data_wrapper_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_event_trigger_evtname_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_ts_dict_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_event_trigger_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_conversion_default_index: 3072 total in 2 blocks; 1784 free (2 chunks); 1288 used
    pg_operator_oprname_l_r_n_index: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    pg_trigger_tgrelid_tgname_index: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    pg_enum_typid_label_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_ts_config_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_user_mapping_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_opfamily_am_name_nsp_index: 3072 total in 2 blocks; 1784 free (2 chunks); 1288 used
    pg_foreign_table_relid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_type_oid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_aggregate_fnoid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_constraint_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_rewrite_rel_rulename_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_ts_parser_prsname_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_ts_config_cfgname_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_ts_parser_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_operator_oid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_namespace_nspname_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_ts_template_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_amop_opr_fam_index: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    pg_default_acl_role_nsp_obj_index: 3072 total in 2 blocks; 1784 free (2 chunks); 1288 used
    pg_collation_name_enc_nsp_index: 3072 total in 2 blocks; 1784 free (2 chunks); 1288 used
    pg_range_rngtypid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_ts_dict_dictname_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_type_typname_nsp_index: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    pg_opfamily_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_class_oid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_proc_proname_args_nsp_index: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    pg_attribute_relid_attnum_index: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    pg_proc_oid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_language_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_namespace_oid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_amproc_fam_proc_index: 3072 total in 2 blocks; 1736 free (2 chunks); 1336 used
    pg_foreign_server_name_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_attribute_relid_attnam_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_conversion_oid_index: 1024 total in 1 blocks; 200 free (0 chunks); 824 used
    pg_user_mapping_user_server_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_conversion_name_nsp_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_authid_oid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_auth_members_member_role_index: 1024 total in 1 blocks; 16 free (0 chunks); 1008 used
    pg_tablespace_oid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_database_datname_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_auth_members_role_member_index: 1024 total in 1 blocks; 64 free (0 chunks); 960 used
    pg_database_oid_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
    pg_authid_rolname_index: 1024 total in 1 blocks; 152 free (0 chunks); 872 used
  MdSmgr: 8192 total in 1 blocks; 6176 free (0 chunks); 2016 used
  ident parser context: 0 total in 0 blocks; 0 free (0 chunks); 0 used
  hba parser context: 15360 total in 4 blocks; 6544 free (2 chunks); 8816 used
  LOCALLOCK hash: 24576 total in 2 blocks; 13920 free (4 chunks); 10656 used
  Timezones: 83472 total in 2 blocks; 3744 free (0 chunks); 79728 used
  ErrorContext: 8192 total in 1 blocks; 8160 free (0 chunks); 32 used
Database: infocentre User: amedic Remote:

J'étais à la journée workshop dalibo la semaine derniere, j'ai tenté d'analyser les logs avec pg_badger mais rien ne me choque... quand à pgcluu il n'était pas lancé à ce moment là.

Auriez-vous une idée?

Cordialement

Olivier Bouiron

Pied de page des forums

Propulsé par FluxBB