BUG #5652: Optimizer does wrong thing with partitioned tables

Поиск
Список
Период
Сортировка
От Mladen Gogala
Тема BUG #5652: Optimizer does wrong thing with partitioned tables
Дата
Msg-id 201009101301.o8AD1wBb094807@wwwmaster.postgresql.org
обсуждение исходный текст
Ответы Re: BUG #5652: Optimizer does wrong thing with partitioned tables  (Euler Taveira de Oliveira <euler@timbira.com>)
Список pgsql-bugs
The following bug has been logged online:

Bug reference:      5652
Logged by:          Mladen Gogala
Email address:      mladen.gogala@vmsinfo.com
PostgreSQL version: 8.4.4
Operating system:   Red Hat Linux 5.5, 64b
Description:        Optimizer does wrong thing with partitioned tables
Details:

Optimizer chooses to scan each partitioned table sequentially, instead of
using the available index:

news=# explain select max(created_at) from moreover_documents;
                                                      QUERY PLAN


----------------------------------------------------------------------------
----
---------------------------------------
 Aggregate  (cost=5115432.65..5115432.66 rows=1 width=8)
   ->  Append  (cost=0.00..5017318.72 rows=39245572 width=8)
         ->  Seq Scan on moreover_documents  (cost=0.00..10.20 rows=20
width=8)
         ->  Seq Scan on moreover_documents_y2010m06 moreover_documents
(cost=0
.00..236550.85 rows=1859585 width=8)
         ->  Seq Scan on moreover_documents_y2010m07 moreover_documents
(cost=0
.00..2073604.38 rows=16276938 width=8)
         ->  Seq Scan on moreover_documents_y2010m08 moreover_documents
(cost=0
.00..2022494.13 rows=15670513 width=8)
         ->  Seq Scan on moreover_documents_y2010m09 moreover_documents
(cost=0
.00..684618.36 rows=5438436 width=8)
         ->  Seq Scan on moreover_documents_y2010m10 moreover_documents
(cost=0
.00..10.20 rows=20 width=8)
         ->  Seq Scan on moreover_documents_y2010m11 moreover_documents
(cost=0
.00..10.20 rows=20 width=8)
         ->  Seq Scan on moreover_documents_y2010m12 moreover_documents
(cost=0
.00..10.20 rows=20 width=8)
         ->  Seq Scan on moreover_documents_y2011m01 moreover_documents
(cost=0
.00..10.20 rows=20 width=8)


When on single partition, the optimizer does the right thing:
news=# explain select max(created_at) from moreover_documents_y2010m09;
                                                                 QUERY PLAN


----------------------------------------------------------------------------
----
------------------------------------------------------------
 Result  (cost=0.15..0.16 rows=1 width=0)
   InitPlan 1 (returns $0)
     ->  Limit  (cost=0.00..0.15 rows=1 width=8)
           ->  Index Scan Backward using mdocs_created_y2010m09 on
moreover_docu
ments_y2010m09  (cost=0.00..800757.60 rows=5438436 width=8)
                 Filter: (created_at IS NOT NULL)
(5 rows)


Index is available on each and every partition. There is only one way to
calculate the max for the entire partitioned table: to calculate max for
each partition and then select max of those. Optimizer should take into
account the available access paths for each partition, yet it doesn't do so.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Michael Felt
Дата:
Сообщение: Re: Before I call it a bug - some comments and questions
Следующее
От: Euler Taveira de Oliveira
Дата:
Сообщение: Re: BUG #5652: Optimizer does wrong thing with partitioned tables