| stage | Data Stores |
|---|---|
| group | Database |
| info | To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments |
This page details various database related operations that may relate to development.
There are certain situations in which you might want to disable an index before removing it:
- The index is on a large table and rebuilding it in the case of a revert would take a long time.
- It is uncertain whether or not the index is being used in ways that are not fully visible.
To disable an index before removing it:
-
Open a production infrastructure issue and use the "Production Change" template.
-
Inform the database team in the issue
@gl-databaseor in Slack#database. -
Add a step to verify the index is used (this would likely be an
EXPLAINcommand known to use the index). -
Add the step to disable the index:
UPDATE pg_index SET indisvalid = false WHERE indexrelid = 'index_issues_on_foo'::regclass;
-
Add a step to verify the index is invalid (this would likely be the same as used to verify before disabling the index).
-
Verify the index is invalid on replicas:
SELECT indisvalid FROM pg_index WHERE indexrelid = 'index_issues_on_foo'::regclass;
-
Add steps for rolling back the invalidation:
-
Rollback the index invalidation
UPDATE pg_index SET indisvalid = true WHERE indexrelid = 'index_issues_on_foo'::regclass;
-
Verify the index is being used again.
-
See this example infrastructure issue for reference.