I need a way to tell how many pages loaded from disk for a particular
index seek operation.

What I did is to set a global flag to true before calling the
following statement
(inside index_getnext() in "/backend/access/indexam.c")

  found = DatumGetBool(FunctionCall2(&scan->fn_getnext,
                                                       PointerGetDatum(scan),
                                                      
Int32GetDatum(direction)));


then for each access to disk, I increment a counter until the above call is
finished and set back the global flag.

The number of page IOs is not even matching from what I got from 
"select * from pg_stat_all_indexes"  ---  (is there anything I need to
set in postgresql.conf?)

also, the number of paged IOs for a given index seek is always less
than the total
page loads. Is it because of the statement (following the above in 
"/backend/access/indexam.c")?

        "if (heap_release_fetch(scan->heapRelation, scan->xs_snapshot,          
                                        
  heapTuple, &scan->xs_cbuf, true,
           &scan->xs_pgstat_info))"

If I am running in a single user mode, is there a way to avoid using
extra page IO in
the above statement? It seems to me the extra page IO is caused by
comparing snapshots...

thanks

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to