diff --git a/internal/migrate/sql/004_ai_jobs_queue_indexes.up.sql b/internal/migrate/sql/004_ai_jobs_queue_indexes.up.sql new file mode 100644 index 0000000..5034264 --- /dev/null +++ b/internal/migrate/sql/004_ai_jobs_queue_indexes.up.sql @@ -0,0 +1,13 @@ +CREATE INDEX IF NOT EXISTS ai_jobs_pending_claim_scope_idx + ON ai_jobs (task_type, model_profile, priority DESC, scheduled_at DESC, created_at DESC) + WHERE status = 'pending'; + +CREATE INDEX IF NOT EXISTS ai_jobs_running_lease_idx + ON ai_jobs ((COALESCE(heartbeat_at, started_at, updated_at))) + WHERE status = 'running'; + +CREATE INDEX IF NOT EXISTS ai_jobs_queue_stats_idx + ON ai_jobs (task_type, model_profile, status); + +CREATE INDEX IF NOT EXISTS ai_jobs_owner_stats_idx + ON ai_jobs (owner_service, task_type, model_profile, status); diff --git a/migrations/004_ai_jobs_queue_indexes.down.sql b/migrations/004_ai_jobs_queue_indexes.down.sql new file mode 100644 index 0000000..729eacd --- /dev/null +++ b/migrations/004_ai_jobs_queue_indexes.down.sql @@ -0,0 +1,4 @@ +DROP INDEX IF EXISTS ai_jobs_owner_stats_idx; +DROP INDEX IF EXISTS ai_jobs_queue_stats_idx; +DROP INDEX IF EXISTS ai_jobs_running_lease_idx; +DROP INDEX IF EXISTS ai_jobs_pending_claim_scope_idx; diff --git a/migrations/004_ai_jobs_queue_indexes.up.sql b/migrations/004_ai_jobs_queue_indexes.up.sql new file mode 100644 index 0000000..5034264 --- /dev/null +++ b/migrations/004_ai_jobs_queue_indexes.up.sql @@ -0,0 +1,13 @@ +CREATE INDEX IF NOT EXISTS ai_jobs_pending_claim_scope_idx + ON ai_jobs (task_type, model_profile, priority DESC, scheduled_at DESC, created_at DESC) + WHERE status = 'pending'; + +CREATE INDEX IF NOT EXISTS ai_jobs_running_lease_idx + ON ai_jobs ((COALESCE(heartbeat_at, started_at, updated_at))) + WHERE status = 'running'; + +CREATE INDEX IF NOT EXISTS ai_jobs_queue_stats_idx + ON ai_jobs (task_type, model_profile, status); + +CREATE INDEX IF NOT EXISTS ai_jobs_owner_stats_idx + ON ai_jobs (owner_service, task_type, model_profile, status);