aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/postmaster/pgstat.c226
-rw-r--r--src/include/pgstat.h77
2 files changed, 61 insertions, 242 deletions
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index 5420a121da4..14b6f8f151d 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -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>
@@ -758,230 +758,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() -
*
* Called from access/transam/xact.c to count transaction commits.
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index 952d7bad853..3ae0c5f31dd 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -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);