Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/04/2005, 09h02   #1
Invité régulier
 
Inscription : novembre 2004
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 36
Points : 7
Points : 7
Envoyer un message via ICQ à Grubshka Envoyer un message via MSN à Grubshka
Par défaut [Gros volume] Optimisations ?

Bonjour,

J'ai une table qui va contenir énormément de tuples, et je voudrais connaître les optimisations possibles pour ce type de table.

J'ai trouvé quelques options à modifier dans postgresql.conf sur techdocs.postgresql.org, mais il n'y a rien de très précis, et j'aurais aussi aimé avoir vos expériences en la matière.

Par exemple, avec 1 000 000 de tuples, une requête simple prenait 7 secondes, mais avec 10 000 000, cela prend 40 secondes.

La table est amenée à contenir beaucoup plus de données que ça, et j'ai besoin d'améliorer le temps de réponse.

En dehors des paramètres modifiés, j'ai fais les index nécessaires (sur deux champs que j'utilise le plus dans mes clauses where), et des vacuum analyze réguliers.

Merci de vos conseils.
Grubshka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2005, 09h11   #2
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
Bonjour,

Il serait intéressant de faire une analyse de plan des requêtes utilisées le plus fréquemment pour accéder à cette table, avec EXPLAIN. Cela permettrait de voir si les index sont correctement utilisés, entre autres.
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2005, 09h39   #3
Invité régulier
 
Inscription : novembre 2004
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 36
Points : 7
Points : 7
Envoyer un message via ICQ à Grubshka Envoyer un message via MSN à Grubshka
En fait la table en question est simple (hé oui je fais des bons schémas ) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
projetweb=# \d echantillon
              TABLE "public.echantillon"
   COLUMN    |            Type             | Modifiers
-------------+-----------------------------+-----------
 time        | timestamp without time zone | NOT NULL
 idparameter | integer                     | NOT NULL
 idsession   | integer                     | NOT NULL
 ipv         | integer                     |
 rpv         | real                        |
 spv         | character varying           |
Indexes:
    "echantillon_pkey" PRIMARY KEY, btree ("time", idparameter, idsession)
Foreign-KEY constraints:
    "echantillon_idparameter_fkey" FOREIGN KEY (idparameter, idsession) REFERENCES analysis(idparameter, idsession)
Voilà le type de requête le plus souvent appelée :
Code :
1
2
3
4
5
6
7
 
projetweb=# explain  select * from echantillon where time between TIMESTAMP '15/07/2004 15:00' and TIMESTAMP '15/07/2004 20:00' and idparameter = 156 and idsession = 157;
                                                     QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
 INDEX Scan USING echantillon_pkey ON echantillon  (cost=0.00..3.77 rows=1 width=28)
   INDEX Cond: (("time" >= '2004-07-15 15:00:00'::timestamp without time zone) AND ("time" <= '2004-07-15 20:00:00'::timestamp without time zone) AND (idparameter = 156) AND (idsession = 157))
(2 rows)
Il s'agit en fait de télémesures (états, températures, tensions, en bcp d'autres) prises lors de tests, le but est d'afficher des courbes sur un site intranet.
Je pensais générer des courbes "miniatures" à l'avance, mais parfois il y aura un besoin de voir la courbe précisément, de faire des zoom, de comparer des paramètres, d'appliquer des fonctions à ces courbes, etc.

Merci
Grubshka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2005, 10h00   #4
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
Hum, a priori, le plan est correct, il passe bien par l'index de la clé primaire... Cette requête prend combien de temps avec un EXPLAIN EXECUTE ?

Une remarque, toutefois : l'utilisation d'un timestamp dans une clé primaire est assez coûteux en traitement, il est souvent plus efficace de le sortir de la clé primaire et de le remplacer par un integer.

Sinon, côté optimisation, il existe les petits papiers de SQLPro : Optimisation SGBDR
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2005, 10h29   #5
Invité régulier
 
Inscription : novembre 2004
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 36
Points : 7
Points : 7
Envoyer un message via ICQ à Grubshka Envoyer un message via MSN à Grubshka
Un explain execute prend environ 5 secondes... Je connaissais pas cette commande
Je viens de me rendre compte que c'est php qui galère avec le nombre de résultats !! Je vais faire avec autre chose...

Il ya vraiment beaucoup de mesures par paramètre et par session (parfois 100 par seconde pour certains paramètres, sur une session de plusieurs heures), mettre le timestamp en clé primaire était le plus simple à mon avis, surtout que les requêtes se font toujours sur le timestamp (entre autres) et que cette clé n'est jamais utilisée en clé étrangère d'une autre table.

Je vais quand même faire des tests avec un integer en clé primaire...

Merci beaucoup de ton aide.
Grubshka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2005, 10h42   #6
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
Je t'en prie

Si tu considères le "problème" comme résolu, pense à cliquer sur le bouton du même nom en bas en gauche de la page.
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2005, 10h50   #7
Invité régulier
 
Inscription : novembre 2004
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 36
Points : 7
Points : 7
Envoyer un message via ICQ à Grubshka Envoyer un message via MSN à Grubshka
Citation:
Envoyé par Quentin
Je t'en prie

Si tu considères le "problème" comme résolu, pense à cliquer sur le bouton du même nom en bas en gauche de la page.
Merci, j'oublie souvent !
Grubshka est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h13.


 
 
 
 
Partenaires

Hébergement Web