]> granicus.if.org Git - postgresql/commitdiff
Increase upper limit for vacuum_cleanup_index_scale_factor
authorAlexander Korotkov <akorotkov@postgresql.org>
Tue, 26 Jun 2018 12:00:51 +0000 (15:00 +0300)
committerAlexander Korotkov <akorotkov@postgresql.org>
Tue, 26 Jun 2018 12:00:51 +0000 (15:00 +0300)
Upper limits for vacuum_cleanup_index_scale_factor GUC and reloption
were initially set to 100.0 in 857f9c36.  However, after further
discussion, it appears that some users like to disable B-tree cleanup
index scan completely (assuming there are no deleted pages).

vacuum_cleanup_index_scale_factor is used barely to protect against
stalled index statistics.  And after detailed consideration it appears
that risk of stalled index statistics is low.  And it would be nice to
allow advanced users setting higher values of
vacuum_cleanup_index_scale_factor.  So, set upper limit for these
GUC and reloption to DBL_MAX.

Author: Alexander Korotkov
Reviewed-by: Masahiko Sawada
Discussion: https://postgr.es/m/CAC8Q8tJCb%3DgxhzcV7T6ctx7PY-Ux1oA-AsTJc6cAVNsQiYcCzA%40mail.gmail.com

doc/src/sgml/config.sgml
src/backend/access/common/reloptions.c
src/backend/access/nbtree/nbtree.c
src/backend/utils/misc/guc.c
src/test/regress/expected/btree_index.out

index 7bfbc871098397c2594427d2e3600477ef1e097a..574837889b34639fc55d10dcee162dd8c35b509e 100644 (file)
@@ -6989,7 +6989,7 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
        </para>
 
        <para>
-        The value can range from <literal>0</literal> to <literal>100</literal>.
+        The value should be non-negative.
         When <varname>vacuum_cleanup_index_scale_factor</varname> is set to
         <literal>0</literal>, index scans are never skipped during
         <command>VACUUM</command> cleanup. The default value is <literal>0.1</literal>.
index e0c9c3431c670a6e9aec7849c95c44a2d1aa5a2f..5671bb6830de2a383f9cfa1fb3b3c6047b692e13 100644 (file)
@@ -416,7 +416,7 @@ static relopt_real realRelOpts[] =
                        RELOPT_KIND_BTREE,
                        ShareUpdateExclusiveLock
                },
-               -1, 0.0, 100.0
+               -1, 0.0, DBL_MAX
        },
        /* list terminator */
        {{NULL}}
index 27a3032e42ab826e4f6f2ad82529aab37c46f25f..cdd0403e1d86e19cea90e0e584129135119b45a5 100644 (file)
@@ -816,6 +816,7 @@ _bt_vacuum_needs_cleanup(IndexVacuumInfo *info)
        {
                StdRdOptions *relopts;
                float8          cleanup_scale_factor;
+               float8          prev_num_heap_tuples;
 
                /*
                 * If table receives enough insertions and no cleanup was performed,
@@ -829,11 +830,12 @@ _bt_vacuum_needs_cleanup(IndexVacuumInfo *info)
                                                                relopts->vacuum_cleanup_index_scale_factor >= 0)
                        ? relopts->vacuum_cleanup_index_scale_factor
                        : vacuum_cleanup_index_scale_factor;
+               prev_num_heap_tuples = metad->btm_last_cleanup_num_heap_tuples;
 
                if (cleanup_scale_factor <= 0 ||
-                       metad->btm_last_cleanup_num_heap_tuples < 0 ||
-                       info->num_heap_tuples > (1.0 + cleanup_scale_factor) *
-                       metad->btm_last_cleanup_num_heap_tuples)
+                       prev_num_heap_tuples < 0 ||
+                       (info->num_heap_tuples - prev_num_heap_tuples) /
+                       prev_num_heap_tuples >= cleanup_scale_factor)
                        result = true;
        }
 
index 859ef931e712996beace2f4c0f29fe7335e08293..daa2894c5af3209d24907ac23edd9505fd1c8426 100644 (file)
@@ -3253,7 +3253,7 @@ static struct config_real ConfigureNamesReal[] =
                        NULL
                },
                &vacuum_cleanup_index_scale_factor,
-               0.1, 0.0, 100.0,
+               0.1, 0.0, DBL_MAX,
                NULL, NULL, NULL
        },
 
index 4778ac14a4c136338af4184954bfb0fa3ebcda3d..1ad33190a28e5966591ca74d67bb9afd37eaeda4 100644 (file)
@@ -165,7 +165,7 @@ select reloptions from pg_class WHERE oid = 'btree_idx1'::regclass;
 -- Fail while setting improper values
 create index btree_idx_err on btree_test(a) with (vacuum_cleanup_index_scale_factor = -10.0);
 ERROR:  value -10.0 out of bounds for option "vacuum_cleanup_index_scale_factor"
-DETAIL:  Valid values are between "0.000000" and "100.000000".
+DETAIL:  Valid values are between "0.000000" and "179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000".
 create index btree_idx_err on btree_test(a) with (vacuum_cleanup_index_scale_factor = 100.0);
 create index btree_idx_err on btree_test(a) with (vacuum_cleanup_index_scale_factor = 'string');
 ERROR:  invalid value for floating point option "vacuum_cleanup_index_scale_factor": string