diff --git a/docker/gitlab/patches/testing/005-New-Table-Migration.patch b/docker/gitlab/patches/testing/005-New-Table-Migration.patch
index c608f3c80df02fd907a88635de57f72e1baacfe4..c1299f00ea4faec7c801ffe02609e90e7f4483df 100644
--- a/docker/gitlab/patches/testing/005-New-Table-Migration.patch
+++ b/docker/gitlab/patches/testing/005-New-Table-Migration.patch
@@ -16,20 +16,18 @@ new file mode 100644
index 00000000000..71d1890dba8
--- /dev/null
+++ b/db/migrate/20210602144718_create_test_table.rb
-@@ -0,0 +1,20 @@
+@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class CreateTestTable < Gitlab::Database::Migration[2.1]
+ include Gitlab::Database::MigrationHelpers
++
+ def up
-+ create_table_with_constraints :test_tables do |t|
++ create_table :test_tables do |t|
+ t.bigint :stars, default: 0, null: false
+ t.timestamps
-+ t.text :title
-+ t.text :notes
-+
-+ t.text_limit :title, 128
-+ t.text_limit :notes, 1024
++ t.text :title, limit: 128
++ t.text :notes, limit: 1024
+ end
+ end
+
@@ -97,4 +95,3 @@ index d8add15b68d..c6524149b4a 100644
--
2.31.1
-
diff --git a/notifier/background_migration.rb b/notifier/background_migration.rb
index 4ae89a366b55bcd26c1bd915cafcf8227b6942f4..ffcaa56861128b68ca52da879b71265dd6de6c03 100644
--- a/notifier/background_migration.rb
+++ b/notifier/background_migration.rb
@@ -16,6 +16,10 @@ class BackgroundMigration
@batches = batches
end
+ def time_to_complete
+ @time_to_complete ||= batches.first.time_to_complete
+ end
+
def queries
matching_queries = batches.flat_map(&:queries).group_by(&:query)
diff --git a/notifier/json_payload.rb b/notifier/json_payload.rb
index 79d294e27b097e10cd509ed380baadde548ca561..eabd8037129b31447bbc08c4b2926aab1c209e1d 100644
--- a/notifier/json_payload.rb
+++ b/notifier/json_payload.rb
@@ -3,9 +3,9 @@ require 'json'
require "base64"
class JsonPayload
- VERSION = 2
+ VERSION = 2.1
- ATTRIBUTES = %w[version walltime total_database_size_change success].freeze
+ ATTRIBUTES = %w[version walltime total_database_size_change success meta].freeze
def encode(result)
data = result.migrations_from_branch.map do |migration|
diff --git a/notifier/migration.rb b/notifier/migration.rb
index c4510aab9ea8997d32db3aeb88e4616d21a9a101..3c11bff27036ffd8ed0d98d895a071b9518675d0 100644
--- a/notifier/migration.rb
+++ b/notifier/migration.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
+require_relative 'migration_meta'
+
class Migration
REGULAR_MIGRATION_GUIDANCE_SECONDS = 3.minutes.freeze
POST_DEPLOY_MIGRATION_GUIDANCE_SECONDS = 10.minutes.freeze
@@ -57,7 +59,7 @@ class Migration
attr_accessor :version, :name, :statistics, :total_database_size_change,
:queries, :type, :walltime, :intro_on_current_branch, :success,
- :query_executions
+ :query_executions, :meta
# So that migration durations can be plotted directly in execution histogram charts
alias_method :duration, :walltime
@@ -183,6 +185,12 @@ class Migration
!success? || exceeds_time_guidance? || has_queries_with_warnings?
end
+ def time_to_complete
+ days, hours, minutes = meta.time_to_complete
+
+ "#{days} day(s), #{hours} hour(s) and #{minutes} minute(s)"
+ end
+
def init_stats(stats)
unless stats
@was_run = false
@@ -194,6 +202,7 @@ class Migration
@walltime = stats['walltime'].seconds
@success = stats['success']
@statistics = stats
+ @meta = MigrationMeta.new(**stats['meta'].to_h.symbolize_keys)
init_queries(stats)
end
diff --git a/notifier/migration_meta.rb b/notifier/migration_meta.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b6c05bdc5c24552ca1105a57d67ed7d154e78dc6
--- /dev/null
+++ b/notifier/migration_meta.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+class MigrationMeta
+ MIN_VALUE = 1
+
+ def initialize(total_tuple_count: nil, max_batch_size: nil, interval: nil)
+ @total_tuple_count = [total_tuple_count.to_i, MIN_VALUE].max
+ @max_batch_size = [max_batch_size.to_i, MIN_VALUE].max
+ @interval = [interval.to_i, MIN_VALUE].max
+ end
+
+ # Estimates the time that migration will take to complete in production.
+ #
+ # @example [2, 14, 45] => 2 days, 14 hours and 45 minutes
+ #
+ # @return [Array] array containing [days, hours, minutes]
+ def time_to_complete
+ minutes, _ = total_time_estimation.divmod(60)
+ hours, minutes = minutes.divmod(60)
+ days, hours = hours.divmod(24)
+
+ [days, hours, minutes]
+ end
+
+ private
+
+ attr_reader :total_tuple_count, :max_batch_size, :interval
+
+ def total_time_estimation
+ @total_time_estimation ||= total_tuple_count / max_batch_size * interval.seconds
+ end
+end
diff --git a/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/migration-stats.json b/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/migration-stats.json
index 20c72adfc3d0bdaca25eae700deab5a50c9955df..861768cba3b4a76e910e27a8f9c75d28a7d45af9 100644
--- a/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/migration-stats.json
+++ b/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/migration-stats.json
@@ -1 +1 @@
-{"version":20210602144718,"name":"CreateTestTable","walltime":1.9109571874141693,"success":true,"total_database_size_change":24576,"query_statistics":[{"query":"select pg_database_size(current_database()) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/observers/total_database_size_change.rb:25:in `get_total_database_size'*/","calls":1,"total_time":150.822085,"max_time":150.822085,"mean_time":150.822085,"rows":1},{"query":"CREATE TABLE \"test_tables\" (\"id\" bigserial primary key, \"stars\" bigint DEFAULT 0 NOT NULL, \"created_at\" timestamp(6) NOT NULL, \"updated_at\" timestamp(6) NOT NULL, \"title\" text, \"notes\" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'*/","calls":1,"total_time":122.94353,"max_time":122.94353,"mean_time":122.94353,"rows":0},{"query":"SELECT \"ar_internal_metadata\".* FROM \"ar_internal_metadata\" WHERE \"ar_internal_metadata\".\"key\" = $1 LIMIT $2 /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":12.461834999999999,"max_time":12.461834999999999,"mean_time":12.461834999999999,"rows":1},{"query":"SELECT a.attname, format_type(a.atttypid, a.atttypmod),\n pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,\n c.collname, col_description(a.attrelid, a.attnum) AS comment\n FROM pg_attribute a\n LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum\n LEFT JOIN pg_type t ON a.atttypid = t.oid\n LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation \u003c\u003e t.typcollation\n WHERE a.attrelid = $1::regclass\n AND a.attnum \u003e $2 AND NOT a.attisdropped\n ORDER BY a.attnum","calls":1,"total_time":8.746094,"max_time":8.746094,"mean_time":8.746094,"rows":4},{"query":"ALTER TABLE \"test_tables\"\nADD CONSTRAINT \"check_0770ba173a\" CHECK (char_length(\"title\") \u003c= 128),\nADD CONSTRAINT \"check_9cfc473dbc\" CHECK (char_length(\"notes\") \u003c= 1024)\n /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'*/","calls":1,"total_time":8.345117,"max_time":8.345117,"mean_time":8.345117,"rows":0},{"query":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas($1)) AND c.relkind IN ($2,$3,$4,$5,$6)","calls":1,"total_time":3.913972,"max_time":3.913972,"mean_time":3.913972,"rows":603},{"query":"SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":3.0508900000000003,"max_time":3.0508900000000003,"mean_time":3.0508900000000003,"rows":5385},{"query":"INSERT INTO \"schema_migrations\" (\"version\") VALUES ($1) RETURNING \"version\" /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:332:in `block in transaction'*/","calls":1,"total_time":2.663913,"max_time":2.663913,"mean_time":2.663913,"rows":1},{"query":"select pg_stat_statements_reset() /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/observers/query_statistics.rb:16:in `before'*/","calls":1,"total_time":0.247091,"max_time":0.247091,"mean_time":0.247091,"rows":1},{"query":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas($1)) AND c.relname = $2 AND c.relkind IN ($3,$4)","calls":3,"total_time":0.183331,"max_time":0.085203,"mean_time":0.061110333333333336,"rows":3},{"query":"SELECT t.oid, t.typname\nFROM pg_type as t\nWHERE t.typname IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)\n /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.078373,"max_time":0.078373,"mean_time":0.078373,"rows":10},{"query":"UPDATE \"ar_internal_metadata\" SET \"value\" = $1, \"updated_at\" = $2 WHERE \"ar_internal_metadata\".\"key\" = $3 /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.076856,"max_time":0.076856,"mean_time":0.076856,"rows":1},{"query":"SET SESSION timezone TO 'UTC' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.044863,"max_time":0.044863,"mean_time":0.044863,"rows":0},{"query":"SET SESSION statement_timeout TO '120s' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.038363,"max_time":0.038363,"mean_time":0.038363,"rows":0},{"query":"SET intervalstyle = iso_8601 /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.034559,"max_time":0.034559,"mean_time":0.034559,"rows":0},{"query":"SELECT $1 FROM pg_proc WHERE proname = $2 /*application:test,db_config_name:ci,line:/lib/gitlab/database/schema_helpers.rb:20:in `function_exists?'*/","calls":1,"total_time":0.033893,"max_time":0.033893,"mean_time":0.033893,"rows":1},{"query":"SET standard_conforming_strings = on /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.032853,"max_time":0.032853,"mean_time":0.032853,"rows":0},{"query":"set client_encoding to 'UTF8'","calls":1,"total_time":0.025851,"max_time":0.025851,"mean_time":0.025851,"rows":0},{"query":"set client_encoding to 'unicode'","calls":1,"total_time":0.020529,"max_time":0.020529,"mean_time":0.020529,"rows":0},{"query":"SET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.015339,"max_time":0.015339,"mean_time":0.015339,"rows":0},{"query":"SET client_min_messages TO 'warning' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.013366,"max_time":0.013366,"mean_time":0.013366,"rows":0},{"query":"SELECT pg_try_advisory_lock($1)","calls":1,"total_time":0.013238,"max_time":0.013238,"mean_time":0.013238,"rows":1},{"query":"SELECT pg_advisory_unlock($1)","calls":1,"total_time":0.012585,"max_time":0.012585,"mean_time":0.012585,"rows":1},{"query":"RESET idle_in_transaction_session_timeout","calls":1,"total_time":0.009762,"max_time":0.009762,"mean_time":0.009762,"rows":0},{"query":"SELECT $1::regtype::oid","calls":1,"total_time":0.009282,"max_time":0.009282,"mean_time":0.009282,"rows":1},{"query":"SELECT current_database()","calls":1,"total_time":0.009191000000000001,"max_time":0.009191000000000001,"mean_time":0.009191000000000001,"rows":1},{"query":"SHOW TIME ZONE /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.006331,"max_time":0.006331,"mean_time":0.006331,"rows":0},{"query":"COMMIT /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:365:in `commit'*/","calls":2,"total_time":0.0043560000000000005,"max_time":0.003024,"mean_time":0.0021780000000000002,"rows":0},{"query":"BEGIN /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.002924,"max_time":0.002924,"mean_time":0.002924,"rows":0},{"query":"SAVEPOINT active_record_1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.002924,"max_time":0.002924,"mean_time":0.002924,"rows":0},{"query":"RELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/","calls":1,"total_time":0.002782,"max_time":0.002782,"mean_time":0.002782,"rows":0},{"query":"RESET lock_timeout /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.002119,"max_time":0.002119,"mean_time":0.002119,"rows":0},{"query":"BEGIN /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.001901,"max_time":0.001901,"mean_time":0.001901,"rows":0}]}
\ No newline at end of file
+{"version":20210602144718,"name":"CreateTestTable","walltime":1.9109571874141693,"success":true,"total_database_size_change":24576,"query_statistics":[{"query":"select pg_database_size(current_database()) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/observers/total_database_size_change.rb:25:in `get_total_database_size'*/","calls":1,"total_time":150.822085,"max_time":150.822085,"mean_time":150.822085,"rows":1},{"query":"CREATE TABLE \"test_tables\" (\"id\" bigserial primary key, \"stars\" bigint DEFAULT 0 NOT NULL, \"created_at\" timestamp(6) NOT NULL, \"updated_at\" timestamp(6) NOT NULL, \"title\" text, \"notes\" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'*/","calls":1,"total_time":122.94353,"max_time":122.94353,"mean_time":122.94353,"rows":0},{"query":"SELECT \"ar_internal_metadata\".* FROM \"ar_internal_metadata\" WHERE \"ar_internal_metadata\".\"key\" = $1 LIMIT $2 /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":12.461834999999999,"max_time":12.461834999999999,"mean_time":12.461834999999999,"rows":1},{"query":"SELECT a.attname, format_type(a.atttypid, a.atttypmod),\n pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,\n c.collname, col_description(a.attrelid, a.attnum) AS comment\n FROM pg_attribute a\n LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum\n LEFT JOIN pg_type t ON a.atttypid = t.oid\n LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation \u003c\u003e t.typcollation\n WHERE a.attrelid = $1::regclass\n AND a.attnum \u003e $2 AND NOT a.attisdropped\n ORDER BY a.attnum","calls":1,"total_time":8.746094,"max_time":8.746094,"mean_time":8.746094,"rows":4},{"query":"ALTER TABLE \"test_tables\"\nADD CONSTRAINT \"check_0770ba173a\" CHECK (char_length(\"title\") \u003c= 128),\nADD CONSTRAINT \"check_9cfc473dbc\" CHECK (char_length(\"notes\") \u003c= 1024)\n /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'*/","calls":1,"total_time":8.345117,"max_time":8.345117,"mean_time":8.345117,"rows":0},{"query":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas($1)) AND c.relkind IN ($2,$3,$4,$5,$6)","calls":1,"total_time":3.913972,"max_time":3.913972,"mean_time":3.913972,"rows":603},{"query":"SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":3.0508900000000003,"max_time":3.0508900000000003,"mean_time":3.0508900000000003,"rows":5385},{"query":"INSERT INTO \"schema_migrations\" (\"version\") VALUES ($1) RETURNING \"version\" /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:332:in `block in transaction'*/","calls":1,"total_time":2.663913,"max_time":2.663913,"mean_time":2.663913,"rows":1},{"query":"select pg_stat_statements_reset() /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/observers/query_statistics.rb:16:in `before'*/","calls":1,"total_time":0.247091,"max_time":0.247091,"mean_time":0.247091,"rows":1},{"query":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas($1)) AND c.relname = $2 AND c.relkind IN ($3,$4)","calls":3,"total_time":0.183331,"max_time":0.085203,"mean_time":0.061110333333333336,"rows":3},{"query":"SELECT t.oid, t.typname\nFROM pg_type as t\nWHERE t.typname IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)\n /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.078373,"max_time":0.078373,"mean_time":0.078373,"rows":10},{"query":"UPDATE \"ar_internal_metadata\" SET \"value\" = $1, \"updated_at\" = $2 WHERE \"ar_internal_metadata\".\"key\" = $3 /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.076856,"max_time":0.076856,"mean_time":0.076856,"rows":1},{"query":"SET SESSION timezone TO 'UTC' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.044863,"max_time":0.044863,"mean_time":0.044863,"rows":0},{"query":"SET SESSION statement_timeout TO '120s' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.038363,"max_time":0.038363,"mean_time":0.038363,"rows":0},{"query":"SET intervalstyle = iso_8601 /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.034559,"max_time":0.034559,"mean_time":0.034559,"rows":0},{"query":"SELECT $1 FROM pg_proc WHERE proname = $2 /*application:test,db_config_name:ci,line:/lib/gitlab/database/schema_helpers.rb:20:in `function_exists?'*/","calls":1,"total_time":0.033893,"max_time":0.033893,"mean_time":0.033893,"rows":1},{"query":"SET standard_conforming_strings = on /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.032853,"max_time":0.032853,"mean_time":0.032853,"rows":0},{"query":"set client_encoding to 'UTF8'","calls":1,"total_time":0.025851,"max_time":0.025851,"mean_time":0.025851,"rows":0},{"query":"set client_encoding to 'unicode'","calls":1,"total_time":0.020529,"max_time":0.020529,"mean_time":0.020529,"rows":0},{"query":"SET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.015339,"max_time":0.015339,"mean_time":0.015339,"rows":0},{"query":"SET client_min_messages TO 'warning' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.013366,"max_time":0.013366,"mean_time":0.013366,"rows":0},{"query":"SELECT pg_try_advisory_lock($1)","calls":1,"total_time":0.013238,"max_time":0.013238,"mean_time":0.013238,"rows":1},{"query":"SELECT pg_advisory_unlock($1)","calls":1,"total_time":0.012585,"max_time":0.012585,"mean_time":0.012585,"rows":1},{"query":"RESET idle_in_transaction_session_timeout","calls":1,"total_time":0.009762,"max_time":0.009762,"mean_time":0.009762,"rows":0},{"query":"SELECT $1::regtype::oid","calls":1,"total_time":0.009282,"max_time":0.009282,"mean_time":0.009282,"rows":1},{"query":"SELECT current_database()","calls":1,"total_time":0.009191000000000001,"max_time":0.009191000000000001,"mean_time":0.009191000000000001,"rows":1},{"query":"SHOW TIME ZONE /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.006331,"max_time":0.006331,"mean_time":0.006331,"rows":0},{"query":"COMMIT /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:365:in `commit'*/","calls":2,"total_time":0.0043560000000000005,"max_time":0.003024,"mean_time":0.0021780000000000002,"rows":0},{"query":"BEGIN /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.002924,"max_time":0.002924,"mean_time":0.002924,"rows":0},{"query":"SAVEPOINT active_record_1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.002924,"max_time":0.002924,"mean_time":0.002924,"rows":0},{"query":"RELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/","calls":1,"total_time":0.002782,"max_time":0.002782,"mean_time":0.002782,"rows":0},{"query":"RESET lock_timeout /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.002119,"max_time":0.002119,"mean_time":0.002119,"rows":0},{"query":"BEGIN /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.001901,"max_time":0.001901,"mean_time":0.001901,"rows":0}]}
diff --git a/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/migration.log b/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/migration.log
index 6df6c21228e763a2b1f3e6315262bb4e97886548..1d03b48d4b18f5a174b5afddabfd89771d2b4af9 100644
--- a/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/migration.log
+++ b/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/migration.log
@@ -10,13 +10,13 @@ D, [2022-09-30T21:35:15.307263 #407] DEBUG -- : [1m[36mTRANSACTION (40.3ms)
D, [2022-09-30T21:35:15.307923 #407] DEBUG -- : ↳ lib/gitlab/database/with_lock_retries.rb:172:in `execute'
D, [2022-09-30T21:35:15.349481 #407] DEBUG -- : [1m[35m (40.3ms)[0m [1m[35mSET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/[0m
D, [2022-09-30T21:35:15.350006 #407] DEBUG -- : ↳ lib/gitlab/database/with_lock_retries.rb:172:in `execute'
-D, [2022-09-30T21:35:15.558189 #407] DEBUG -- : [1m[35m (163.6ms)[0m [1m[35mCREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title" text, "notes" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'*/[0m
-D, [2022-09-30T21:35:15.558854 #407] DEBUG -- : ↳ lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'
+D, [2022-09-30T21:35:15.558189 #407] DEBUG -- : [1m[35m (163.6ms)[0m [1m[35mCREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title" text, "notes" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'*/[0m
+D, [2022-09-30T21:35:15.558854 #407] DEBUG -- : ↳ lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'
D, [2022-09-30T21:35:15.609068 #407] DEBUG -- : [1m[35m (48.9ms)[0m [1m[35mALTER TABLE "test_tables"
ADD CONSTRAINT "check_0770ba173a" CHECK (char_length("title") <= 128),
ADD CONSTRAINT "check_9cfc473dbc" CHECK (char_length("notes") <= 1024)
- /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'*/[0m
-D, [2022-09-30T21:35:15.609659 #407] DEBUG -- : ↳ lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'
+ /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'*/[0m
+D, [2022-09-30T21:35:15.609659 #407] DEBUG -- : ↳ lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'
D, [2022-09-30T21:35:15.651807 #407] DEBUG -- : [1m[36mTRANSACTION (40.9ms)[0m [1m[35mRELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/[0m
D, [2022-09-30T21:35:15.652541 #407] DEBUG -- : ↳ lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'
D, [2022-09-30T21:35:15.693612 #407] DEBUG -- : [1m[35m (40.4ms)[0m [1m[35mRESET idle_in_transaction_session_timeout; RESET lock_timeout /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/[0m
diff --git a/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/query-details.json b/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/query-details.json
index 04924a66619fe85b9db371d9de900721c94748a9..1ef38a29887e9ef7d4e096b51f7ee9d4cb77d678 100644
--- a/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/query-details.json
+++ b/notifier/spec/fixtures/migration-testing/v4/ci/up/CreateTestTable/query-details.json
@@ -1 +1 @@
-[{"start_time":"2022-09-30T21:35:14.378819+00:00","end_time":"2022-09-30T21:35:14.420266+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relname = 'schema_migrations' AND c.relkind IN ('r','p')","binds":[]},{"start_time":"2022-09-30T21:35:14.421989+00:00","end_time":"2022-09-30T21:35:14.462962+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relname = 'ar_internal_metadata' AND c.relkind IN ('r','p')","binds":[]},{"start_time":"2022-09-30T21:35:14.463254+00:00","end_time":"2022-09-30T21:35:14.503718+00:00","sql":"SELECT current_database()","binds":[]},{"start_time":"2022-09-30T21:35:14.749223+00:00","end_time":"2022-09-30T21:35:14.789782+00:00","sql":"SET client_min_messages TO 'warning' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.790242+00:00","end_time":"2022-09-30T21:35:14.830588+00:00","sql":"SET standard_conforming_strings = on /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.831059+00:00","end_time":"2022-09-30T21:35:14.871579+00:00","sql":"SET intervalstyle = iso_8601 /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.872066+00:00","end_time":"2022-09-30T21:35:14.914119+00:00","sql":"SET SESSION statement_timeout TO '120s' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.914672+00:00","end_time":"2022-09-30T21:35:14.955523+00:00","sql":"SET SESSION timezone TO 'UTC' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.956158+00:00","end_time":"2022-09-30T21:35:14.998072+00:00","sql":"SELECT t.oid, t.typname\nFROM pg_type as t\nWHERE t.typname IN ('int2', 'int4', 'int8', 'oid', 'float4', 'float8', 'numeric', 'bool', 'timestamp', 'timestamptz')\n /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.998826+00:00","end_time":"2022-09-30T21:35:15.039199+00:00","sql":"SHOW TIME ZONE /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.080047+00:00","end_time":"2022-09-30T21:35:15.121319+00:00","sql":"SELECT pg_try_advisory_lock(3005434223539248480)","binds":[]},{"start_time":"2022-09-30T21:35:15.122172+00:00","end_time":"2022-09-30T21:35:15.203941+00:00","sql":"SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.225024+00:00","end_time":"2022-09-30T21:35:15.266391+00:00","sql":"BEGIN /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.266909+00:00","end_time":"2022-09-30T21:35:15.308936+00:00","sql":"SAVEPOINT active_record_1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.309116+00:00","end_time":"2022-09-30T21:35:15.350152+00:00","sql":"SET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.352018+00:00","end_time":"2022-09-30T21:35:15.393656+00:00","sql":"SELECT 'bigint'::regtype::oid","binds":[]},{"start_time":"2022-09-30T21:35:15.394526+00:00","end_time":"2022-09-30T21:35:15.558990+00:00","sql":"CREATE TABLE \"test_tables\" (\"id\" bigserial primary key, \"stars\" bigint DEFAULT 0 NOT NULL, \"created_at\" timestamp(6) NOT NULL, \"updated_at\" timestamp(6) NOT NULL, \"title\" text, \"notes\" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.560120+00:00","end_time":"2022-09-30T21:35:15.609799+00:00","sql":"ALTER TABLE \"test_tables\"\nADD CONSTRAINT \"check_0770ba173a\" CHECK (char_length(\"title\") \u003c= 128),\nADD CONSTRAINT \"check_9cfc473dbc\" CHECK (char_length(\"notes\") \u003c= 1024)\n /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.610837+00:00","end_time":"2022-09-30T21:35:15.652716+00:00","sql":"RELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.653103+00:00","end_time":"2022-09-30T21:35:15.694280+00:00","sql":"RESET idle_in_transaction_session_timeout; RESET lock_timeout /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.695075+00:00","end_time":"2022-09-30T21:35:15.777347+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relkind IN ('r','v','m','p','f')","binds":[]},{"start_time":"2022-09-30T21:35:15.781366+00:00","end_time":"2022-09-30T21:35:15.826089+00:00","sql":"INSERT INTO \"schema_migrations\" (\"version\") VALUES ('20210602144718') RETURNING \"version\" /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:332:in `block in transaction'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.827156+00:00","end_time":"2022-09-30T21:35:15.868431+00:00","sql":"COMMIT /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:365:in `commit'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.869238+00:00","end_time":"2022-09-30T21:35:15.924595+00:00","sql":"SELECT a.attname, format_type(a.atttypid, a.atttypmod),\n pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,\n c.collname, col_description(a.attrelid, a.attnum) AS comment\n FROM pg_attribute a\n LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum\n LEFT JOIN pg_type t ON a.atttypid = t.oid\n LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation \u003c\u003e t.typcollation\n WHERE a.attrelid = '\"ar_internal_metadata\"'::regclass\n AND a.attnum \u003e 0 AND NOT a.attisdropped\n ORDER BY a.attnum\n","binds":[]},{"start_time":"2022-09-30T21:35:15.926285+00:00","end_time":"2022-09-30T21:35:15.985045+00:00","sql":"SELECT \"ar_internal_metadata\".* FROM \"ar_internal_metadata\" WHERE \"ar_internal_metadata\".\"key\" = 'environment' LIMIT 1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.990380+00:00","end_time":"2022-09-30T21:35:16.039981+00:00","sql":"BEGIN /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:16.040111+00:00","end_time":"2022-09-30T21:35:16.085834+00:00","sql":"UPDATE \"ar_internal_metadata\" SET \"value\" = 'test', \"updated_at\" = '2022-09-30 21:35:15.988876' WHERE \"ar_internal_metadata\".\"key\" = 'environment' /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:16.086767+00:00","end_time":"2022-09-30T21:35:16.142340+00:00","sql":"COMMIT /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:365:in `commit'*/","binds":[]},{"start_time":"2022-09-30T21:35:16.142609+00:00","end_time":"2022-09-30T21:35:16.184183+00:00","sql":"SELECT pg_advisory_unlock(3005434223539248480)","binds":[]},{"start_time":"2022-09-30T21:35:16.225334+00:00","end_time":"2022-09-30T21:35:16.418074+00:00","sql":"select pg_database_size(current_database()) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/observers/total_database_size_change.rb:25:in `get_total_database_size'*/","binds":[]}]
+[{"start_time":"2022-09-30T21:35:14.378819+00:00","end_time":"2022-09-30T21:35:14.420266+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relname = 'schema_migrations' AND c.relkind IN ('r','p')","binds":[]},{"start_time":"2022-09-30T21:35:14.421989+00:00","end_time":"2022-09-30T21:35:14.462962+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relname = 'ar_internal_metadata' AND c.relkind IN ('r','p')","binds":[]},{"start_time":"2022-09-30T21:35:14.463254+00:00","end_time":"2022-09-30T21:35:14.503718+00:00","sql":"SELECT current_database()","binds":[]},{"start_time":"2022-09-30T21:35:14.749223+00:00","end_time":"2022-09-30T21:35:14.789782+00:00","sql":"SET client_min_messages TO 'warning' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.790242+00:00","end_time":"2022-09-30T21:35:14.830588+00:00","sql":"SET standard_conforming_strings = on /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.831059+00:00","end_time":"2022-09-30T21:35:14.871579+00:00","sql":"SET intervalstyle = iso_8601 /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.872066+00:00","end_time":"2022-09-30T21:35:14.914119+00:00","sql":"SET SESSION statement_timeout TO '120s' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.914672+00:00","end_time":"2022-09-30T21:35:14.955523+00:00","sql":"SET SESSION timezone TO 'UTC' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.956158+00:00","end_time":"2022-09-30T21:35:14.998072+00:00","sql":"SELECT t.oid, t.typname\nFROM pg_type as t\nWHERE t.typname IN ('int2', 'int4', 'int8', 'oid', 'float4', 'float8', 'numeric', 'bool', 'timestamp', 'timestamptz')\n /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:14.998826+00:00","end_time":"2022-09-30T21:35:15.039199+00:00","sql":"SHOW TIME ZONE /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.080047+00:00","end_time":"2022-09-30T21:35:15.121319+00:00","sql":"SELECT pg_try_advisory_lock(3005434223539248480)","binds":[]},{"start_time":"2022-09-30T21:35:15.122172+00:00","end_time":"2022-09-30T21:35:15.203941+00:00","sql":"SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.225024+00:00","end_time":"2022-09-30T21:35:15.266391+00:00","sql":"BEGIN /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.266909+00:00","end_time":"2022-09-30T21:35:15.308936+00:00","sql":"SAVEPOINT active_record_1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.309116+00:00","end_time":"2022-09-30T21:35:15.350152+00:00","sql":"SET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.352018+00:00","end_time":"2022-09-30T21:35:15.393656+00:00","sql":"SELECT 'bigint'::regtype::oid","binds":[]},{"start_time":"2022-09-30T21:35:15.394526+00:00","end_time":"2022-09-30T21:35:15.558990+00:00","sql":"CREATE TABLE \"test_tables\" (\"id\" bigserial primary key, \"stars\" bigint DEFAULT 0 NOT NULL, \"created_at\" timestamp(6) NOT NULL, \"updated_at\" timestamp(6) NOT NULL, \"title\" text, \"notes\" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.560120+00:00","end_time":"2022-09-30T21:35:15.609799+00:00","sql":"ALTER TABLE \"test_tables\"\nADD CONSTRAINT \"check_0770ba173a\" CHECK (char_length(\"title\") \u003c= 128),\nADD CONSTRAINT \"check_9cfc473dbc\" CHECK (char_length(\"notes\") \u003c= 1024)\n /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.610837+00:00","end_time":"2022-09-30T21:35:15.652716+00:00","sql":"RELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.653103+00:00","end_time":"2022-09-30T21:35:15.694280+00:00","sql":"RESET idle_in_transaction_session_timeout; RESET lock_timeout /*application:test,db_config_name:ci,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.695075+00:00","end_time":"2022-09-30T21:35:15.777347+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relkind IN ('r','v','m','p','f')","binds":[]},{"start_time":"2022-09-30T21:35:15.781366+00:00","end_time":"2022-09-30T21:35:15.826089+00:00","sql":"INSERT INTO \"schema_migrations\" (\"version\") VALUES ('20210602144718') RETURNING \"version\" /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:332:in `block in transaction'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.827156+00:00","end_time":"2022-09-30T21:35:15.868431+00:00","sql":"COMMIT /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:365:in `commit'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.869238+00:00","end_time":"2022-09-30T21:35:15.924595+00:00","sql":"SELECT a.attname, format_type(a.atttypid, a.atttypmod),\n pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,\n c.collname, col_description(a.attrelid, a.attnum) AS comment\n FROM pg_attribute a\n LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum\n LEFT JOIN pg_type t ON a.atttypid = t.oid\n LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation \u003c\u003e t.typcollation\n WHERE a.attrelid = '\"ar_internal_metadata\"'::regclass\n AND a.attnum \u003e 0 AND NOT a.attisdropped\n ORDER BY a.attnum\n","binds":[]},{"start_time":"2022-09-30T21:35:15.926285+00:00","end_time":"2022-09-30T21:35:15.985045+00:00","sql":"SELECT \"ar_internal_metadata\".* FROM \"ar_internal_metadata\" WHERE \"ar_internal_metadata\".\"key\" = 'environment' LIMIT 1 /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:15.990380+00:00","end_time":"2022-09-30T21:35:16.039981+00:00","sql":"BEGIN /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:16.040111+00:00","end_time":"2022-09-30T21:35:16.085834+00:00","sql":"UPDATE \"ar_internal_metadata\" SET \"value\" = 'test', \"updated_at\" = '2022-09-30 21:35:15.988876' WHERE \"ar_internal_metadata\".\"key\" = 'environment' /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:35:16.086767+00:00","end_time":"2022-09-30T21:35:16.142340+00:00","sql":"COMMIT /*application:test,db_config_name:ci,line:/lib/gitlab/database.rb:365:in `commit'*/","binds":[]},{"start_time":"2022-09-30T21:35:16.142609+00:00","end_time":"2022-09-30T21:35:16.184183+00:00","sql":"SELECT pg_advisory_unlock(3005434223539248480)","binds":[]},{"start_time":"2022-09-30T21:35:16.225334+00:00","end_time":"2022-09-30T21:35:16.418074+00:00","sql":"select pg_database_size(current_database()) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migrations/observers/total_database_size_change.rb:25:in `get_total_database_size'*/","binds":[]}]
diff --git a/notifier/spec/fixtures/migration-testing/v4/expected-comment.txt b/notifier/spec/fixtures/migration-testing/v4/expected-comment.txt
index 96dc740d9a5d08d8e75915f627b47abed3f07864..b60ee581003e7c0ac6cb8ec5c4f9e9c089d56d24 100644
--- a/notifier/spec/fixtures/migration-testing/v4/expected-comment.txt
+++ b/notifier/spec/fixtures/migration-testing/v4/expected-comment.txt
@@ -3,7 +3,7 @@
| | 3 Warnings |
| --------- | -------------------- |
-| :warning: | 20210602144718 - CreateTestTable had a query that [exceeded timing guidelines](https://docs.gitlab.com/ee/development/query_performance.html#timing-guidelines-for-queries). Run time
should not exceed 100ms, but it was 192.8ms. Please consider possible options to improve the query
performance.
CREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint
DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title"
text, "notes" text)
/*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in
`block in create_table_with_constraints'*/
|
+| :warning: | 20210602144718 - CreateTestTable had a query that [exceeded timing guidelines](https://docs.gitlab.com/ee/development/query_performance.html#timing-guidelines-for-queries). Run time
should not exceed 100ms, but it was 192.8ms. Please consider possible options to improve the query
performance.
CREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint
DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title"
text, "notes" text)
/*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in
`block in create_table'*/
|
| :warning: | 20210603233011 - RegularMigrationWithFiveSecondQuery had a query that [exceeded timing
guidelines](https://docs.gitlab.com/ee/development/query_performance.html#timing-guidelines-for-queries). Run time should not exceed 100ms, but it was 5005.1ms. Please consider possible options
to improve the query performance.
SELECT pg_sleep($1)
|
| :warning: | 20990604233157 - MigrationThrowsException did not complete successfully, check the job log
for details |
@@ -45,8 +45,8 @@ Migrations included in this change have been executed on gitlab.com data for tes
| Calls | Total Time | Max Time | Mean Time | Rows | Query |
| ----- | ---------- | -------- | --------- | ---- | ----- |
-| 1 | 192.8 ms | 192.8 ms | 192.8 ms | 0 | CREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title" text, "notes" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'*/
|
-| 1 | 6.6 ms | 6.6 ms | 6.6 ms | 0 | ALTER TABLE "test_tables" ADD CONSTRAINT "check_0770ba173a" CHECK (char_length("title") <= 128), ADD CONSTRAINT "check_9cfc473dbc" CHECK (char_length("notes") <= 1024) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'*/
|
+| 1 | 192.8 ms | 192.8 ms | 192.8 ms | 0 | CREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title" text, "notes" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'*/
|
+| 1 | 6.6 ms | 6.6 ms | 6.6 ms | 0 | ALTER TABLE "test_tables" ADD CONSTRAINT "check_0770ba173a" CHECK (char_length("title") <= 128), ADD CONSTRAINT "check_9cfc473dbc" CHECK (char_length("notes") <= 1024) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'*/
|
| 1 | 0.0 ms | 0.0 ms | 0.0 ms | 1 | SELECT $1::regtype::oid
|
@@ -128,9 +128,9 @@ Migrations included in this change have been executed on gitlab.com data for tes
* Duration: 1.2 s
* Database size change: +32.00 KiB
-| Query | Calls | Total Time | Max Time | Mean Time | Rows |
-| ----- | ----- | ---------- | -------- | --------- | ---- |
-| CREATE TABLE "efficiently_ordered_columns_tables" ("line_attr" line, "circle_attr" circle, "uuid_attr" uuid, "point_attr" point, "id" bigserial primary key, "bigserial_attr" bigserial, "bigint_attr" bigint, "float_attr" float, "time_attr" time, "timestamp_attr" timestamp, "date_attr" date, "integer_attr" integer, "oid_attr" oid, "smallint_attr" smallint, "boolean_attr" boolean, "inet_attr" inet, "jsonb_attr" jsonb, "text_attr" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers/v2.rb:46:in `create_table'*/
| 1 | 9.4 ms | 9.4 ms | 9.4 ms | 0 |
+| Calls | Total Time | Max Time | Mean Time | Rows | Query |
+| ----- | ---------- | -------- | --------- | ---- | ----- |
+| 1 | 9.4 ms | 9.4 ms | 9.4 ms | 0 | CREATE TABLE "efficiently_ordered_columns_tables" ("line_attr" line, "circle_attr" circle, "uuid_attr" uuid, "point_attr" point, "id" bigserial primary key, "bigserial_attr" bigserial, "bigint_attr" bigint, "float_attr" float, "time_attr" time, "timestamp_attr" timestamp, "date_attr" date, "integer_attr" integer, "oid_attr" oid, "smallint_attr" smallint, "boolean_attr" boolean, "inet_attr" inet, "jsonb_attr" jsonb, "text_attr" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers/v2.rb:46:in `create_table'*/
|
@@ -155,9 +155,9 @@ Migrations included in this change have been executed on gitlab.com data for tes
* Duration: 1.2 s
* Database size change: +40.00 KiB
-| Query | Calls | Total Time | Max Time | Mean Time | Rows |
-| ----- | ----- | ---------- | -------- | --------- | ---- |
-| CREATE TABLE "inefficiently_ordered_columns_tables" ("id" bigserial primary key, "text_attr" text, "boolean_attr" boolean, "smallint_attr" smallint, "integer_attr" integer, "point_attr" point, "circle_attr" circle, "line_attr" line) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers/v2.rb:46:in `create_table'*/
| 1 | 5.7 ms | 5.7 ms | 5.7 ms | 0 |
+| Calls | Total Time | Max Time | Mean Time | Rows | Query |
+| ----- | ---------- | -------- | --------- | ---- | ----- |
+| 1 | 5.7 ms | 5.7 ms | 5.7 ms | 0 | CREATE TABLE "inefficiently_ordered_columns_tables" ("id" bigserial primary key, "text_attr" text, "boolean_attr" boolean, "smallint_attr" smallint, "integer_attr" integer, "point_attr" point, "circle_attr" circle, "line_attr" line) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers/v2.rb:46:in `create_table'*/
|
:warning: Column ordering suggestions
@@ -234,6 +234,46 @@ Migrations included in this change have been executed on gitlab.com data for tes
### Background migrations
+#### Background Migration: TestBackgroundMigration
+
+Sampled 5 batches
+
+Estimated Time to complete: 0 day(s), 0 hour(s) and 0 minute(s)
+
+_Consider changing max_batch_size and interval to improve the estimated time to complete._
+
+| Calls | Total Time | Max Time | Mean Time | Rows | Query |
+| ----- | ---------- | -------- | --------- | ---- | ----- |
+| 5 | 15012.1 ms | 5004.0 ms | 3002.4 ms | 5 | select pg_sleep($1) /*application:test,db_config_name:main,line:/lib/gitlab/background_migration/test_background_migration.rb:5:in `perform'*/
|
+
+
+Histogram of batch runtimes for TestBackgroundMigration
+
+| Batch Runtime | Count |
+|---------------|-------|
+|0 seconds - 10 seconds | 5 |
+|10 seconds - 1 minute | 0 |
+|1 minute - 2 minutes | 0 |
+|2 minutes - 3 minutes | 0 |
+|3 minutes - 5 minutes | 0 |
+|5 minutes + | 0 |
+
+
+
+
+Histogram across all sampled batches of TestBackgroundMigration
+
+| Query Runtime | Count |
+|---------------|-------|
+|0 seconds - 0.1 seconds | 0 |
+|0.1 seconds - 0.5 seconds | 0 |
+|0.5 seconds - 1 second | 0 |
+|1 second - 2 seconds | 1 |
+|2 seconds - 5 seconds | 3 |
+|5 seconds + | 1 |
+
+
+
---
@@ -256,35 +296,35 @@ Migrations included in this change have been executed on gitlab.com data for tes
---
Brought to you by [gitlab-org/database-team/gitlab-com-database-testing](https://gitlab.com/gitlab-org/database-team/gitlab-com-database-testing). [Epic](https://gitlab.com/groups/gitlab-org/database-team/-/epics/9)
-
### Database migrations (on the ci database)
| | 3 Warnings |
| --------- | -------------------- |
-| :warning: | 20210602144718 - CreateTestTable had a query that [exceeded timing guidelines](https://docs.gitlab.com/ee/development/query_performance.html#timing-guidelines-for-queries). Run time
should not exceed 100ms, but it was 122.94ms. Please consider possible options to improve the query
performance.
CREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint
DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title"
text, "notes" text)
/*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in
`block in create_table_with_constraints'*/
|
+| :warning: | 20210602144718 - CreateTestTable had a query that [exceeded timing guidelines](https://docs.gitlab.com/ee/development/query_performance.html#timing-guidelines-for-queries). Run time
should not exceed 100ms, but it was 122.94ms. Please consider possible options to improve the query
performance.
CREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint
DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title"
text, "notes" text)
/*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in
`block in create_table'*/
|
| :warning: | 20210603233011 - RegularMigrationWithFiveSecondQuery had a query that [exceeded timing
guidelines](https://docs.gitlab.com/ee/development/query_performance.html#timing-guidelines-for-queries). Run time should not exceed 100ms, but it was 5005.1ms. Please consider possible options
to improve the query performance.
SELECT pg_sleep($1)
|
| :warning: | 20990604233157 - MigrationThrowsException did not complete successfully, check the job log
for details |
@@ -326,8 +366,8 @@ Migrations included in this change have been executed on gitlab.com data for tes
| Calls | Total Time | Max Time | Mean Time | Rows | Query |
| ----- | ---------- | -------- | --------- | ---- | ----- |
-| 1 | 122.9 ms | 122.9 ms | 122.9 ms | 0 | CREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title" text, "notes" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'*/
|
-| 1 | 8.3 ms | 8.3 ms | 8.3 ms | 0 | ALTER TABLE "test_tables" ADD CONSTRAINT "check_0770ba173a" CHECK (char_length("title") <= 128), ADD CONSTRAINT "check_9cfc473dbc" CHECK (char_length("notes") <= 1024) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'*/
|
+| 1 | 122.9 ms | 122.9 ms | 122.9 ms | 0 | CREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title" text, "notes" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'*/
|
+| 1 | 8.3 ms | 8.3 ms | 8.3 ms | 0 | ALTER TABLE "test_tables" ADD CONSTRAINT "check_0770ba173a" CHECK (char_length("title") <= 128), ADD CONSTRAINT "check_9cfc473dbc" CHECK (char_length("notes") <= 1024) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'*/
|
| 1 | 0.0 ms | 0.0 ms | 0.0 ms | 1 | SELECT $1::regtype::oid
|
@@ -409,9 +449,9 @@ Migrations included in this change have been executed on gitlab.com data for tes
* Duration: 1.2 s
* Database size change: +40.00 KiB
-| Query | Calls | Total Time | Max Time | Mean Time | Rows |
-| ----- | ----- | ---------- | -------- | --------- | ---- |
-| CREATE TABLE "efficiently_ordered_columns_tables" ("line_attr" line, "circle_attr" circle, "uuid_attr" uuid, "point_attr" point, "id" bigserial primary key, "bigserial_attr" bigserial, "bigint_attr" bigint, "float_attr" float, "time_attr" time, "timestamp_attr" timestamp, "date_attr" date, "integer_attr" integer, "oid_attr" oid, "smallint_attr" smallint, "boolean_attr" boolean, "inet_attr" inet, "jsonb_attr" jsonb, "text_attr" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers/v2.rb:46:in `create_table'*/
| 1 | 12.0 ms | 12.0 ms | 12.0 ms | 0 |
+| Calls | Total Time | Max Time | Mean Time | Rows | Query |
+| ----- | ---------- | -------- | --------- | ---- | ----- |
+| 1 | 12.0 ms | 12.0 ms | 12.0 ms | 0 | CREATE TABLE "efficiently_ordered_columns_tables" ("line_attr" line, "circle_attr" circle, "uuid_attr" uuid, "point_attr" point, "id" bigserial primary key, "bigserial_attr" bigserial, "bigint_attr" bigint, "float_attr" float, "time_attr" time, "timestamp_attr" timestamp, "date_attr" date, "integer_attr" integer, "oid_attr" oid, "smallint_attr" smallint, "boolean_attr" boolean, "inet_attr" inet, "jsonb_attr" jsonb, "text_attr" text) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers/v2.rb:46:in `create_table'*/
|
@@ -436,9 +476,9 @@ Migrations included in this change have been executed on gitlab.com data for tes
* Duration: 1.2 s
* Database size change: +48.00 KiB
-| Query | Calls | Total Time | Max Time | Mean Time | Rows |
-| ----- | ----- | ---------- | -------- | --------- | ---- |
-| CREATE TABLE "inefficiently_ordered_columns_tables" ("id" bigserial primary key, "text_attr" text, "boolean_attr" boolean, "smallint_attr" smallint, "integer_attr" integer, "point_attr" point, "circle_attr" circle, "line_attr" line) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers/v2.rb:46:in `create_table'*/
| 1 | 19.2 ms | 19.2 ms | 19.2 ms | 0 |
+| Calls | Total Time | Max Time | Mean Time | Rows | Query |
+| ----- | ---------- | -------- | --------- | ---- | ----- |
+| 1 | 19.2 ms | 19.2 ms | 19.2 ms | 0 | CREATE TABLE "inefficiently_ordered_columns_tables" ("id" bigserial primary key, "text_attr" text, "boolean_attr" boolean, "smallint_attr" smallint, "integer_attr" integer, "point_attr" point, "circle_attr" circle, "line_attr" line) /*application:test,db_config_name:ci,line:/lib/gitlab/database/migration_helpers/v2.rb:46:in `create_table'*/
|
:warning: Column ordering suggestions
@@ -537,26 +577,26 @@ Migrations included in this change have been executed on gitlab.com data for tes
---
Brought to you by [gitlab-org/database-team/gitlab-com-database-testing](https://gitlab.com/gitlab-org/database-team/gitlab-com-database-testing). [Epic](https://gitlab.com/groups/gitlab-org/database-team/-/epics/9)
-
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_1/migration-stats.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_1/migration-stats.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_1/migration-stats.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_1/migration-stats.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_1/migration.log b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_1/migration.log
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_1/migration.log
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_1/migration.log
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_1/query-details.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_1/query-details.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_1/query-details.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_1/query-details.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_1/transaction-duration.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_1/transaction-duration.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_1/transaction-duration.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_1/transaction-duration.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_2/migration-stats.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_2/migration-stats.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_2/migration-stats.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_2/migration-stats.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_2/migration.log b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_2/migration.log
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_2/migration.log
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_2/migration.log
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_2/query-details.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_2/query-details.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_2/query-details.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_2/query-details.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_2/transaction-duration.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_2/transaction-duration.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_2/transaction-duration.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_2/transaction-duration.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_3/migration-stats.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_3/migration-stats.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_3/migration-stats.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_3/migration-stats.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_3/migration.log b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_3/migration.log
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_3/migration.log
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_3/migration.log
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_3/query-details.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_3/query-details.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_3/query-details.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_3/query-details.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_3/transaction-duration.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_3/transaction-duration.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_3/transaction-duration.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_3/transaction-duration.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_4/migration-stats.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_4/migration-stats.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_4/migration-stats.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_4/migration-stats.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_4/migration.log b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_4/migration.log
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_4/migration.log
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_4/migration.log
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_4/query-details.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_4/query-details.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_4/query-details.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_4/query-details.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_4/transaction-duration.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_4/transaction-duration.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_4/transaction-duration.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_4/transaction-duration.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_5/migration-stats.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_5/migration-stats.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_5/migration-stats.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_5/migration-stats.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_5/migration.log b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_5/migration.log
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_5/migration.log
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_5/migration.log
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_5/query-details.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_5/query-details.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_5/query-details.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_5/query-details.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_5/transaction-duration.json b/notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_5/transaction-duration.json
similarity index 100%
rename from notifier/spec/fixtures/migration-testing/v4/background_migrations/TestBackgroundMigration/batch_5/transaction-duration.json
rename to notifier/spec/fixtures/migration-testing/v4/main/background_migrations/TestBackgroundMigration/batch_5/transaction-duration.json
diff --git a/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/migration-stats.json b/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/migration-stats.json
index c155bff82a87c89d61e197faaa38fa9e60ffbd77..8e1ee27ebd9d3ea1023fc85fd0ae54d077aa0e59 100644
--- a/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/migration-stats.json
+++ b/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/migration-stats.json
@@ -1 +1 @@
-{"version":20210602144718,"name":"CreateTestTable","walltime":2.1985140219330788,"success":true,"total_database_size_change":24576,"query_statistics":[{"query":"CREATE TABLE \"test_tables\" (\"id\" bigserial primary key, \"stars\" bigint DEFAULT 0 NOT NULL, \"created_at\" timestamp(6) NOT NULL, \"updated_at\" timestamp(6) NOT NULL, \"title\" text, \"notes\" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'*/","calls":1,"total_time":192.802332,"max_time":192.802332,"mean_time":192.802332,"rows":0},{"query":"select pg_database_size(current_database()) /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/observers/total_database_size_change.rb:25:in `get_total_database_size'*/","calls":1,"total_time":144.38915,"max_time":144.38915,"mean_time":144.38915,"rows":1},{"query":"ALTER TABLE \"test_tables\"\nADD CONSTRAINT \"check_0770ba173a\" CHECK (char_length(\"title\") \u003c= 128),\nADD CONSTRAINT \"check_9cfc473dbc\" CHECK (char_length(\"notes\") \u003c= 1024)\n /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'*/","calls":1,"total_time":6.602411,"max_time":6.602411,"mean_time":6.602411,"rows":0},{"query":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas($1)) AND c.relkind IN ($2,$3,$4,$5,$6)","calls":1,"total_time":4.722614,"max_time":4.722614,"mean_time":4.722614,"rows":603},{"query":"INSERT INTO \"schema_migrations\" (\"version\") VALUES ($1) RETURNING \"version\" /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:332:in `block in transaction'*/","calls":1,"total_time":3.102035,"max_time":3.102035,"mean_time":3.102035,"rows":1},{"query":"SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":2.6275999999999997,"max_time":2.6275999999999997,"mean_time":2.6275999999999997,"rows":5385},{"query":"SELECT \"ar_internal_metadata\".* FROM \"ar_internal_metadata\" WHERE \"ar_internal_metadata\".\"key\" = $1 LIMIT $2 /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":1.560201,"max_time":1.560201,"mean_time":1.560201,"rows":1},{"query":"SELECT a.attname, format_type(a.atttypid, a.atttypmod),\n pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,\n c.collname, col_description(a.attrelid, a.attnum) AS comment\n FROM pg_attribute a\n LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum\n LEFT JOIN pg_type t ON a.atttypid = t.oid\n LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation \u003c\u003e t.typcollation\n WHERE a.attrelid = $1::regclass\n AND a.attnum \u003e $2 AND NOT a.attisdropped\n ORDER BY a.attnum","calls":1,"total_time":0.623014,"max_time":0.623014,"mean_time":0.623014,"rows":4},{"query":"select pg_stat_statements_reset() /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/observers/query_statistics.rb:16:in `before'*/","calls":1,"total_time":0.217699,"max_time":0.217699,"mean_time":0.217699,"rows":1},{"query":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas($1)) AND c.relname = $2 AND c.relkind IN ($3,$4)","calls":3,"total_time":0.182048,"max_time":0.06928899999999999,"mean_time":0.06068266666666666,"rows":3},{"query":"SELECT t.oid, t.typname\nFROM pg_type as t\nWHERE t.typname IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)\n /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.10199000000000001,"max_time":0.10199000000000001,"mean_time":0.10199000000000001,"rows":10},{"query":"SET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.041161,"max_time":0.041161,"mean_time":0.041161,"rows":0},{"query":"SET SESSION timezone TO 'UTC' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.04011,"max_time":0.04011,"mean_time":0.04011,"rows":0},{"query":"UPDATE \"ar_internal_metadata\" SET \"value\" = $1, \"updated_at\" = $2 WHERE \"ar_internal_metadata\".\"key\" = $3 /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.039198,"max_time":0.039198,"mean_time":0.039198,"rows":1},{"query":"SET standard_conforming_strings = on /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.029721,"max_time":0.029721,"mean_time":0.029721,"rows":0},{"query":"set client_encoding to 'unicode'","calls":1,"total_time":0.028651,"max_time":0.028651,"mean_time":0.028651,"rows":0},{"query":"SELECT $1 FROM pg_proc WHERE proname = $2 /*application:test,db_config_name:main,line:/lib/gitlab/database/schema_helpers.rb:20:in `function_exists?'*/","calls":1,"total_time":0.027299999999999998,"max_time":0.027299999999999998,"mean_time":0.027299999999999998,"rows":1},{"query":"set client_encoding to 'unicode'","calls":1,"total_time":0.028651,"max_time":0.028651,"mean_time":0.028651,"rows":0},{"query":"SELECT \"feature_gates\".* FROM \"feature_gates\" WHERE \"feature_gates\".\"feature_key\" = $1 /*application:test,db_config_name:main,line:/lib/feature.rb:249:in `block in current_feature_value'*/","calls":1,"total_time":0.018507,"max_time":0.018507,"mean_time":0.018507,"rows":0},{"query":"SET SESSION statement_timeout TO '120s' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.027209,"max_time":0.027209,"mean_time":0.027209,"rows":0},{"query":"SET intervalstyle = iso_8601 /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.025874,"max_time":0.025874,"mean_time":0.025874,"rows":0},{"query":"set client_encoding to 'UTF8'","calls":1,"total_time":0.022612,"max_time":0.022612,"mean_time":0.022612,"rows":0},{"query":"SELECT pg_try_advisory_lock($1)","calls":1,"total_time":0.013618,"max_time":0.013618,"mean_time":0.013618,"rows":1},{"query":"SET client_min_messages TO 'warning' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.011879,"max_time":0.011879,"mean_time":0.011879,"rows":0},{"query":"SELECT pg_advisory_unlock($1)","calls":1,"total_time":0.010336999999999999,"max_time":0.010336999999999999,"mean_time":0.010336999999999999,"rows":1},{"query":"RESET idle_in_transaction_session_timeout","calls":1,"total_time":0.008307,"max_time":0.008307,"mean_time":0.008307,"rows":0},{"query":"SELECT current_database()","calls":1,"total_time":0.007934,"max_time":0.007934,"mean_time":0.007934,"rows":1},{"query":"SELECT $1::regtype::oid","calls":1,"total_time":0.006556,"max_time":0.006556,"mean_time":0.006556,"rows":1},{"query":"SHOW TIME ZONE /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.0064,"max_time":0.0064,"mean_time":0.0064,"rows":0},{"query":"SAVEPOINT active_record_1 /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.003657,"max_time":0.003657,"mean_time":0.003657,"rows":0},{"query":"RESET lock_timeout /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.003546,"max_time":0.003546,"mean_time":0.003546,"rows":0},{"query":"COMMIT /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:365:in `commit'*/","calls":2,"total_time":0.003086,"max_time":0.001613,"mean_time":0.001543,"rows":0},{"query":"RELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/","calls":1,"total_time":0.002484,"max_time":0.002484,"mean_time":0.002484,"rows":0},{"query":"BEGIN /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.001829,"max_time":0.001829,"mean_time":0.001829,"rows":0},{"query":"BEGIN /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.00138,"max_time":0.00138,"mean_time":0.00138,"rows":0}]}
\ No newline at end of file
+{"version":20210602144718,"name":"CreateTestTable","walltime":2.1985140219330788,"success":true,"total_database_size_change":24576,"query_statistics":[{"query":"CREATE TABLE \"test_tables\" (\"id\" bigserial primary key, \"stars\" bigint DEFAULT 0 NOT NULL, \"created_at\" timestamp(6) NOT NULL, \"updated_at\" timestamp(6) NOT NULL, \"title\" text, \"notes\" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'*/","calls":1,"total_time":192.802332,"max_time":192.802332,"mean_time":192.802332,"rows":0},{"query":"select pg_database_size(current_database()) /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/observers/total_database_size_change.rb:25:in `get_total_database_size'*/","calls":1,"total_time":144.38915,"max_time":144.38915,"mean_time":144.38915,"rows":1},{"query":"ALTER TABLE \"test_tables\"\nADD CONSTRAINT \"check_0770ba173a\" CHECK (char_length(\"title\") \u003c= 128),\nADD CONSTRAINT \"check_9cfc473dbc\" CHECK (char_length(\"notes\") \u003c= 1024)\n /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'*/","calls":1,"total_time":6.602411,"max_time":6.602411,"mean_time":6.602411,"rows":0},{"query":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas($1)) AND c.relkind IN ($2,$3,$4,$5,$6)","calls":1,"total_time":4.722614,"max_time":4.722614,"mean_time":4.722614,"rows":603},{"query":"INSERT INTO \"schema_migrations\" (\"version\") VALUES ($1) RETURNING \"version\" /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:332:in `block in transaction'*/","calls":1,"total_time":3.102035,"max_time":3.102035,"mean_time":3.102035,"rows":1},{"query":"SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":2.6275999999999997,"max_time":2.6275999999999997,"mean_time":2.6275999999999997,"rows":5385},{"query":"SELECT \"ar_internal_metadata\".* FROM \"ar_internal_metadata\" WHERE \"ar_internal_metadata\".\"key\" = $1 LIMIT $2 /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":1.560201,"max_time":1.560201,"mean_time":1.560201,"rows":1},{"query":"SELECT a.attname, format_type(a.atttypid, a.atttypmod),\n pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,\n c.collname, col_description(a.attrelid, a.attnum) AS comment\n FROM pg_attribute a\n LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum\n LEFT JOIN pg_type t ON a.atttypid = t.oid\n LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation \u003c\u003e t.typcollation\n WHERE a.attrelid = $1::regclass\n AND a.attnum \u003e $2 AND NOT a.attisdropped\n ORDER BY a.attnum","calls":1,"total_time":0.623014,"max_time":0.623014,"mean_time":0.623014,"rows":4},{"query":"select pg_stat_statements_reset() /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/observers/query_statistics.rb:16:in `before'*/","calls":1,"total_time":0.217699,"max_time":0.217699,"mean_time":0.217699,"rows":1},{"query":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas($1)) AND c.relname = $2 AND c.relkind IN ($3,$4)","calls":3,"total_time":0.182048,"max_time":0.06928899999999999,"mean_time":0.06068266666666666,"rows":3},{"query":"SELECT t.oid, t.typname\nFROM pg_type as t\nWHERE t.typname IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)\n /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.10199000000000001,"max_time":0.10199000000000001,"mean_time":0.10199000000000001,"rows":10},{"query":"SET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.041161,"max_time":0.041161,"mean_time":0.041161,"rows":0},{"query":"SET SESSION timezone TO 'UTC' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.04011,"max_time":0.04011,"mean_time":0.04011,"rows":0},{"query":"UPDATE \"ar_internal_metadata\" SET \"value\" = $1, \"updated_at\" = $2 WHERE \"ar_internal_metadata\".\"key\" = $3 /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.039198,"max_time":0.039198,"mean_time":0.039198,"rows":1},{"query":"SET standard_conforming_strings = on /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.029721,"max_time":0.029721,"mean_time":0.029721,"rows":0},{"query":"set client_encoding to 'unicode'","calls":1,"total_time":0.028651,"max_time":0.028651,"mean_time":0.028651,"rows":0},{"query":"SELECT $1 FROM pg_proc WHERE proname = $2 /*application:test,db_config_name:main,line:/lib/gitlab/database/schema_helpers.rb:20:in `function_exists?'*/","calls":1,"total_time":0.027299999999999998,"max_time":0.027299999999999998,"mean_time":0.027299999999999998,"rows":1},{"query":"set client_encoding to 'unicode'","calls":1,"total_time":0.028651,"max_time":0.028651,"mean_time":0.028651,"rows":0},{"query":"SELECT \"feature_gates\".* FROM \"feature_gates\" WHERE \"feature_gates\".\"feature_key\" = $1 /*application:test,db_config_name:main,line:/lib/feature.rb:249:in `block in current_feature_value'*/","calls":1,"total_time":0.018507,"max_time":0.018507,"mean_time":0.018507,"rows":0},{"query":"SET SESSION statement_timeout TO '120s' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.027209,"max_time":0.027209,"mean_time":0.027209,"rows":0},{"query":"SET intervalstyle = iso_8601 /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.025874,"max_time":0.025874,"mean_time":0.025874,"rows":0},{"query":"set client_encoding to 'UTF8'","calls":1,"total_time":0.022612,"max_time":0.022612,"mean_time":0.022612,"rows":0},{"query":"SELECT pg_try_advisory_lock($1)","calls":1,"total_time":0.013618,"max_time":0.013618,"mean_time":0.013618,"rows":1},{"query":"SET client_min_messages TO 'warning' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.011879,"max_time":0.011879,"mean_time":0.011879,"rows":0},{"query":"SELECT pg_advisory_unlock($1)","calls":1,"total_time":0.010336999999999999,"max_time":0.010336999999999999,"mean_time":0.010336999999999999,"rows":1},{"query":"RESET idle_in_transaction_session_timeout","calls":1,"total_time":0.008307,"max_time":0.008307,"mean_time":0.008307,"rows":0},{"query":"SELECT current_database()","calls":1,"total_time":0.007934,"max_time":0.007934,"mean_time":0.007934,"rows":1},{"query":"SELECT $1::regtype::oid","calls":1,"total_time":0.006556,"max_time":0.006556,"mean_time":0.006556,"rows":1},{"query":"SHOW TIME ZONE /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.0064,"max_time":0.0064,"mean_time":0.0064,"rows":0},{"query":"SAVEPOINT active_record_1 /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.003657,"max_time":0.003657,"mean_time":0.003657,"rows":0},{"query":"RESET lock_timeout /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.003546,"max_time":0.003546,"mean_time":0.003546,"rows":0},{"query":"COMMIT /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:365:in `commit'*/","calls":2,"total_time":0.003086,"max_time":0.001613,"mean_time":0.001543,"rows":0},{"query":"RELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/","calls":1,"total_time":0.002484,"max_time":0.002484,"mean_time":0.002484,"rows":0},{"query":"BEGIN /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","calls":1,"total_time":0.001829,"max_time":0.001829,"mean_time":0.001829,"rows":0},{"query":"BEGIN /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","calls":1,"total_time":0.00138,"max_time":0.00138,"mean_time":0.00138,"rows":0}]}
diff --git a/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/migration.log b/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/migration.log
index 8fd7bc7ab2a26143133defe885bb1584d7cd2239..d3d93e5a258ed3f8a33c841811305e67b37ace6e 100644
--- a/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/migration.log
+++ b/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/migration.log
@@ -10,13 +10,13 @@ D, [2022-09-30T21:33:27.585394 #388] DEBUG -- : [1m[36mTRANSACTION (40.4ms)
D, [2022-09-30T21:33:27.587203 #388] DEBUG -- : ↳ lib/gitlab/database/with_lock_retries.rb:172:in `execute'
D, [2022-09-30T21:33:27.630673 #388] DEBUG -- : [1m[35m (40.9ms)[0m [1m[35mSET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/[0m
D, [2022-09-30T21:33:27.632070 #388] DEBUG -- : ↳ lib/gitlab/database/with_lock_retries.rb:172:in `execute'
-D, [2022-09-30T21:33:27.912726 #388] DEBUG -- : [1m[35m (233.3ms)[0m [1m[35mCREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title" text, "notes" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'*/[0m
-D, [2022-09-30T21:33:27.913438 #388] DEBUG -- : ↳ lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'
+D, [2022-09-30T21:33:27.912726 #388] DEBUG -- : [1m[35m (233.3ms)[0m [1m[35mCREATE TABLE "test_tables" ("id" bigserial primary key, "stars" bigint DEFAULT 0 NOT NULL, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL, "title" text, "notes" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'*/[0m
+D, [2022-09-30T21:33:27.913438 #388] DEBUG -- : ↳ lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'
D, [2022-09-30T21:33:27.962820 #388] DEBUG -- : [1m[35m (47.1ms)[0m [1m[35mALTER TABLE "test_tables"
ADD CONSTRAINT "check_0770ba173a" CHECK (char_length("title") <= 128),
ADD CONSTRAINT "check_9cfc473dbc" CHECK (char_length("notes") <= 1024)
- /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'*/[0m
-D, [2022-09-30T21:33:27.963466 #388] DEBUG -- : ↳ lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'
+ /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'*/[0m
+D, [2022-09-30T21:33:27.963466 #388] DEBUG -- : ↳ lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'
D, [2022-09-30T21:33:28.006343 #388] DEBUG -- : [1m[36mTRANSACTION (40.5ms)[0m [1m[35mRELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/[0m
D, [2022-09-30T21:33:28.008327 #388] DEBUG -- : ↳ lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'
D, [2022-09-30T21:33:28.049723 #388] DEBUG -- : [1m[35m (40.4ms)[0m [1m[35mRESET idle_in_transaction_session_timeout; RESET lock_timeout /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/[0m
diff --git a/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/query-details.json b/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/query-details.json
index fd1190b8a1e0c47397f9c7c3fec3a5374c7d6e7e..da5da192405f5d0d88c329ccf1478fc6707d9903 100644
--- a/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/query-details.json
+++ b/notifier/spec/fixtures/migration-testing/v4/main/up/CreateTestTable/query-details.json
@@ -1 +1 @@
-[{"start_time":"2022-09-30T21:33:26.569798+00:00","end_time":"2022-09-30T21:33:26.611015+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relname = 'schema_migrations' AND c.relkind IN ('r','p')","binds":[]},{"start_time":"2022-09-30T21:33:26.614202+00:00","end_time":"2022-09-30T21:33:26.655326+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relname = 'ar_internal_metadata' AND c.relkind IN ('r','p')","binds":[]},{"start_time":"2022-09-30T21:33:26.655671+00:00","end_time":"2022-09-30T21:33:26.696212+00:00","sql":"SELECT current_database()","binds":[]},{"start_time":"2022-09-30T21:33:26.940851+00:00","end_time":"2022-09-30T21:33:26.981337+00:00","sql":"SET client_min_messages TO 'warning' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:26.981925+00:00","end_time":"2022-09-30T21:33:27.022367+00:00","sql":"SET standard_conforming_strings = on /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.023505+00:00","end_time":"2022-09-30T21:33:27.064007+00:00","sql":"SET intervalstyle = iso_8601 /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.064600+00:00","end_time":"2022-09-30T21:33:27.105137+00:00","sql":"SET SESSION statement_timeout TO '120s' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.105712+00:00","end_time":"2022-09-30T21:33:27.146251+00:00","sql":"SET SESSION timezone TO 'UTC' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.147048+00:00","end_time":"2022-09-30T21:33:27.189245+00:00","sql":"SELECT t.oid, t.typname\nFROM pg_type as t\nWHERE t.typname IN ('int2', 'int4', 'int8', 'oid', 'float4', 'float8', 'numeric', 'bool', 'timestamp', 'timestamptz')\n /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.190643+00:00","end_time":"2022-09-30T21:33:27.231095+00:00","sql":"SHOW TIME ZONE /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.271501+00:00","end_time":"2022-09-30T21:33:27.315087+00:00","sql":"SELECT pg_try_advisory_lock(3005434223539248480)","binds":[]},{"start_time":"2022-09-30T21:33:27.316125+00:00","end_time":"2022-09-30T21:33:27.398958+00:00","sql":"SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.501188+00:00","end_time":"2022-09-30T21:33:27.544335+00:00","sql":"BEGIN /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.544872+00:00","end_time":"2022-09-30T21:33:27.589412+00:00","sql":"SAVEPOINT active_record_1 /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.589618+00:00","end_time":"2022-09-30T21:33:27.632266+00:00","sql":"SET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.635269+00:00","end_time":"2022-09-30T21:33:27.677390+00:00","sql":"SELECT 'bigint'::regtype::oid","binds":[]},{"start_time":"2022-09-30T21:33:27.679313+00:00","end_time":"2022-09-30T21:33:27.913601+00:00","sql":"CREATE TABLE \"test_tables\" (\"id\" bigserial primary key, \"stars\" bigint DEFAULT 0 NOT NULL, \"created_at\" timestamp(6) NOT NULL, \"updated_at\" timestamp(6) NOT NULL, \"title\" text, \"notes\" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table_with_constraints'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.915616+00:00","end_time":"2022-09-30T21:33:27.963618+00:00","sql":"ALTER TABLE \"test_tables\"\nADD CONSTRAINT \"check_0770ba173a\" CHECK (char_length(\"title\") \u003c= 128),\nADD CONSTRAINT \"check_9cfc473dbc\" CHECK (char_length(\"notes\") \u003c= 1024)\n /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table_with_constraints'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.965730+00:00","end_time":"2022-09-30T21:33:28.008592+00:00","sql":"RELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.009198+00:00","end_time":"2022-09-30T21:33:28.051454+00:00","sql":"RESET idle_in_transaction_session_timeout; RESET lock_timeout /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.052111+00:00","end_time":"2022-09-30T21:33:28.136100+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relkind IN ('r','v','m','p','f')","binds":[]},{"start_time":"2022-09-30T21:33:28.143505+00:00","end_time":"2022-09-30T21:33:28.189449+00:00","sql":"INSERT INTO \"schema_migrations\" (\"version\") VALUES ('20210602144718') RETURNING \"version\" /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:332:in `block in transaction'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.191270+00:00","end_time":"2022-09-30T21:33:28.232681+00:00","sql":"COMMIT /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:365:in `commit'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.234329+00:00","end_time":"2022-09-30T21:33:28.277800+00:00","sql":"SELECT a.attname, format_type(a.atttypid, a.atttypmod),\n pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,\n c.collname, col_description(a.attrelid, a.attnum) AS comment\n FROM pg_attribute a\n LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum\n LEFT JOIN pg_type t ON a.atttypid = t.oid\n LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation \u003c\u003e t.typcollation\n WHERE a.attrelid = '\"ar_internal_metadata\"'::regclass\n AND a.attnum \u003e 0 AND NOT a.attisdropped\n ORDER BY a.attnum\n","binds":[]},{"start_time":"2022-09-30T21:33:28.280603+00:00","end_time":"2022-09-30T21:33:28.341310+00:00","sql":"SELECT \"ar_internal_metadata\".* FROM \"ar_internal_metadata\" WHERE \"ar_internal_metadata\".\"key\" = 'environment' LIMIT 1 /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.350649+00:00","end_time":"2022-09-30T21:33:28.394709+00:00","sql":"BEGIN /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.394863+00:00","end_time":"2022-09-30T21:33:28.437933+00:00","sql":"UPDATE \"ar_internal_metadata\" SET \"value\" = 'test', \"updated_at\" = '2022-09-30 21:33:28.347998' WHERE \"ar_internal_metadata\".\"key\" = 'environment' /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.438804+00:00","end_time":"2022-09-30T21:33:28.480709+00:00","sql":"COMMIT /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:365:in `commit'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.481004+00:00","end_time":"2022-09-30T21:33:28.522503+00:00","sql":"SELECT pg_advisory_unlock(3005434223539248480)","binds":[]},{"start_time":"2022-09-30T21:33:28.564323+00:00","end_time":"2022-09-30T21:33:28.749991+00:00","sql":"select pg_database_size(current_database()) /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/observers/total_database_size_change.rb:25:in `get_total_database_size'*/","binds":[]}]
+[{"start_time":"2022-09-30T21:33:26.569798+00:00","end_time":"2022-09-30T21:33:26.611015+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relname = 'schema_migrations' AND c.relkind IN ('r','p')","binds":[]},{"start_time":"2022-09-30T21:33:26.614202+00:00","end_time":"2022-09-30T21:33:26.655326+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relname = 'ar_internal_metadata' AND c.relkind IN ('r','p')","binds":[]},{"start_time":"2022-09-30T21:33:26.655671+00:00","end_time":"2022-09-30T21:33:26.696212+00:00","sql":"SELECT current_database()","binds":[]},{"start_time":"2022-09-30T21:33:26.940851+00:00","end_time":"2022-09-30T21:33:26.981337+00:00","sql":"SET client_min_messages TO 'warning' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:26.981925+00:00","end_time":"2022-09-30T21:33:27.022367+00:00","sql":"SET standard_conforming_strings = on /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.023505+00:00","end_time":"2022-09-30T21:33:27.064007+00:00","sql":"SET intervalstyle = iso_8601 /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.064600+00:00","end_time":"2022-09-30T21:33:27.105137+00:00","sql":"SET SESSION statement_timeout TO '120s' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.105712+00:00","end_time":"2022-09-30T21:33:27.146251+00:00","sql":"SET SESSION timezone TO 'UTC' /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.147048+00:00","end_time":"2022-09-30T21:33:27.189245+00:00","sql":"SELECT t.oid, t.typname\nFROM pg_type as t\nWHERE t.typname IN ('int2', 'int4', 'int8', 'oid', 'float4', 'float8', 'numeric', 'bool', 'timestamp', 'timestamptz')\n /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.190643+00:00","end_time":"2022-09-30T21:33:27.231095+00:00","sql":"SHOW TIME ZONE /*application:test,db_config_name:unknown,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.271501+00:00","end_time":"2022-09-30T21:33:27.315087+00:00","sql":"SELECT pg_try_advisory_lock(3005434223539248480)","binds":[]},{"start_time":"2022-09-30T21:33:27.316125+00:00","end_time":"2022-09-30T21:33:27.398958+00:00","sql":"SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.501188+00:00","end_time":"2022-09-30T21:33:27.544335+00:00","sql":"BEGIN /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.544872+00:00","end_time":"2022-09-30T21:33:27.589412+00:00","sql":"SAVEPOINT active_record_1 /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.589618+00:00","end_time":"2022-09-30T21:33:27.632266+00:00","sql":"SET LOCAL lock_timeout TO '100ms' /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.635269+00:00","end_time":"2022-09-30T21:33:27.677390+00:00","sql":"SELECT 'bigint'::regtype::oid","binds":[]},{"start_time":"2022-09-30T21:33:27.679313+00:00","end_time":"2022-09-30T21:33:27.913601+00:00","sql":"CREATE TABLE \"test_tables\" (\"id\" bigserial primary key, \"stars\" bigint DEFAULT 0 NOT NULL, \"created_at\" timestamp(6) NOT NULL, \"updated_at\" timestamp(6) NOT NULL, \"title\" text, \"notes\" text) /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:100:in `block in create_table'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.915616+00:00","end_time":"2022-09-30T21:33:27.963618+00:00","sql":"ALTER TABLE \"test_tables\"\nADD CONSTRAINT \"check_0770ba173a\" CHECK (char_length(\"title\") \u003c= 128),\nADD CONSTRAINT \"check_9cfc473dbc\" CHECK (char_length(\"notes\") \u003c= 1024)\n /*application:test,db_config_name:main,line:/lib/gitlab/database/migration_helpers.rb:128:in `block in create_table'*/","binds":[]},{"start_time":"2022-09-30T21:33:27.965730+00:00","end_time":"2022-09-30T21:33:28.008592+00:00","sql":"RELEASE SAVEPOINT active_record_1 /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.009198+00:00","end_time":"2022-09-30T21:33:28.051454+00:00","sql":"RESET idle_in_transaction_session_timeout; RESET lock_timeout /*application:test,db_config_name:main,line:/lib/gitlab/database/with_lock_retries.rb:172:in `execute'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.052111+00:00","end_time":"2022-09-30T21:33:28.136100+00:00","sql":"SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relkind IN ('r','v','m','p','f')","binds":[]},{"start_time":"2022-09-30T21:33:28.143505+00:00","end_time":"2022-09-30T21:33:28.189449+00:00","sql":"INSERT INTO \"schema_migrations\" (\"version\") VALUES ('20210602144718') RETURNING \"version\" /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:332:in `block in transaction'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.191270+00:00","end_time":"2022-09-30T21:33:28.232681+00:00","sql":"COMMIT /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:365:in `commit'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.234329+00:00","end_time":"2022-09-30T21:33:28.277800+00:00","sql":"SELECT a.attname, format_type(a.atttypid, a.atttypmod),\n pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,\n c.collname, col_description(a.attrelid, a.attnum) AS comment\n FROM pg_attribute a\n LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum\n LEFT JOIN pg_type t ON a.atttypid = t.oid\n LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation \u003c\u003e t.typcollation\n WHERE a.attrelid = '\"ar_internal_metadata\"'::regclass\n AND a.attnum \u003e 0 AND NOT a.attisdropped\n ORDER BY a.attnum\n","binds":[]},{"start_time":"2022-09-30T21:33:28.280603+00:00","end_time":"2022-09-30T21:33:28.341310+00:00","sql":"SELECT \"ar_internal_metadata\".* FROM \"ar_internal_metadata\" WHERE \"ar_internal_metadata\".\"key\" = 'environment' LIMIT 1 /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.350649+00:00","end_time":"2022-09-30T21:33:28.394709+00:00","sql":"BEGIN /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.394863+00:00","end_time":"2022-09-30T21:33:28.437933+00:00","sql":"UPDATE \"ar_internal_metadata\" SET \"value\" = 'test', \"updated_at\" = '2022-09-30 21:33:28.347998' WHERE \"ar_internal_metadata\".\"key\" = 'environment' /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/runner.rb:127:in `block (3 levels) in run'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.438804+00:00","end_time":"2022-09-30T21:33:28.480709+00:00","sql":"COMMIT /*application:test,db_config_name:main,line:/lib/gitlab/database.rb:365:in `commit'*/","binds":[]},{"start_time":"2022-09-30T21:33:28.481004+00:00","end_time":"2022-09-30T21:33:28.522503+00:00","sql":"SELECT pg_advisory_unlock(3005434223539248480)","binds":[]},{"start_time":"2022-09-30T21:33:28.564323+00:00","end_time":"2022-09-30T21:33:28.749991+00:00","sql":"select pg_database_size(current_database()) /*application:test,db_config_name:main,line:/lib/gitlab/database/migrations/observers/total_database_size_change.rb:25:in `get_total_database_size'*/","binds":[]}]
diff --git a/notifier/spec/migration_meta_spec.rb b/notifier/spec/migration_meta_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0aa1c2f794a5872b6108024ace3ff60b5ca11643
--- /dev/null
+++ b/notifier/spec/migration_meta_spec.rb
@@ -0,0 +1,78 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe MigrationMeta do
+ subject(:meta) { described_class.new(**params) }
+
+ let(:total_tuple_count) { 150_000_000 }
+ let(:params) { { total_tuple_count: total_tuple_count, max_batch_size: max_batch_size, interval: interval } }
+
+ describe '#time_to_complete' do
+ let(:max_batch_size) { 1_000 }
+ let(:interval) { 180 }
+
+ context 'when max_batch_size is set to 35.000 records having 3 minutes interval' do
+ it 'calculates initial time to 312 days, 12 hours and 0 minutes' do
+ expect(meta.time_to_complete).to eq([312, 12, 0])
+ end
+ end
+
+ context 'when interval is decreased to 2 minutes' do
+ let(:interval) { 120 }
+
+ it 'reduces the time to 208 days, 8 hours and 0 minutes' do
+ expect(meta.time_to_complete).to eq([208, 8, 0])
+ end
+ end
+
+ context 'when max_batch_size is increased to 85.000 records' do
+ let(:max_batch_size) { 85_000 }
+
+ it 'reduces the time to 3 days, 16 hours and 12 minutes' do
+ expect(meta.time_to_complete).to eq([3, 16, 12])
+ end
+ end
+
+ context 'when max_batch_size and interval are optimized' do
+ let(:interval) { 120 }
+ let(:max_batch_size) { 250_000 }
+
+ it 'reduces the time to 0 days, 20 hours and 0 minutes' do
+ expect(meta.time_to_complete).to eq([0, 20, 0])
+ end
+ end
+
+ context 'when initializing with no args' do
+ let(:params) { {} }
+
+ it 'returns 0 days, 0 hours and 0 minutes' do
+ expect(meta.time_to_complete).to eq([0, 0, 0])
+ end
+ end
+
+ context 'when initializing with no max_batch_size' do
+ let(:max_batch_size) { nil }
+
+ it 'returns 0 days, 0 hours and 0 minutes' do
+ expect(meta.time_to_complete).to eq([312500, 0, 0])
+ end
+ end
+
+ context 'when initializing with no total_tuple_count' do
+ let(:total_tuple_count) { nil }
+
+ it 'returns 0 days, 0 hours and 0 minutes' do
+ expect(meta.time_to_complete).to eq([0, 0, 0])
+ end
+ end
+
+ context 'when initializing with no interval' do
+ let(:interval) { nil }
+
+ it 'returns 1 day, 17 hours and 40 minutes' do
+ expect(meta.time_to_complete).to eq([1, 17, 40])
+ end
+ end
+ end
+end
diff --git a/notifier/templates/background_migration_detail.erb b/notifier/templates/background_migration_detail.erb
index 84748519c8062bd5ecb3b60bc2e4fd9a2f756417..4d3be89422b258b51affd893c63726f4c9f50f96 100644
--- a/notifier/templates/background_migration_detail.erb
+++ b/notifier/templates/background_migration_detail.erb
@@ -2,6 +2,10 @@
Sampled <%= background_migration.batches.count %> batches
+Estimated Time to complete: <%= background_migration.time_to_complete %>
+
+_Consider changing max_batch_size and interval to improve the estimated time to complete._
+
% if background_migration.queries.any?
<%= render_pgss_table(background_migration.queries) %>
% end