pgstat: introduce pgstat_relation_should_count().
authorAndres Freund <andres@anarazel.de>
Mon, 21 Mar 2022 02:12:09 +0000 (19:12 -0700)
committerAndres Freund <andres@anarazel.de>
Mon, 21 Mar 2022 02:12:09 +0000 (19:12 -0700)
A later commit will make the check more complicated than the
current (rel)->pgstat_info != NULL. It also just seems nicer to have a central
copy of the logic, even while still simple.

Author: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/20220303021600.hs34ghqcw6zcokdh@alap3.anarazel.de

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

index e43117ffefebdb022c09092f781240e5ceccc4cd..dd715ca0609805c9f6bd31846c7ece6e43e8cf4e 100644 (file)
@@ -1743,7 +1743,7 @@ index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName)
                tabentry = pgstat_fetch_stat_tabentry(oldIndexId);
                if (tabentry)
                {
-                       if (newClassRel->pgstat_info)
+                       if (pgstat_relation_should_count(newClassRel))
                        {
                                newClassRel->pgstat_info->t_counts.t_numscans = tabentry->numscans;
                                newClassRel->pgstat_info->t_counts.t_tuples_returned = tabentry->tuples_returned;
index e74a66d743a55ded5a71f9a9a9279de035d6f454..62411313af0f015f65baedec413affe264c63017 100644 (file)
@@ -1709,7 +1709,7 @@ pgstat_report_analyze(Relation rel,
         *
         * Waste no time on partitioned tables, though.
         */
-       if (rel->pgstat_info != NULL &&
+       if (pgstat_relation_should_count(rel) &&
                rel->rd_rel->relkind != RELKIND_PARTITIONED_TABLE)
        {
                PgStat_TableXactStatus *trans;
@@ -2359,13 +2359,12 @@ add_tabstat_xact_level(PgStat_TableStatus *pgstat_info, int nest_level)
 void
 pgstat_count_heap_insert(Relation rel, PgStat_Counter n)
 {
-       PgStat_TableStatus *pgstat_info = rel->pgstat_info;
-
-       if (pgstat_info != NULL)
+       if (pgstat_relation_should_count(rel))
        {
-               /* We have to log the effect at the proper transactional level */
+               PgStat_TableStatus *pgstat_info = rel->pgstat_info;
                int                     nest_level = GetCurrentTransactionNestLevel();
 
+               /* We have to log the effect at the proper transactional level */
                if (pgstat_info->trans == NULL ||
                        pgstat_info->trans->nest_level != nest_level)
                        add_tabstat_xact_level(pgstat_info, nest_level);
@@ -2380,13 +2379,12 @@ pgstat_count_heap_insert(Relation rel, PgStat_Counter n)
 void
 pgstat_count_heap_update(Relation rel, bool hot)
 {
-       PgStat_TableStatus *pgstat_info = rel->pgstat_info;
-
-       if (pgstat_info != NULL)
+       if (pgstat_relation_should_count(rel))
        {
-               /* We have to log the effect at the proper transactional level */
+               PgStat_TableStatus *pgstat_info = rel->pgstat_info;
                int                     nest_level = GetCurrentTransactionNestLevel();
 
+               /* We have to log the effect at the proper transactional level */
                if (pgstat_info->trans == NULL ||
                        pgstat_info->trans->nest_level != nest_level)
                        add_tabstat_xact_level(pgstat_info, nest_level);
@@ -2405,13 +2403,12 @@ pgstat_count_heap_update(Relation rel, bool hot)
 void
 pgstat_count_heap_delete(Relation rel)
 {
-       PgStat_TableStatus *pgstat_info = rel->pgstat_info;
-
-       if (pgstat_info != NULL)
+       if (pgstat_relation_should_count(rel))
        {
-               /* We have to log the effect at the proper transactional level */
+               PgStat_TableStatus *pgstat_info = rel->pgstat_info;
                int                     nest_level = GetCurrentTransactionNestLevel();
 
+               /* We have to log the effect at the proper transactional level */
                if (pgstat_info->trans == NULL ||
                        pgstat_info->trans->nest_level != nest_level)
                        add_tabstat_xact_level(pgstat_info, nest_level);
@@ -2463,13 +2460,12 @@ pgstat_truncdrop_restore_counters(PgStat_TableXactStatus *trans)
 void
 pgstat_count_truncate(Relation rel)
 {
-       PgStat_TableStatus *pgstat_info = rel->pgstat_info;
-
-       if (pgstat_info != NULL)
+       if (pgstat_relation_should_count(rel))
        {
-               /* We have to log the effect at the proper transactional level */
+               PgStat_TableStatus *pgstat_info = rel->pgstat_info;
                int                     nest_level = GetCurrentTransactionNestLevel();
 
+               /* We have to log the effect at the proper transactional level */
                if (pgstat_info->trans == NULL ||
                        pgstat_info->trans->nest_level != nest_level)
                        add_tabstat_xact_level(pgstat_info, nest_level);
@@ -2492,10 +2488,12 @@ pgstat_count_truncate(Relation rel)
 void
 pgstat_update_heap_dead_tuples(Relation rel, int delta)
 {
-       PgStat_TableStatus *pgstat_info = rel->pgstat_info;
+       if (pgstat_relation_should_count(rel))
+       {
+               PgStat_TableStatus *pgstat_info = rel->pgstat_info;
 
-       if (pgstat_info != NULL)
                pgstat_info->t_counts.t_delta_dead_tuples -= delta;
+       }
 }
 
 /*
index 95f595353dcde33a02e14c39a0fda196c26b664a..3499c86dbfeedd408c11498e8a4fbfa8afc3cf67 100644 (file)
@@ -1104,41 +1104,44 @@ extern PgStat_BackendFunctionEntry *find_funcstat_entry(Oid func_id);
 
 extern void pgstat_initstats(Relation rel);
 
+#define pgstat_relation_should_count(rel)                           \
+       (likely((rel)->pgstat_info != NULL))
+
 /* nontransactional event counts are simple enough to inline */
 
 #define pgstat_count_heap_scan(rel)                                                                    \
        do {                                                                                                                    \
-               if ((rel)->pgstat_info != NULL)                                                         \
+               if (pgstat_relation_should_count(rel))                                          \
                        (rel)->pgstat_info->t_counts.t_numscans++;                              \
        } while (0)
 #define pgstat_count_heap_getnext(rel)                                                         \
        do {                                                                                                                    \
-               if ((rel)->pgstat_info != NULL)                                                         \
+               if (pgstat_relation_should_count(rel))                                          \
                        (rel)->pgstat_info->t_counts.t_tuples_returned++;               \
        } while (0)
 #define pgstat_count_heap_fetch(rel)                                                           \
        do {                                                                                                                    \
-               if ((rel)->pgstat_info != NULL)                                                         \
+               if (pgstat_relation_should_count(rel))                                          \
                        (rel)->pgstat_info->t_counts.t_tuples_fetched++;                \
        } while (0)
 #define pgstat_count_index_scan(rel)                                                           \
        do {                                                                                                                    \
-               if ((rel)->pgstat_info != NULL)                                                         \
+               if (pgstat_relation_should_count(rel))                                          \
                        (rel)->pgstat_info->t_counts.t_numscans++;                              \
        } while (0)
 #define pgstat_count_index_tuples(rel, n)                                                      \
        do {                                                                                                                    \
-               if ((rel)->pgstat_info != NULL)                                                         \
+               if (pgstat_relation_should_count(rel))                                          \
                        (rel)->pgstat_info->t_counts.t_tuples_returned += (n);  \
        } while (0)
 #define pgstat_count_buffer_read(rel)                                                          \
        do {                                                                                                                    \
-               if ((rel)->pgstat_info != NULL)                                                         \
+               if (pgstat_relation_should_count(rel))                                          \
                        (rel)->pgstat_info->t_counts.t_blocks_fetched++;                \
        } while (0)
 #define pgstat_count_buffer_hit(rel)                                                           \
        do {                                                                                                                    \
-               if ((rel)->pgstat_info != NULL)                                                         \
+               if (pgstat_relation_should_count(rel))                                          \
                        (rel)->pgstat_info->t_counts.t_blocks_hit++;                    \
        } while (0)
 #define pgstat_count_buffer_read_time(n)                                                       \