Turned high-frequently called pgstat functions into macros
authorJan Wieck <JanWieck@Yahoo.com>
Fri, 29 Jun 2001 16:29:37 +0000 (16:29 +0000)
committerJan Wieck <JanWieck@Yahoo.com>
Fri, 29 Jun 2001 16:29:37 +0000 (16:29 +0000)
for speed.

Jan

src/backend/postmaster/pgstat.c
src/include/pgstat.h

index 5420a121da493a9df73d8ea7be930d0b34f0d601..14b6f8f151d86270e0fcbfcbaec94fbba75e91d5 100644 (file)
@@ -19,7 +19,7 @@
  *
  * Copyright (c) 2001, PostgreSQL Global Development Group
  *
- * $Id: pgstat.c,v 1.1 2001/06/22 19:18:35 wieck Exp $
+ * $Id: pgstat.c,v 1.2 2001/06/29 16:29:37 wieck Exp $
  * ----------
  */
 #include <stdio.h>
@@ -757,230 +757,6 @@ pgstat_initstats(PgStat_Info *stats, Relation rel)
 }
 
 
-/* ----------
- * pgstat_reset_heap_scan() -
- *
- * Called from heap_rescan() to reset the heap_scan_counted flag.
- * Since the optimizer usually does a beginscan()/endscan() without
- * really doing a scan, we cannot count those calls. We have to wait
- * if after a beginscan() or rescan() really a call to the getnext()
- * function happens.
- * ----------
- */
-void
-pgstat_reset_heap_scan(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   stats->heap_scan_counted = FALSE;
-}
-
-
-/* ----------
- * pgstat_count_heap_scan() -
- *
- * Called from heap_getnext() to tell us that now the relation
- * really is scanned.
- * ----------
- */
-void
-pgstat_count_heap_scan(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   if (!stats->heap_scan_counted)
-   {
-       ((PgStat_TableEntry *)(stats->tabentry))->t_numscans++;
-       stats->heap_scan_counted = TRUE;
-   }
-}
-
-
-/* ----------
- * pgstat_count_heap_getnext() -
- *
- * Called from heap_getnext() whenever a valid tuple is returned
- * from a sequential scan. The above cannot get combined into this,
- * because if a heap scan didn't return any tuples, the scan itself
- * would be missing in the stats.
- * ----------
- */
-void
-pgstat_count_heap_getnext(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   ((PgStat_TableEntry *)(stats->tabentry))->t_tuples_returned++;
-}
-
-
-/* ----------
- * pgstat_count_heap_fetch() -
- *
- * Called from heap_fetch() if this is caused by a heap lookup
- * for an actually done index scan.
- * ----------
- */
-void
-pgstat_count_heap_fetch(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   ((PgStat_TableEntry *)(stats->tabentry))->t_tuples_fetched++;
-}
-
-
-/* ----------
- * pgstat_count_heap_insert() -
- *
- * Called from heap_insert().
- * ----------
- */
-void
-pgstat_count_heap_insert(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   ((PgStat_TableEntry *)(stats->tabentry))->t_tuples_inserted++;
-}
-
-
-/* ----------
- * pgstat_count_heap_update() -
- *
- * Called from heap_update().
- * ----------
- */
-void
-pgstat_count_heap_update(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   ((PgStat_TableEntry *)(stats->tabentry))->t_tuples_updated++;
-}
-
-
-/* ----------
- * pgstat_count_heap_delete() -
- *
- * Called from heap_delete().
- * ----------
- */
-void
-pgstat_count_heap_delete(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   ((PgStat_TableEntry *)(stats->tabentry))->t_tuples_deleted++;
-}
-
-
-/* ----------
- * pgstat_reset_index_scan() -
- *
- * See pgstat_reset_heap_scan().
- * ----------
- */
-void
-pgstat_reset_index_scan(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   stats->index_scan_counted = FALSE;
-}
-
-
-/* ----------
- * pgstat_count_index_scan() -
- *
- * See pgstat_count_heap_scan().
- * ----------
- */
-void
-pgstat_count_index_scan(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   if (!stats->index_scan_counted)
-   {
-       ((PgStat_TableEntry *)(stats->tabentry))->t_numscans++;
-       stats->index_scan_counted = TRUE;
-   }
-}
-
-
-/* ----------
- * pgstat_reset_index_getnext() -
- *
- * See pgstat_count_heap_getnext().
- * ----------
- */
-void
-pgstat_count_index_getnext(PgStat_Info *stats)
-{
-   if (stats->tabentry == NULL)
-       return;
-
-   ((PgStat_TableEntry *)(stats->tabentry))->t_tuples_returned++;
-}
-
-
-/* ----------
- * pgstat_count_buffer_read() -
- *
- * Called from bufmgr.c when a buffer is looked up in the shared buffer
- * cache. The real number of buffers read from the disk (or at least the
- * OSs or drives cache) is this minus buffer_hit_count below.
- * ----------
- */
-void
-pgstat_count_buffer_read(PgStat_Info *stats, Relation rel)
-{
-   if (stats->tabentry == NULL)
-   {
-       if (stats->no_stats)
-           return;
-       pgstat_initstats(stats, rel);
-       if (stats->tabentry == NULL)
-           return;
-   }
-
-   ((PgStat_TableEntry *)(stats->tabentry))->t_blocks_fetched++;
-}
-
-
-/* ----------
- * pgstat_count_buffer_hit() -
- *
- * Counts how many buffer per relation (or index) have been found
- * in the buffer cache.
- * ----------
- */
-void
-pgstat_count_buffer_hit(PgStat_Info *stats, Relation rel)
-{
-   if (stats->tabentry == NULL)
-   {
-       if (stats->no_stats)
-           return;
-       pgstat_initstats(stats, rel);
-       if (stats->tabentry == NULL)
-           return;
-   }
-
-   ((PgStat_TableEntry *)(stats->tabentry))->t_blocks_hit++;
-}
-
-
 /* ----------
  * pgstat_count_xact_commit() -
  *
index 952d7bad8532ea83e4113002dd4458fe4da7be42..3ae0c5f31dd9ce631ab8ee6f906f5dc21fd090cc 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 2001, PostgreSQL Global Development Group
  *
- *  $Id: pgstat.h,v 1.1 2001/06/22 19:18:36 wieck Exp $
+ *  $Id: pgstat.h,v 1.2 2001/06/29 16:29:37 wieck Exp $
  * ----------
  */
 #ifndef PGSTAT_H
