postgres.git / summary / log / commit / refs

commit    4072d91f24681d8d9f0cbdfd58c50ce30f4f1331
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Mon Jan 12 20:13:31 2015 +0000

    Avoid unexpected slowdown in vacuum regression test.
    
    I noticed the "vacuum" regression test taking really significantly longer
    than it used to on a slow machine.  Investigation pointed the finger at
    commit e415b469b33ba328765e39fd62edcd28f30d9c3c, which added creation of
    an index using an extremely expensive index function.  That function was
    evidently meant to be applied only twice ... but the test re-used an
    existing test table, which up till a couple lines before that had had over
    two thousand rows.  Depending on timing of the concurrent regression tests,
    the intervening VACUUMs might have been unable to remove those
    recently-dead rows, and then the index build would need to create index
    entries for them too, leading to the wrap_do_analyze() function being
    executed 2000+ times not twice.  Avoid this by using a different table
    that is guaranteed to have only the intended two rows in it.
    
    Back-patch to 9.0, like the commit that created the problem.


src/test/regress/expected/vacuum.out | 8 ++++---- src/test/regress/sql/vacuum.sql | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/regress/expected/vacuum.out b/src/test/regress/expected/vacuum.out index 4f2f5e228f4..d2d75038286 100644 --- a/src/test/regress/expected/vacuum.out +++ b/src/test/regress/expected/vacuum.out @@ -65,9 +65,9 @@ CREATE FUNCTION do_analyze() RETURNS VOID VOLATILE LANGUAGE SQL AS 'ANALYZE pg_am'; CREATE FUNCTION wrap_do_analyze(c INT) RETURNS INT IMMUTABLE LANGUAGE SQL AS 'SELECT $1 FROM do_analyze()'; -CREATE INDEX ON vactst(wrap_do_analyze(i)); -INSERT INTO vactst VALUES (1), (2); -ANALYZE vactst; +CREATE INDEX ON vaccluster(wrap_do_analyze(i)); +INSERT INTO vaccluster VALUES (1), (2); +ANALYZE vaccluster; ERROR: ANALYZE cannot be executed from VACUUM or ANALYZE CONTEXT: SQL function "do_analyze" statement 1 SQL function "wrap_do_analyze" statement 1 @@ -75,9 +75,9 @@ VACUUM FULL pg_am; VACUUM FULL pg_class; VACUUM FULL pg_database; VACUUM FULL vaccluster; -VACUUM FULL vactst; ERROR: ANALYZE cannot be executed from VACUUM or ANALYZE CONTEXT: SQL function "do_analyze" statement 1 SQL function "wrap_do_analyze" statement 1 +VACUUM FULL vactst; DROP TABLE vaccluster; DROP TABLE vactst; diff --git a/src/test/regress/sql/vacuum.sql b/src/test/regress/sql/vacuum.sql index 4b624fe379e..f8412016cf3 100644 --- a/src/test/regress/sql/vacuum.sql +++ b/src/test/regress/sql/vacuum.sql @@ -50,9 +50,9 @@ CREATE FUNCTION do_analyze() RETURNS VOID VOLATILE LANGUAGE SQL AS 'ANALYZE pg_am'; CREATE FUNCTION wrap_do_analyze(c INT) RETURNS INT IMMUTABLE LANGUAGE SQL AS 'SELECT $1 FROM do_analyze()'; -CREATE INDEX ON vactst(wrap_do_analyze(i)); -INSERT INTO vactst VALUES (1), (2); -ANALYZE vactst; +CREATE INDEX ON vaccluster(wrap_do_analyze(i)); +INSERT INTO vaccluster VALUES (1), (2); +ANALYZE vaccluster; VACUUM FULL pg_am; VACUUM FULL pg_class; [parent: 8f2d99be8f27]