Count SP-GiST index scans in pg_stat statistics.
authorTom Lane <[email protected]>
Fri, 27 Aug 2021 23:42:42 +0000 (19:42 -0400)
committerTom Lane <[email protected]>
Fri, 27 Aug 2021 23:53:05 +0000 (19:53 -0400)
Somehow, spgist overlooked the need to call pgstat_count_index_scan().
Hence, pg_stat_all_indexes.idx_scan and equivalent columns never
became nonzero for an SP-GiST index, although the related per-tuple
counters worked fine.

This fix works a bit differently from other index AMs, in that the
counter increment occurs in spgrescan not spggettuple/spggetbitmap.
It looks like this won't make the user-visible semantics noticeably
different, so I won't go to the trouble of introducing an is-this-
the-first-call flag just to make the counter bumps happen in the
same places.

Per bug #17163 from Christian Quest.  Back-patch to all supported
versions.

Discussion: https://postgr.es/m/17163-b8c5cc88322a5e92@postgresql.org

src/backend/access/spgist/spgscan.c

index e14b9fa573af42b73daac9d3bc9e0d895e0034bf..401a1a834323c30c8ce07beab4f2dff17adf9812 100644 (file)
@@ -19,6 +19,7 @@
 #include "access/relscan.h"
 #include "access/spgist_private.h"
 #include "miscadmin.h"
+#include "pgstat.h"
 #include "storage/bufmgr.h"
 #include "utils/datum.h"
 #include "utils/float.h"
@@ -419,6 +420,9 @@ spgrescan(IndexScanDesc scan, ScanKey scankey, int nscankeys,
 
    /* set up starting queue entries */
    resetSpGistScanOpaque(so);
+
+   /* count an indexscan for stats */
+   pgstat_count_index_scan(scan->indexRelation);
 }
 
 void