Add index on to speed up cascading deletes
What does this MR do and why?
This MR adds index_vulnerability_occurrence_pipelines_on_occurrence_id
index to speed up cascading deletes that happen when dropping Vulnerabilities::Finding
objects. Unfortunately, despite halving the batch size in half the timeout DID happen – https://log.gprd.gitlab.net/goto/09d0c226bd81e7765eaa2fd4c4c3752c
Related to #341917
Database review
Query before and after
Query plans were generated on a thin clone.
Look at Triggers
timing on the top
Before: https://explain.dalibo.com/plan/VmQ
After: https://explain.dalibo.com/plan/l1O
db:migrate and db:rollback
➜ bundle exec rails db:migrate
== 20211104074251 AddOccurrenceIdIndexToVulnerabilityOccurrencePipelines: migrating
-- transaction_open?()
-> 0.0000s
-- index_exists?(:vulnerability_occurrence_pipelines, :occurrence_id, {:name=>"index_vulnerability_occurrence_pipelines_on_occurrence_id", :algorithm=>:concurrently})
-> 0.0025s
-- execute("SET statement_timeout TO 0")
-> 0.0004s
-- add_index(:vulnerability_occurrence_pipelines, :occurrence_id, {:name=>"index_vulnerability_occurrence_pipelines_on_occurrence_id", :algorithm=>:concurrently})
-> 0.0115s
-- execute("RESET statement_timeout")
-> 0.0005s
== 20211104074251 AddOccurrenceIdIndexToVulnerabilityOccurrencePipelines: migrated (0.0165s)
➜ bundle exec rails db:rollback
== 20211104074251 AddOccurrenceIdIndexToVulnerabilityOccurrencePipelines: reverting
-- transaction_open?()
-> 0.0000s
-- indexes(:vulnerability_occurrence_pipelines)
-> 0.0021s
-- execute("SET statement_timeout TO 0")
-> 0.0003s
-- remove_index(:vulnerability_occurrence_pipelines, {:algorithm=>:concurrently, :name=>"index_vulnerability_occurrence_pipelines_on_occurrence_id"})
-> 0.0035s
-- execute("RESET statement_timeout")
-> 0.0004s
== 20211104074251 AddOccurrenceIdIndexToVulnerabilityOccurrencePipelines: reverted (0.0078s)
Index size
gitlabhq_dblab=# \di+ vulnerability_occurrence_pipelines_occurrence_id_idx
List of relations
┌────────┬──────────────────────────────────────────────────────┬───────┬────────┬────────────────────────────────────┬─────────┬─────────────┐
│ Schema │ Name │ Type │ Owner │ Table │ Size │ Description │
├────────┼──────────────────────────────────────────────────────┼───────┼────────┼────────────────────────────────────┼─────────┼─────────────┤
│ public │ vulnerability_occurrence_pipelines_occurrence_id_idx │ index │ gitlab │ vulnerability_occurrence_pipelines │ 8104 MB │ │
└────────┴──────────────────────────────────────────────────────┴───────┴────────┴────────────────────────────────────┴─────────┴─────────────┘
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.