@@ -347,22 +347,65 @@ extern void       pgstat_reset_counters(void);
 
 extern void        pgstat_initstats(PgStat_Info *stats, Relation rel);
 
-extern void        pgstat_reset_heap_scan(PgStat_Info *stats);
-extern void        pgstat_count_heap_scan(PgStat_Info *stats);
-extern void        pgstat_count_heap_getnext(PgStat_Info *stats);
-extern void        pgstat_count_heap_fetch(PgStat_Info *stats);
-extern void        pgstat_count_heap_insert(PgStat_Info *stats);
-extern void        pgstat_count_heap_update(PgStat_Info *stats);
-extern void        pgstat_count_heap_delete(PgStat_Info *stats);
-
-extern void        pgstat_reset_index_scan(PgStat_Info *stats);
-extern void        pgstat_count_index_scan(PgStat_Info *stats);
-extern void        pgstat_count_index_getnext(PgStat_Info *stats);
-
-extern void        pgstat_count_buffer_read(PgStat_Info *stats,
-                                           Relation rel);
-extern void        pgstat_count_buffer_hit(PgStat_Info *stats,
-                                           Relation rel);
+
+#define pgstat_reset_heap_scan(s)                                      \
+   if ((s)->tabentry != NULL)                                          \
+       (s)->heap_scan_counted = FALSE
+#define pgstat_count_heap_scan(s)                                      \
+   if ((s)->tabentry != NULL && !(s)->heap_scan_counted) {             \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_numscans++;           \
+       (s)->heap_scan_counted = TRUE;                                  \
+   }
+#define pgstat_count_heap_getnext(s)                                   \
+   if ((s)->tabentry != NULL)                                          \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_tuples_returned++
+#define pgstat_count_heap_fetch(s)                                     \
+   if ((s)->tabentry != NULL)                                          \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_tuples_fetched++
+#define pgstat_count_heap_insert(s)                                        \
+   if ((s)->tabentry != NULL)                                          \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_tuples_inserted++
+#define pgstat_count_heap_update(s)                                        \
+   if ((s)->tabentry != NULL)                                          \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_tuples_updated++
+#define pgstat_count_heap_delete(s)                                        \
+   if ((s)->tabentry != NULL)                                          \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_tuples_deleted++
+
+#define pgstat_reset_index_scan(s)                                     \
+   if ((s)->tabentry != NULL)                                          \
+       (s)->index_scan_counted = FALSE
+#define pgstat_count_index_scan(s)                                     \
+   if ((s)->tabentry != NULL && !(s)->index_scan_counted) {            \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_numscans++;           \
+       (s)->index_scan_counted = TRUE;                                 \
+   }
+#define pgstat_count_index_getnext(s)                                  \
+   if ((s)->tabentry != NULL)                                          \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_tuples_returned++
+
+#define pgstat_count_buffer_read(s,r)                                  \
+   if ((s)->tabentry != NULL)                                          \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_blocks_fetched++;     \
+   else {                                                              \
+       if (!(s)->no_stats) {                                           \
+           pgstat_initstats((s), (r));                                 \
+           if ((s)->tabentry != NULL)                                  \
+               ((PgStat_TableEntry *)((s)->tabentry))->t_blocks_fetched++; \
+       }                                                               \
+   }
+#define pgstat_count_buffer_hit(s,r)                                   \
+   if ((s)->tabentry != NULL)                                          \
+       ((PgStat_TableEntry *)((s)->tabentry))->t_blocks_hit++;         \
+   else {                                                              \
+       if (!(s)->no_stats) {                                           \
+           pgstat_initstats((s), (r));                                 \
+           if ((s)->tabentry != NULL)                                  \
+               ((PgStat_TableEntry *)((s)->tabentry))->t_blocks_hit++; \
+       }                                                               \
+   }
+
+
 extern void        pgstat_count_xact_commit(void);
 extern void        pgstat_count_xact_rollback(void);