The following patch should allow UPDATE_INTERVAL to be specified on the
authorBruce Momjian <bruce@momjian.us>
Tue, 19 Apr 2005 03:35:15 +0000 (03:35 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 19 Apr 2005 03:35:15 +0000 (03:35 +0000)
command line. We find this useful because we frequently deal with
thousands of tables in an environment where neither the databases nor
the tables are updated frequently. This helps allow us to cut down on
the overhead of updating the list for every other primary loop of
pg_autovacuum.

I chose -i as the command-line argument and documented it briefly in
the README.

The patch was applied to the 7.4.7 version of pg_autovacuum in contrib.

Thomas F.O'Connell

contrib/pg_autovacuum/README.pg_autovacuum
contrib/pg_autovacuum/pg_autovacuum.c
contrib/pg_autovacuum/pg_autovacuum.h

index 64c5eb5353ac99f9102c0e8e544f8086cb7c2384..f20842135b8af81ff1a7de261f2055ec6924876a 100644 (file)
@@ -123,6 +123,10 @@ pg_autovacuum has the following optional arguments:
 -V vacuum scaling factor: see "Vacuum and Analyze" below.
 -a analyze base threshold: see "Vacuum and Analyze" below.
 -A analyze scaling factor: see "Vacuum and Analyze" below.
+-i update interval: how often (in terms of iterations of the primary loop
+   over the database list) to update the database list. The default is 2,
+   which means the list will be updated before every other pass through
+   the database list.
 -L log file: Name of file to which output is submitted, otherwise STDERR
 -U username: Username pg_autovacuum will use to connect with, if not
    specified the current username is used.
@@ -157,6 +161,7 @@ the time of writing they are:
 -A 1   (half of -V if not specified)
 -s 300 (5 minutes)
 -S 2
+-i 2
 
 The following arguments are used on Windows only:
 
index 0d409103b3f8c374e4707478b85f257da0ba7975..24eae51f7d99cac26e2e2109a4c1b3df8ec49273 100644 (file)
@@ -1103,6 +1103,7 @@ get_cmd_args(int argc, char *argv[])
        args->analyze_base_threshold = -1;
        args->analyze_scaling_factor = -1;
        args->debug = AUTOVACUUM_DEBUG;
+       args->update_interval = UPDATE_INTERVAL;
 #ifndef WIN32
        args->daemonize = 0;
 #else
@@ -1157,6 +1158,9 @@ get_cmd_args(int argc, char *argv[])
                        case 'A':
                                args->analyze_scaling_factor = atof(optarg);
                                break;
+                       case 'i':
+                               args->update_interval = atoi(optarg);
+                               break;
                        case 'c':
                                args->av_vacuum_cost_delay = atoi(optarg);
                                break;
@@ -1341,6 +1345,8 @@ print_cmd_args(void)
        log_entry(logbuffer, LVL_INFO);
        sprintf(logbuffer, "  args->analyze_scaling_factor=%f", args->analyze_scaling_factor);
        log_entry(logbuffer, LVL_INFO);
+       sprintf(logbuffer, "  args->update_interval=%i", args->update_interval);
+       log_entry(logbuffer, LVL_INFO);
 
        if (args->av_vacuum_cost_delay != -1)
                sprintf(logbuffer, "  args->av_vacuum_cost_delay=%d", args->av_vacuum_cost_delay);
@@ -1646,8 +1652,8 @@ VacuumLoop(int argc, char **argv)
                        }
                }
 
-               if (loops % UPDATE_INTERVAL == 0)               /* Update the list if it's
-                                                                                                * time */
+               if (loops % args->update_interval == 0)         /* Update the list if it's
+                                                                                                        * time */
                        update_db_list(db_list);        /* Add and remove databases from
                                                                                 * the list */
 
@@ -1661,8 +1667,8 @@ VacuumLoop(int argc, char **argv)
 
                        if (dbs->conn != NULL)
                        {
-                               if (loops % UPDATE_INTERVAL == 0)               /* Update the list if
-                                                                                                                * it's time */
+                               if (loops % args->update_interval == 0)         /* Update the list if
+                                                                                                                        * it's time */
                                        update_table_list(dbs);         /* Add and remove tables
                                                                                                 * from the list */
 
index b149b3a5f230e8e3c4e29f788637767fff7df096..31ba17954455a4645dde3a745c98ef5920463f0c 100644 (file)
@@ -44,6 +44,7 @@ typedef struct cmdargs
 {
        int                     vacuum_base_threshold,
                                analyze_base_threshold,
+                               update_interval,
                                sleep_base_value,
                                debug,