From 6acf9eab7c96ac4ef9af260522c466980dced141 Mon Sep 17 00:00:00 2001 From: Tomas Valenta <49156497+ValentaTomas@users.noreply.github.com> Date: Sun, 26 Jul 2026 21:02:52 -0700 Subject: [PATCH] db: drop unused plain env_builds status index --- ...00_drop_unused_env_builds_status_index.sql | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/db/migrations/20260727041200_drop_unused_env_builds_status_index.sql diff --git a/packages/db/migrations/20260727041200_drop_unused_env_builds_status_index.sql b/packages/db/migrations/20260727041200_drop_unused_env_builds_status_index.sql new file mode 100644 index 0000000000..ad6f1188f0 --- /dev/null +++ b/packages/db/migrations/20260727041200_drop_unused_env_builds_status_index.sql @@ -0,0 +1,35 @@ +-- +goose Up +-- +goose NO TRANSACTION + +-- DROP waits on in-flight lock holders rather than building anything; bound +-- it so it neither hangs unbounded nor dies to a short session default. +SET statement_timeout = '1h'; + +-- The plain status index is effectively unread (single-digit scans over a +-- multi-month usage window): status-filtered queries run through per-entity +-- joins or the status_group family of indexes instead, while every build +-- write maintains this copy on one of the hottest-write tables in the +-- schema. status_group remains separately indexed and is not touched. +DROP INDEX CONCURRENTLY IF EXISTS public.idx_env_builds_status; + +-- The migrator session is reused for subsequent migrations: restore its +-- baseline (scripts/migrator.go sets 3h per connection). +SET statement_timeout = '3h'; + +-- +goose Down +-- +goose NO TRANSACTION + +-- The concurrent rebuild legitimately runs for a long time at this table's +-- size; a mid-build timeout would strand an INVALID index. Rolling back is +-- a deliberate manual operation with an operator present — unbounded on +-- purpose. +SET statement_timeout = 0; + +-- An interrupted CONCURRENTLY build leaves an INVALID index that IF NOT +-- EXISTS would then skip forever — clear any leftover before rebuilding. +DROP INDEX CONCURRENTLY IF EXISTS public.idx_env_builds_status; + +CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_env_builds_status + ON public.env_builds (status); + +SET statement_timeout = '3h';