partition queries hitting all partitions even though check key is specified

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all;

I cant figure out why we're scanning all of our partitions.

We setup our tables like this:


Base Table:

CREATE TABLE url_hits (
    id integer NOT NULL,
    content_type_id integer,
    file_extension_id integer,
    "time" integer,
    bytes integer NOT NULL,
    path_id integer,
    protocol public.protocol_enum
);

Partitions:
create table url_hits_2011_12 (
   check (
          "time" >= extract ('epoch' from timestamp '2011-12-01 
00:00:00')::int4
          and "time" <= extract ('epoch' from timestamp '2011-12-31 
23:59:59')::int4
   )
) INHERITS (url_hits);


CREATE RULE url_hits_2011_12_insert as
ON INSERT TO url_hits
where
   ( "time" >= extract ('epoch' from timestamp '2011-12-01 00:00:00')::int4
     and "time" <= extract ('epoch' from timestamp '2011-12-31 
23:59:59')::int4 )
DO INSTEAD
  INSERT INTO  url_hits_2011_12 VALUES (NEW.*) ;

...

create table url_hits_2009_08 (
   check (
          "time" >= extract ('epoch' from timestamp '2009-08-01 
00:00:00')::int4
          and "time" <= extract ('epoch' from timestamp '2009-08-31 
23:59:59')::int4
   )
) INHERITS (url_hits);


CREATE RULE url_hits_2009_08_insert as
ON INSERT TO url_hits
where
   ( "time" >= extract ('epoch' from timestamp '2009-08-01 00:00:00')::int4
     and "time" <= extract ('epoch' from timestamp '2009-08-31 
23:59:59')::int4 )
DO INSTEAD
  INSERT INTO  url_hits_2009_08 VALUES (NEW.*) ;

... 

the explain plan shows most any query scans/hits all partitions even if we 
specify the partition key:

explain select * from pwreport.url_hits where "time" > 
date_part('epoch'::text, '2009-08-12'::timestamp without time zone)::integer;                                                                                     
                                              QUERY PLAN                                                          
------------------------------------------------------------------------------------------------------            
 Result  (cost=0.00..23766294.06 rows=816492723 width=432)                                                        
   ->  Append  (cost=0.00..23766294.06 rows=816492723 width=432)                                                  
         ->  Seq Scan on url_hits  (cost=0.00..12.12 rows=57 width=432)                                           
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_12 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_11 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_10 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_09 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_08 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_07 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_06 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_05 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_04 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_03 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_02 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2011_01 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_12 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_11 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_10 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_09 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_08 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_07 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_06 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_05 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_04 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_03 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_02 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2010_01 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2009_12 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2009_11 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2009_10 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2009_09 url_hits  (cost=0.00..1838010.76 
rows=75607779 width=128)               
               Filter: ("time" > 1250035200)                                                                      
         ->  Seq Scan on url_hits_2009_08 url_hits  (cost=0.00..21927943.80 
rows=740883348 width=131)             
               Filter: ("time" > 1250035200)                                                                      
(62 rows)                                                                                                     



explain select * from pwreport.url_hits where "time" > 1220227200::int4;                               
                                              QUERY PLAN                                                          
------------------------------------------------------------------------------------------------------            
 Result  (cost=0.00..23775893.12 rows=965053504 width=432)                                                        
   ->  Append  (cost=0.00..23775893.12 rows=965053504 width=432)                                                  
         ->  Seq Scan on url_hits  (cost=0.00..12.12 rows=57 width=432)                                           
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_12 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_11 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_10 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_09 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_08 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_07 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_06 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_05 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_04 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_03 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_02 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2011_01 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_12 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_11 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_10 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_09 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_08 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_07 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_06 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_05 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_04 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_03 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_02 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2010_01 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)                                                                      
         ->  Seq Scan on url_hits_2009_12 url_hits  (cost=0.00..12.12 rows=57 
width=432)                          
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_11 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_10 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_09 url_hits  (cost=0.00..1847476.45 
rows=75997156 width=128)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_07 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_06 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_05 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_04 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_03 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_02 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_01 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2008_12 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2008_11 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2008_10 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2008_09 url_hits  (cost=0.00..12.12 rows=57 
width=432)
               Filter: ("time" > 1220227200)
         ->  Seq Scan on url_hits_2009_08 url_hits  (cost=0.00..21927943.80 
rows=889054125 width=131)
               Filter: ("time" > 1220227200)
(84 rows)



Anyone have any thoughts why we're scanning all partitions?

We do have constraint_exclusion on:

# show constraint_exclusion;
 constraint_exclusion
----------------------
 on
(1 row)


Thanks in advance...

-- 
Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance

[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux