Report wait event for cost-based vacuum delay.
authorAndres Freund <[email protected]>
Tue, 24 Mar 2020 05:19:56 +0000 (22:19 -0700)
committerAndres Freund <[email protected]>
Tue, 24 Mar 2020 05:53:22 +0000 (22:53 -0700)
Author: Justin Pryzby
Discussion: https://postgr.es/m/20200321040750[email protected]

doc/src/sgml/monitoring.sgml
src/backend/commands/vacuum.c
src/backend/postmaster/pgstat.c
src/include/pgstat.h

index fd3b6b9f38c417c23a4df946bf8ba932c979ba8d..e87fb9634e572294d8e2df1e10752a76f30c5946 100644 (file)
@@ -1515,6 +1515,8 @@ postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: ser
           (<filename>pg_wal</filename>, archive or stream) before trying
           again to retrieve WAL data, at recovery.
          </entry>
+         <entry><literal>VacuumDelay</literal></entry>
+         <entry>Waiting in a cost-based vacuum delay point.</entry>
         </row>
         <row>
          <entry morerows="68"><literal>IO</literal></entry>
index d625d17bf46dd0bb1a46c5d2717a0a45c32d64ed..59731d687f6a76d23daae13407476526b9678ceb 100644 (file)
@@ -2019,7 +2019,9 @@ vacuum_delay_point(void)
        if (msec > VacuumCostDelay * 4)
            msec = VacuumCostDelay * 4;
 
+       pgstat_report_wait_start(WAIT_EVENT_VACUUM_DELAY);
        pg_usleep((long) (msec * 1000));
+       pgstat_report_wait_end();
 
        VacuumCostBalance = 0;
 
index 5a8c4abe8a2345e33cf4ca830f3f5f20b4f7f6e8..4763c24be944753ded9e2d656a06221b663456da 100644 (file)
@@ -3830,6 +3830,9 @@ pgstat_get_wait_timeout(WaitEventTimeout w)
        case WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL:
            event_name = "RecoveryRetrieveRetryInterval";
            break;
+       case WAIT_EVENT_VACUUM_DELAY:
+           event_name = "VacuumDelay";
+           break;
            /* no default case, so that compiler will warn */
    }
 
index 5d3b4786577a883c5eccab7f653ef91ffd1dd19d..a07012bf4bac39dd5b0d09608bb3fcaf2da2e7b5 100644 (file)
@@ -850,7 +850,8 @@ typedef enum
    WAIT_EVENT_BASE_BACKUP_THROTTLE = PG_WAIT_TIMEOUT,
    WAIT_EVENT_PG_SLEEP,
    WAIT_EVENT_RECOVERY_APPLY_DELAY,
-   WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL
+   WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL,
+   WAIT_EVENT_VACUUM_DELAY
 } WaitEventTimeout;
 
 /* ----------