From c63913ca7d1df241149a02fddf9819952b998028 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 8 May 2018 20:17:43 -0400 Subject: [PATCH] Improve inefficient regexes in vacuumdb TAP test. The regexes used in 102_vacuumdb_stages.pl to check the postmaster log for expected output contained several places with ".*.*", which is underdetermined and can cause exponential runtime growth in Perl's regex matcher (since it's not bright enough not to waste time seeing whether different splits of the same substring would allow a match). We were fortunate that the amount of text in the postmaster log was generally not enough to make the runtime go to the moon; although commit 6271fceb8 had been on the hairy edge of an obvious problem, thanks to its increasing the default log verbosity to DEBUG1. Experimentation shows that anyone who tried to run this test case with an even higher log verbosity would have been in for serious pain. But even at default logging level, fixing this saves several hundred ms on my workstation, more on slower buildfarm members. Remove the extra ".*"s, restoring more-or-less-linear matching speed. Back-patch to 9.4 where the test case was added, mostly in case anyone tries to do related debugging in a back branch. Discussion: https://postgr.es/m/32459.1525657786@sss.pgh.pa.us --- src/bin/scripts/t/102_vacuumdb_stages.pl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bin/scripts/t/102_vacuumdb_stages.pl b/src/bin/scripts/t/102_vacuumdb_stages.pl index 392944143b..17a7fc720d 100644 --- a/src/bin/scripts/t/102_vacuumdb_stages.pl +++ b/src/bin/scripts/t/102_vacuumdb_stages.pl @@ -10,26 +10,26 @@ $node->start; $node->issues_sql_like( [ 'vacuumdb', '--analyze-in-stages', 'postgres' ], - qr/.*statement:\ SET\ default_statistics_target=1;\ SET\ vacuum_cost_delay=0; - .*statement:\ ANALYZE.* + qr/statement:\ SET\ default_statistics_target=1;\ SET\ vacuum_cost_delay=0; + .*statement:\ ANALYZE .*statement:\ SET\ default_statistics_target=10;\ RESET\ vacuum_cost_delay; - .*statement:\ ANALYZE.* + .*statement:\ ANALYZE .*statement:\ RESET\ default_statistics_target; .*statement:\ ANALYZE/sx, 'analyze three times'); $node->issues_sql_like( [ 'vacuumdb', '--analyze-in-stages', '--all' ], - qr/.*statement:\ SET\ default_statistics_target=1;\ SET\ vacuum_cost_delay=0; - .*statement:\ ANALYZE.* + qr/statement:\ SET\ default_statistics_target=1;\ SET\ vacuum_cost_delay=0; + .*statement:\ ANALYZE .*statement:\ SET\ default_statistics_target=1;\ SET\ vacuum_cost_delay=0; - .*statement:\ ANALYZE.* + .*statement:\ ANALYZE .*statement:\ SET\ default_statistics_target=10;\ RESET\ vacuum_cost_delay; - .*statement:\ ANALYZE.* + .*statement:\ ANALYZE .*statement:\ SET\ default_statistics_target=10;\ RESET\ vacuum_cost_delay; - .*statement:\ ANALYZE.* + .*statement:\ ANALYZE .*statement:\ RESET\ default_statistics_target; - .*statement:\ ANALYZE.* + .*statement:\ ANALYZE .*statement:\ RESET\ default_statistics_target; .*statement:\ ANALYZE/sx, 'analyze more than one database in stages');