Vous n'êtes pas identifié(e).

#176 Re : Général » HashAggregate to slow » 25/05/2012 14:14:44

Non, c'est le meme serveur.
Sauf que j'ai fait une bourde: au fait j'ai lancé l'explain analyze après avoir executer ma requete, je mets ici le bon plan d'execution.

 HashAggregate  (cost=8.90..8.93 rows=1 width=77) (actual time=9869.904..9869.912 rows=3 loops=1)
               Output: 'AUD'::character(3), 839::bigint, NULL::bigint, NULL::character varying, 
 NULL::bigint, pos, NULL::integer, ........ 
               Buffers: shared hit=4 read=4470
                 ->  Index Scan using par_ag_idx10 on  aft (cost=0.00..8.84 rows=1 width=77)
 (actual time=1775.949..9869.778 rows=4 loops=1)
      Output: ...........    
  Index Cond: ((aft.ag_date >= '2012-02-29 23:00:00'::timestamp without time zone)
 AND (aft.ag_date <= '2012-02-29 23:59:59'::timestamp without time zone))
       Filter: ((aft.id_org = 839) 
AND (aft.id_ref = 5) AND (aft.id = ANY ('{23174,23159,23173,23158,23181,
23170,23180,23169,23184,23178,23185,23165,
23161,23166,23162,23182,23171,23183,23172,23186,23179,23187,23167,23163,
23168,23160,23176,23164,23175,23177}'::bigint[])))
 Buffers: shared hit=4 read=4470"
Total runtime: 9870.068 ms.

.

#177 Re : Général » HashAggregate to slow » 25/05/2012 12:13:29

Voilà, c'est bien le Hashaggregate qui me consomme beacoups de temps.
Cette requetes met 10 seconde chez moi, j'aimerai vraiment pouvoir l'améliorer.

Merci de votre aide

#178 Re : Général » HashAggregate to slow » 25/05/2012 12:11:24

HashAggregate  (cost=8.90..8.93 rows=1 width=77) (actual time=4.802..4.810 rows=3 loops=1)
 Output: 'AUD'::character(3), 839::bigint, NULL::bigint, NULL::character varying, NULL::bigint, pos, NULL::integer, ........ 
Buffers: shared hit=4474
 ->  Index Scan using par_ag_idx10 on  aft  (cost=0.00..8.84 rows=1 width=77) (actual time=0.889..4.755 rows=4 loops=1)
        Output: ...........      Index Cond: ((aft.ag_date >= '2012-02-29 23:00:00'::timestamp without time zone)
 AND (aft.ag_date <= '2012-02-29 23:59:59'::timestamp without time zone))
       Filter: ((aft.id_org = 839) 
AND (aft.id_ref = 5) AND (aft.id = ANY ('{23174,23159,23173,23158,23181,23170,23180,23169,23184,23178,23185,23165,
23161,23166,23162,23182,23171,23183,23172,23186,23179,23187,23167,23163,
23168,23160,23176,23164,23175,23177}'::bigint[])))
       Buffers: shared hit=4474
Total runtime: 4.980 ms.

#179 Re : Général » HashAggregate to slow » 25/05/2012 11:58:34

SELECT 'AUD':: character(3),839:: bigint, null::bigint , NULL :: character varying, NULL :: bigint,
 p , NULL :: integer, 
(SUM(nb_of_sale) + SUM(nb_of_co) + SUM(nb_of_sale_n) + SUM(nb_of_c) + SUM(nb_of_p))  AS nbr_s,
(SUM(am_s)    + SUM(am_co)    + SUM(am_s_n)  + SUM(am_c)    + SUM(am_p))     AS s,
SUM(am_t)  AS t_a, 
SUM(nb_of_pw)                  AS n_pw, 
SUM(am_pw)                     AS pw_am, 
SUM(nbr_of_c)                   AS nb_c,
 SUM(am_c)                      AS c_am, 
SUM(nb_of_r)                    AS nb_r, 
SUM(am_r)                       AS am_r,
SUM(nb_of_c_s)                AS nb__o
 FROM table aft 
WHERE ag_date BETWEEN '2012-02-29 23:00:00'
AND date_trunc('day', '2012-02-29 23:59:59'::timestamp without time zone) + interval '23:59:59'  
AND   id_org = 839 
AND id_ref= 5 
AND id =  ANY( '{23174,23159,23173,23158,23181,23170,23180,23169,23184,23178,
23185,23165,23161,23166,23162,23182,23171,23183,23172,23186,23179,23187,
23167,23163,23168,23160,23176,23164,23175,23177}' ) GROUP BY  aft.p.

#180 Général » HashAggregate to slow » 25/05/2012 11:06:57

Postgres.0
Réponses : 32

Bonjour,

comment peux-ton améliorer le comportement d'une requete qui utilise dans son plan d'exécution un  HashAggregate trop lent.
Je suis sur la 9.1.

#182 Général » TWo phases commit » 03/05/2012 14:20:47

Postgres.0
Réponses : 2

Bonjour,

j'insere une ligne dans une table situé sur une base B1. une fois que je valide le retour de pqsendquery, je supprime cette ligne d'une table située sur une base B2.
J'aimerai faire de ces deux transactions une seule transaction logique.
J'ai donc penser au Two phases commit, le problème c'est que je ne sais l'implementer.
Est-ce-que quelqu'un a une idée la dessus ou sur le protocole XA?

J'utilise la 8.4.


Cordialement

#184 Re : Général » Bitmap Heap Scan » 09/03/2012 15:05:22

Sinon avez vous un lien qui peut m'aider à comprendre techniquement ces mots:

HashAggregate,Hash Join,Hash Cond,Append,Index Cond,Bitmap Heap Scan,Recheck Cond,Filter, Hash.

J'ai vraiment en vie de comprendre comment l'optimiseur fonctionne.

#185 Re : Général » Bitmap Heap Scan » 09/03/2012 15:01:18

vous avez parafaitement raison, ça ne changera rien.
L'analyse que j'ai faites étais sur la requete déjà dans le cache.
J'aimerai quand même bien savoir comment je corrige cette anomalie car elle me permettera de gagner en temps d'exécutiion.

#186 Re : Général » Bitmap Heap Scan » 09/03/2012 13:14:26

la table p est beaucoup plus petite que la table aft.
Quand je filtre sur 

p.id_b = ANY( '{1442,1436,1440,1441,1443,1452,1451,1435,1449,1450,1439,1444,1446,1438,1437,1445,1448,1447}' ).

l'anomalie disparait, pensez vous que c'est à cause de ça.

Sinon avez une proposition pour que je puisse gagner en tèrme de temps d'exécution.

#187 Re : Général » Bitmap Heap Scan » 09/03/2012 13:10:03

Oups! j'ai enlevé un commentaire de la requete, je la corrige:

 SELECT currency, id_a, NULL :: bigint, NULL :: character varying,  position , NULL :: integer, (SUM(number_of_one) + SUM(number_of_two) + SUM(number_of_zero) + SUM(number_of_three) + SUM(number_of_for))  AS nbr, (SUM(amount_one)    + SUM(amount_two)    + SUM(amount_three)    + SUM(amount_for)    + SUM(amount_five))     AS amount, SUM(amount_six),                      SUM(number_of_five),              SUM(amount_seven)                     , SUM(number_of_six)                  , SUM(amount_eight)                    , SUM(number_of_seven)             , SUM(amount_nine)                    FROM Schem.TABLE aft , position p WHERE ag_date1 >= '2011-10-01 00:00:00' AND ag_date1 <= '2011-10-31 23:59:59' AND id_a = 206
AND   p.id_b = aft.id_b
AND aft.id_b = ANY( '{1442,1436,1440,1441,1443,1452,1451,1435,1449,1450,1439,1444,1446,1438,1437,1445,1448,1447}' )
--AND p.id_b = ANY( '{1442,1436,1440,1441,1443,1452,1451,1435,1449,1450,1439,1444,1446,1438,1437,1445,1448,1447}' )
 GROUP BY  currency,id_a, position;.

#189 Re : Général » Bitmap Heap Scan » 09/03/2012 12:42:02

Bitmap Heap Scan on par_TABLE_2011_10 aft  (cost=39.89..7441.02 rows=2 width=109) (actual time=0.641..8.092 rows=1934 loops=1)
                     Recheck Cond: (id_a = 206)

Sur ce bout de code, il s'attend à avoir 2 lignes mais à la fin il a 1934, je me demande si c'est normal.
J'ai lu quelque part que le Heap Scan  est pas loin du seq scan.

Le problème  est que j'ai une procedure qui vas boucler n fois sur ce type de requetes, cette procedure a en paramètre un tableau d'id_a, et un tableau d'id_b ainsi que les autres filtres.

Pour executer la requete je faits RETURN QUERY EXECUTE ma_chane.
ma_chaine contient la requete (SQLD).
Mon temps d'execution dépasse les 4mn, j'ai donc analyser une étape de la boucle, por voir comment je peux gagner du temps.

#190 Général » Bitmap Heap Scan » 09/03/2012 11:56:11

Postgres.0
Réponses : 12

Bonjour,

quand je fais un AXPLAIN ANALYZE de ma requete, j'ai le plan suivant :

HashAggregate  (cost=7474.42..7474.68 rows=3 width=211) (actual time=20.994..21.020 rows=15 loops=1)
   ->  Nested Loop  (cost=0.00..7474.22 rows=3 width=211) (actual time=0.683..14.333 rows=1934 loops=1)
         ->  Append  (cost=0.00..7449.31 rows=3 width=202) (actual time=0.655..8.342 rows=1934 loops=1)
               ->  Index Scan using TABLE_idx0 on TABLE aft  (cost=0.00..8.30 rows=1 width=388) (actual time=0.013..0.013 rows=0 loops=1)
                     Index Cond: (id_a = 206)
                     Filter: ((ag_date1 >= '2011-10-01 00:00:00'::timestamp without time zone) AND (ag_date1 <= '2011-10-31 23:59:59'::timestamp without time zone) AND (id_b = ANY ('{1442,1436,1440,1441,1443,1452,1451,1435,1449,1450,1439,1444,1446,1438,1437,1445,1448,1447}'::bigint[])))
               ->  Bitmap Heap Scan on par_TABLE_2011_10 aft  (cost=39.89..7441.02 rows=2 width=109) (actual time=0.641..8.092 rows=1934 loops=1)
                     Recheck Cond: (id_a = 206)
                     Filter: ((ag_date1 >= '2011-10-01 00:00:00'::timestamp without time zone) AND (ag_date1 <= '2011-10-31 23:59:59'::timestamp without time zone) AND (id_b = ANY ('{1442,1436,1440,1441,1443,1452,1451,1435,1449,1450,1439,1444,1446,1438,1437,1445,1448,1447}'::bigint[])))
                     ->  Bitmap Index Scan on par_TABLE_2011_10_idx0  (cost=0.00..39.89 rows=2034 width=0) (actual time=0.353..0.353 rows=1934 loops=1)
                           Index Cond: (id_a = 206)
         ->  Index Scan using position_pkey on position p  (cost=0.00..8.29 rows=1 width=13) (actual time=0.002..0.003 rows=1 loops=1934)
               Index Cond: (p.id_pos = aft.id_pos)
 Total runtime: 21.223 ms.

Je ne comprends pas le comportement du Bitmap Heap Scan.
Je ne comprends pas non plus pourqoui il y a plusieurs check cond.
Je  signale que ma table est partitionnée.


Voici la requête:

  SELECT currency, id_a, NULL :: bigint, NULL :: character varying,  position , NULL :: integer, (SUM(number_of_one) + SUM(number_of_two) + SUM(number_of_zero) + SUM(number_of_three) + SUM(number_of_for))  AS nbr, (SUM(amount_one)    + SUM(amount_two)    + SUM(amount_three)    + SUM(amount_for)    + SUM(amount_five))     AS amount, SUM(amount_six),                      SUM(number_of_five),              SUM(amount_seven)                     , SUM(number_of_six)                  , SUM(amount_eight)                    , SUM(number_of_seven)             , SUM(amount_nine)                    FROM Schem.TABLE aft , position p WHERE ag_date1 >= '2011-10-01 00:00:00' AND ag_date1 <= '2011-10-31 23:59:59' AND id_a = 206
AND   p.id_b = aft.id_b
AND aft.id_b = ANY( '{1442,1436,1440,1441,1443,1452,1451,1435,1449,1450,1439,1444,1446,1438,1437,1445,1448,1447}' )
AND p.id_b = ANY( '{1442,1436,1440,1441,1443,1452,1451,1435,1449,1450,1439,1444,1446,1438,1437,1445,1448,1447}' )
 GROUP BY  currency,id_a, position;
.

#191 Re : C et C++ » row number 0 is out of range 0..-1 postgre » 07/11/2011 15:23:51

J'ai trouvé, j'essayé de lire un pqgetvalue vide.

#192 C et C++ » row number 0 is out of range 0..-1 postgre » 07/11/2011 12:19:17

Postgres.0
Réponses : 1

Bonjour,

je lançais mon programme sur un serrveur A, pour me faire "la réplication" vers un serveur B.
quand je lui demande de me faire la replication de B vers A, sachant que le programme tourne sur A, jai cette erreur :

row number 0 is out of range 0..-1 postgre


Qu'en pensez vous ?

#193 Re : C et C++ » canceling statement due to statement timeout » 03/11/2011 18:36:03

il est désactivé, mais j'envoie une requete qui dis SET STATEMENT_TIMEOUT TO 600000.
je l'ai enlevé mais ça ne marche toujours pas.
au fait je fait n delete en masse mais il semble le refuser.

#194 C et C++ » canceling statement due to statement timeout » 03/11/2011 17:14:29

Postgres.0
Réponses : 3

Bonjour,

pourriez vous me dire comment remedier à ce problème :

canceling statement due to statement timeout

#196 Re : C et C++ » PqisBusy » 28/09/2011 16:41:48

Marc Cousin a écrit :

Sinon, je crois qu'il y a ou a eu des bugs dans la libc de la redhat 5 sur l'allocation de mémoire (au cas où vous seriez dans ce contexte)… je n'ai pas souvenir que ça ait été remonté ou détecté avec Postgres, mais je sais que le projet bacula, qui utilise aussi son propre allocateur de mémoire, a eu des soucis…

Oui, je suis dans ce contexte, malheureusement.

#197 Re : C et C++ » PqisBusy » 28/09/2011 13:23:34

que pensez vous du BUG 4578, j'ai l'impression qu'il s'agit de la même chose que ce que nous traitons ici.

#198 Re : C et C++ » PqisBusy » 28/09/2011 13:13:40

Merci,

je penses, effectivement, que le problème vienst de Valgrind.
Je vais essayer d'utiliser un autre logiciel de détéction des fuites mémoires.

#199 Re : C et C++ » PqisBusy » 28/09/2011 10:43:34

J'ai faits tout ça, mais il m'a l'aire de me dire que postgres a alloué quelque chose.

Serait-ce un Bug POSTGRES ?

#200 Re : C et C++ » PqisBusy » 27/09/2011 16:20:49

je suis d'accord avec ce que vous dites, mais ma question est comment éviter la perte de mémoire.

Pied de page des forums

Propulsé par FluxBB