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 » Plans d'exécution différents sur même requête » 15/10/2010 10:55:40

Merci pour le commentaire, j'avais effectivement changé random_page_cost à 2.0 et noté un gain d'environ 20% sur l'EXPLAIN.

Christophe

#2 Re : Optimisation » Plans d'exécution différents sur même requête » 15/10/2010 09:41:03

Bonjour,

Et merci pour les explications, notamment sur le "sens" de l'index, je n'avais pas saisi que l'ordre avait un impact sur le plan d'exécution.
Je vais donc recréer un nouvel index et par la même occasion reindexer pk_t_session car les disques sont rapides (SAS 15k)

Je referai une analyse par la suite.

Christophe

#3 Optimisation » Plans d'exécution différents sur même requête » 15/10/2010 01:03:58

cbernard
Réponses : 4

Bonjour,

Je fais face à un problème très étrange.

En regardant le plan d'exécution d'une requête, celui-ci diffère selon les valeurs que je passe au WHERE.

La requête :
explain  analyze
select
    session_id
from
    session
where
    id = XXXX and
    session_id between 300100000 and 303204368

Lorsqu'id = 9214 :
QUERY PLAN
Index Scan using session_id_idx on session  (cost=0.00..91050.10 rows=5848 width=4) (actual time=0.797..324.467 rows=207 loops=1)
  Index Cond: ((session_id >= 300100000) AND (session_id <= 303204368) AND (id = 9214))
Total runtime: 324.532 ms

Lorsqu'id = 8131 :
QUERY PLAN
Bitmap Heap Scan on session  (cost=60380.26..62442.27 rows=517 width=4) (actual time=60816.526..60816.558 rows=4 loops=1)
  Recheck Cond: ((id = 8131) AND (session_id >= 300100000) AND (session_id <= 303204368))
  ->  BitmapAnd  (cost=60380.26..60380.26 rows=517 width=0) (actual time=60816.392..60816.392 rows=0 loops=1)
        ->  Bitmap Index Scan id_idx  (cost=0.00..1015.53 rows=53243 width=0) (actual time=0.128..0.128 rows=325 loops=1)
              Index Cond: (id = 8131)
        ->  Bitmap Index Scan on pk_t_session_sin  (cost=0.00..59364.22 rows=2829602 width=0) (actual time=60814.642..60814.642 rows=3103959 loops=1)
              Index Cond: ((session_id >= 300100000) AND (session_id <= 303204368))
Total runtime: 60816.602 ms

Je précise qu'il existe un indexe sur id et sur (session_id,id).

Je ne comprend donc pas pourquoi les plans d'exécution sont différents.

Merci d'avance pour vos réponses,
Christophe

Pied de page des forums

Propulsé par FluxBB