Add unique index on configuration for batched_background_migrations
What does this MR do?
After some discussion in !62634 (merged) we decided that unique index on batched_background_migrations (job_class_name, table_name, column_name, job_arguments)
will be needed. This MR creates this index.
We also remove the existing index_batched_migrations_on_job_table_and_column_name
as it is redundnat now, the new index will serve the same purpose.
Database migrations
Up
$ bundle exec rails db:migrate:up VERSION=20210609013512
== 20210609013512 AddUniqueIndexForBatchedBackgroundMigrations: migrating =====
-- transaction_open?()
-> 0.0000s
-- index_exists?(:batched_background_migrations, [:job_class_name, :table_name, :column_name, :job_arguments], {:unique=>true, :name=>"index_batched_background_migrations_on_unique_configuration", :algorithm=>:concurrently})
-> 0.0033s
-- execute("SET statement_timeout TO 0")
-> 0.0007s
-- add_index(:batched_background_migrations, [:job_class_name, :table_name, :column_name, :job_arguments], {:unique=>true, :name=>"index_batched_background_migrations_on_unique_configuration", :algorithm=>:concurrently})
-> 0.0048s
-- execute("RESET ALL")
-> 0.0007s
-- transaction_open?()
-> 0.0000s
-- indexes(:batched_background_migrations)
-> 0.0017s
-- remove_index(:batched_background_migrations, {:algorithm=>:concurrently, :name=>"index_batched_migrations_on_job_table_and_column_name"})
-> 0.0045s
== 20210609013512 AddUniqueIndexForBatchedBackgroundMigrations: migrated (0.0179s)
Down
$ bundle exec rails db:migrate:down VERSION=20210609013512
== 20210609013512 AddUniqueIndexForBatchedBackgroundMigrations: reverting =====
-- transaction_open?()
-> 0.0000s
-- index_exists?(:batched_background_migrations, [:job_class_name, :table_name, :column_name], {:name=>"index_batched_migrations_on_job_table_and_column_name", :algorithm=>:concurrently})
-> 0.0026s
-- execute("SET statement_timeout TO 0")
-> 0.0007s
-- add_index(:batched_background_migrations, [:job_class_name, :table_name, :column_name], {:name=>"index_batched_migrations_on_job_table_and_column_name", :algorithm=>:concurrently})
-> 0.0037s
-- execute("RESET ALL")
-> 0.0005s
-- transaction_open?()
-> 0.0000s
-- indexes(:batched_background_migrations)
-> 0.0014s
-- remove_index(:batched_background_migrations, {:algorithm=>:concurrently, :name=>"index_batched_background_migrations_on_unique_configuration"})
-> 0.0025s
== 20210609013512 AddUniqueIndexForBatchedBackgroundMigrations: reverted (0.0130s)
Index creation
From postgres.ai:
exec CREATE UNIQUE INDEX CONCURRENTLY "index_batched_background_migrations_on_unique_configuration" ON "batched_background_migrations" ("job_class_name", "table_name", "column_name", "job_arguments")
Session: webui-i4495
The query has been executed. Duration: 14.012 ms
Redundant index
- Execution plan from query before this MR is applied - https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/4495/commands/15831
- Execution plan from query after this MR is applied - https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/4495/commands/15833
We can see that the new index is used once it created, so the old one is not needed anymore.
Does this MR meet the acceptance criteria?
Conformity
-
I have included a changelog entry, or it's not needed. (Does this MR need a changelog?) -
I have added/updated documentation, or it's not needed. (Is documentation required?) -
I have properly separated EE content from FOSS, or this MR is FOSS only. (Where should EE code go?) -
I have added information for database reviewers in the MR description, or it's not needed. (Does this MR have database related changes?) -
I have self-reviewed this MR per code review guidelines. -
This MR does not harm performance, or I have asked a reviewer to help assess the performance impact. (Merge request performance guidelines) -
I have followed the style guides. -
This change is backwards compatible across updates, or this does not apply.
Availability and Testing
-
I have added/updated tests following the Testing Guide, or it's not needed. (Consider all test levels. See the Test Planning Process.) -
I have tested this MR in all supported browsers, or it's not needed. -
I have informed the Infrastructure department of a default or new setting change per definition of done, or it's not needed.
Security
Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.
-
Label as security and @ mention @gitlab-com/gl-security/appsec
-
The MR includes necessary changes to maintain consistency between UI, API, email, or other methods -
Security reports checked/validated by a reviewer from the AppSec team
Related to #292874 (closed)
Edited by Krasimir Angelov