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 Re : Optimisation » Requête lente sur une table partionné. » 09/01/2015 10:35:56

Bonjour,

Merci pour ce retour. En fait il reste une seule table de 2013 qui n'a pas correctement été supprimée. Sinon dans le explain, il passe bien dans les table de history_uint_y2014m10d11 à history_uint_y2015m01d05.

Pour le coup en me relisant je viens de comprendre pourquoi il passe dans autant de tables :

La condition de recherche est sur clock <= XXXXXX. Donc il teste toutes les entrées dans toutes les tables où clock est inférieur à XXXXX.

Chaque table contient en moyenne 12 000 000 de lignes. Pour le coup je ne vois pas comment réduire le temps d'exécution de la requête. Actuellement elle prend environ 22 s et 5minutes en fonction de la charge du serveur.

Jérémy.

#2 Optimisation » Requête lente sur une table partionné. » 08/01/2015 17:45:32

JeremyM
Réponses : 3

Bonjour,

J'ai la problématique suivante:
Le requête suivante select max(clock) from history_uint where itemid=xxxx AND clock <= xxxxxx est très lente.
Après vérification du plan d'exécution, il s'avère que le planificateur passe dans toutes les tables filles de history_uint.

J'utilise PostgreSQL 9.0.4.
La structure de la table est la suivante :

                        Table "public.history_uint"
 Column |     Type      |          Modifiers          | Storage | Description 
--------+---------------+-----------------------------+---------+-------------
 itemid | bigint        | not null                    | plain   | 
 clock  | integer       | not null default 0          | plain   | 
 value  | numeric(20,0) | not null default 0::numeric | main    | 
 ns     | integer       | not null default 0          | plain   | 
Indexes:
    "history_uint_1_tmp" btree (itemid, clock)
Triggers:
    insert_history_uint_trigger BEFORE INSERT ON history_uint FOR EACH ROW EXECUTE PROCEDURE history_uint_insert_trigger()
Child tables: history_uint_y2013m08d15,
              history_uint_y2014m10d11,
              history_uint_y2014m10d12,
              history_uint_y2014m10d13,
              history_uint_y2014m10d14,
              history_uint_y2014m10d15,
              history_uint_y2014m10d16,
              history_uint_y2014m10d17,
              history_uint_y2014m10d18,
              history_uint_y2014m10d19,
              history_uint_y2014m10d20,
              history_uint_y2014m10d21,
              history_uint_y2014m10d22,
              history_uint_y2014m10d23,
              history_uint_y2014m10d24,
              history_uint_y2014m10d25,
              history_uint_y2014m10d26,
              history_uint_y2014m10d27,
              history_uint_y2014m10d28,
              history_uint_y2014m10d29,
              history_uint_y2014m10d30,
              history_uint_y2014m10d31,
              history_uint_y2014m11d01,
              history_uint_y2014m11d02,
              history_uint_y2014m11d03,
              history_uint_y2014m11d04,
              history_uint_y2014m11d05,
              history_uint_y2014m11d06,
              history_uint_y2014m11d07,
              history_uint_y2014m11d08,
              history_uint_y2014m11d09,
              history_uint_y2014m11d10,
              history_uint_y2014m11d11,
              history_uint_y2014m11d12,
              history_uint_y2014m11d13,
              history_uint_y2014m11d14,
              history_uint_y2014m11d15,
              history_uint_y2014m11d16,
              history_uint_y2014m11d17,
              history_uint_y2014m11d18,
              history_uint_y2014m11d19,
              history_uint_y2014m11d20,
              history_uint_y2014m11d21,
              history_uint_y2014m11d22,
              history_uint_y2014m11d23,
              history_uint_y2014m11d24,
              history_uint_y2014m11d25,
              history_uint_y2014m11d26,
              history_uint_y2014m11d27,
              history_uint_y2014m12d28,
              history_uint_y2014m12d29,
              history_uint_y2014m12d30,
              history_uint_y2014m12d31,
              history_uint_y2015m01d01,
              history_uint_y2015m01d02,
              history_uint_y2015m01d03,
              history_uint_y2015m01d04,
              history_uint_y2015m01d05,
              history_uint_y2015m01d06,
              history_uint_y2015m01d07,
              history_uint_y2015m01d08,
              history_uint_y2015m01d09,
              history_uint_y2015m01d10
Has OIDs: yes

Chacune des table contient environ 12 000 000 de lignes, et il y a une rotation sur 4 mois.
Un explain de la requête est disponible ici : http://explain.depesz.com/s/UCgi


Voici la structure des tables history_uint_yxxxxmxxdxx

                   Table "public.history_uint_y2015m01d10"
 Column |     Type      |          Modifiers          | Storage | Description 
--------+---------------+-----------------------------+---------+-------------
 itemid | bigint        | not null                    | plain   | 
 clock  | integer       | not null default 0          | plain   | 
 value  | numeric(20,0) | not null default 0::numeric | main    | 
 ns     | integer       | not null default 0          | plain   | 
Indexes:
    "history_uint_y2015m01d10_1" btree (itemid, clock)
Check constraints:
    "history_uint_y2015m01d10_clock_check" CHECK (clock >= 1420848000 AND clock < 1420934400)
Inherits: history_uint
Has OIDs: yes

Là j'avoue que je sèche totalement et toute aide serai la bienvenue.

Merci.

Pied de page des forums

Propulsé par FluxBB