From 9db265d508af3902824cb33fa671026b04e4d09e Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Mon, 8 Sep 2025 11:10:53 +0300 Subject: [PATCH] fix(coderd/database): optimize provisioner daemon with status query using index (#19703) Fixes coder/internal#724 This change adds an index to optimize the `GetProvisionerDaemonsWithStatusByOrganization` query. Execution time dropped from `18s 838ms` to `107ms`. --- coderd/database/dump.sql | 4 ++++ ...tprovisionerdaemonswithstatusbyorganization_query.down.sql | 1 + ...getprovisionerdaemonswithstatusbyorganization_query.up.sql | 3 +++ 3 files changed, 8 insertions(+) create mode 100644 coderd/database/migrations/000363_optimize_getprovisionerdaemonswithstatusbyorganization_query.down.sql create mode 100644 coderd/database/migrations/000363_optimize_getprovisionerdaemonswithstatusbyorganization_query.up.sql diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index 0eecbc30e8..48c9b4cc7b 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -2949,6 +2949,10 @@ CREATE INDEX provisioner_job_logs_id_job_id_idx ON provisioner_job_logs USING bt CREATE INDEX provisioner_jobs_started_at_idx ON provisioner_jobs USING btree (started_at) WHERE (started_at IS NULL); +CREATE INDEX provisioner_jobs_worker_id_organization_id_completed_at_idx ON provisioner_jobs USING btree (worker_id, organization_id, completed_at DESC); + +COMMENT ON INDEX provisioner_jobs_worker_id_organization_id_completed_at_idx IS 'Support index for finding the latest completed jobs for a worker (and organization), nulls first so that active jobs have priority; targets: GetProvisionerDaemonsWithStatusByOrganization'; + CREATE UNIQUE INDEX provisioner_keys_organization_id_name_idx ON provisioner_keys USING btree (organization_id, lower((name)::text)); CREATE INDEX template_usage_stats_start_time_idx ON template_usage_stats USING btree (start_time DESC); diff --git a/coderd/database/migrations/000363_optimize_getprovisionerdaemonswithstatusbyorganization_query.down.sql b/coderd/database/migrations/000363_optimize_getprovisionerdaemonswithstatusbyorganization_query.down.sql new file mode 100644 index 0000000000..09adddd3ee --- /dev/null +++ b/coderd/database/migrations/000363_optimize_getprovisionerdaemonswithstatusbyorganization_query.down.sql @@ -0,0 +1 @@ +DROP INDEX provisioner_jobs_worker_id_organization_id_completed_at_idx; diff --git a/coderd/database/migrations/000363_optimize_getprovisionerdaemonswithstatusbyorganization_query.up.sql b/coderd/database/migrations/000363_optimize_getprovisionerdaemonswithstatusbyorganization_query.up.sql new file mode 100644 index 0000000000..194dc3c858 --- /dev/null +++ b/coderd/database/migrations/000363_optimize_getprovisionerdaemonswithstatusbyorganization_query.up.sql @@ -0,0 +1,3 @@ +CREATE INDEX provisioner_jobs_worker_id_organization_id_completed_at_idx ON provisioner_jobs (worker_id, organization_id, completed_at DESC NULLS FIRST); + +COMMENT ON INDEX provisioner_jobs_worker_id_organization_id_completed_at_idx IS 'Support index for finding the latest completed jobs for a worker (and organization), nulls first so that active jobs have priority; targets: GetProvisionerDaemonsWithStatusByOrganization';