On 13-04-10 02:06 PM, Jeff Janes wrote:
On Wed, Apr 10, 2013 at 6:49 AM, Steve Singer <ssin...@ca.afilias.info
<mailto:ssin...@ca.afilias.info>> wrote:


I think the index recheck means your bitmap is overflowing (i.e. needing
more space than work_mem) and so keeping only the pages which have at
least one match, which means all rows in those pages need to be
rechecked.  How many rows does the table have?  You might be essentially
doing a seq scan, but with the additional overhead of the bitmap
machinery.  Could you do "explain (analyze,buffers)", preferably with
track_io_timing set to on?


table_b has 1,530,710,469 rows

Attached is the output with track_io_timings and buffers.





  Cheers,

Jeff

HashAggregate  (cost=11768301.08..11770515.08 rows=147600 width=51) (actual 
time=3518538.111..3518539.201 rows=36 loops=1)
   Buffers: shared hit=8892878 read=4997334
   I/O Timings: read=1935289.861
   ->  Hash Join  (cost=1282646.06..11041507.43 rows=700524 width=51) (actual 
time=94631.716..2065378.607 rows=543671 loops=1)
         Hash Cond: (a.product_operation = o.id)
         Buffers: shared hit=3419 read=4626531
         I/O Timings: read=1738580.922
         ->  Hash Right Join  (cost=1282644.14..11031873.30 rows=700524 
width=40) (actual time=94631.646..2064079.068 rows=543671 l
oops=1)
               Hash Cond: (b.a_id = a.id)
               Buffers: shared hit=3418 read=4626531
               I/O Timings: read=1738580.922
               ->  Bitmap Heap Scan on public.table_b_2 b  
(cost=173185.49..9820205.86 rows=8462538 width=10) (actual ti
me=10044.901..1970005.160 rows=9749680 loops=1)
                     Recheck Cond: ((b.organization_id = 3) AND (b.year = 2013) 
AND (b.month = 3))
                     Rows Removed by Index Recheck: 313195667
                     Filter: (b.product_id = 2)
                     Buffers: shared hit=232 read=4606751
                     I/O Timings: read=1726380.478
                     ->  Bitmap Index Scan on rec_rev_2_orgid_ym_unq  
(cost=0.00..171069.85 rows=8462538 width=0) (actual time=9410
.598..9410.598 rows=9749680 loops=1)
                           Index Cond: ((b.organization_id = 3) AND (b.year = 
2013) AND (b.month = 3))
                           Buffers: shared read=37360
                           I/O Timings: read=3460.299
               ->  Hash  (cost=1107975.15..1107975.15 rows=118680 width=34) 
(actual time=13732.784..13732.784 rows=543671 loops=1)
                     Buckets: 16384  Batches: 1  Memory Usage: 37388kB
                     Buffers: shared hit=3186 read=19780
                     I/O Timings: read=12200.444
                     ->  Append  (cost=0.00..1107975.15 rows=118680 width=34) 
(actual time=935.605..13395.517 rows=543671 loops=1)
                           Buffers: shared hit=3186 read=19780
                           I/O Timings: read=12200.444
                           ->  Seq Scan on public.table_a a  (cost=0.00..0.00 
rows=1 width=60) (actual time=0.001..0.00
1 rows=0 loops=1)
                                 Filter: ((a.twin_id IS NULL) AND 
(a.transaction_date >= '2009-09-01 00:00:00+00'::timestamp with t
ime zone) AND (a.transaction_date < '2009-10-01 00:00:00+00'::timestamp with 
time zone) AND (a.product_id = 2) AND ((a.trans_type_i
d = ANY ('{2,3,4}'::integer[])) OR (a.trans_type_id IS NULL)))
                           ->  Bitmap Heap Scan on public.table_a_2 a  
(cost=13335.33..1107975.15 rows=118679 width=34)
 (actual time=935.603..13301.854 rows=543671 loops=1)
                                 Recheck Cond: ((a.transaction_date >= 
'2009-09-01 00:00:00+00'::timestamp with time zone) AND (a.t
ransaction_date < '2009-10-01 00:00:00+00'::timestamp with time zone))
                                 Filter: ((a.twin_id IS NULL) AND (a.product_id 
= 2) AND ((a.trans_type_id = ANY ('{2,3,4}'::intege
r[])) OR (a.trans_type_id IS NULL)))
                                 Rows Removed by Filter: 302939
                                 Buffers: shared hit=3186 read=19780
                                 I/O Timings: read=12200.444
                                 ->  Bitmap Index Scan on 
table_a_2_trans_date_idx  (cost=0.00..13305.66 rows=858651 width=0) 
(actual time=303.756..303.756 rows=846610 loops=1)
                                       Index Cond: ((a.transaction_date >= 
'2009-09-01 00:00:00+00'::timestamp with time zone) AND 
(a.transaction_date < '2009-10-01 00:00:00+00'::timestamp with time zone))
                                       Buffers: shared read=2317
                                       I/O Timings: read=170.564
         ->  Hash  (cost=1.41..1.41 rows=41 width=19) (actual time=0.036..0.036 
rows=41 loops=1)
               Buckets: 1024  Batches: 1  Memory Usage: 3kB
               Buffers: shared hit=1
               ->  Seq Scan on public.product_operations o  (cost=0.00..1.41 
rows=41 width=19) (actual time=0.009..0.018 rows=41 lo
ops=1)
                     Buffers: shared hit=1
 Total runtime: 3518541.146 ms
(55 rows)

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

Reply via email to