From 9bd34009cff56174482256b58a5bc06451a8b59e Mon Sep 17 00:00:00 2001 From: Victor Skvortsov Date: Mon, 14 Sep 2026 12:01:02 +0500 Subject: [PATCH] Add DB index for instance_health_checks --- ...add_ix_instance_health_checks_instance_.py | 44 +++++++++++++++++++ src/dstack/_internal/server/models.py | 8 ++++ 2 files changed, 52 insertions(+) create mode 100644 src/dstack/_internal/server/migrations/versions/2026/09_14_0656_40f19bea9d2a_add_ix_instance_health_checks_instance_.py diff --git a/src/dstack/_internal/server/migrations/versions/2026/09_14_0656_40f19bea9d2a_add_ix_instance_health_checks_instance_.py b/src/dstack/_internal/server/migrations/versions/2026/09_14_0656_40f19bea9d2a_add_ix_instance_health_checks_instance_.py new file mode 100644 index 000000000..ce42f9c71 --- /dev/null +++ b/src/dstack/_internal/server/migrations/versions/2026/09_14_0656_40f19bea9d2a_add_ix_instance_health_checks_instance_.py @@ -0,0 +1,44 @@ +"""Add ix_instance_health_checks_instance_id_collected_at + +Revision ID: 40f19bea9d2a +Revises: 652af7a3c9c9 +Create Date: 2026-09-14 06:56:41.088290+00:00 + +""" + +from alembic import op + +# revision identifiers, used by Alembic. +revision = "40f19bea9d2a" +down_revision = "652af7a3c9c9" +branch_labels = None +depends_on = None + +INDEX_NAME = "ix_instance_health_checks_instance_id_collected_at" +TABLE_NAME = "instance_health_checks" + + +def _drop_index() -> None: + op.drop_index( + INDEX_NAME, + table_name=TABLE_NAME, + if_exists=True, + postgresql_concurrently=True, + ) + + +def upgrade() -> None: + with op.get_context().autocommit_block(): + _drop_index() + op.create_index( + INDEX_NAME, + TABLE_NAME, + ["instance_id", "collected_at"], + unique=False, + postgresql_concurrently=True, + ) + + +def downgrade() -> None: + with op.get_context().autocommit_block(): + _drop_index() diff --git a/src/dstack/_internal/server/models.py b/src/dstack/_internal/server/models.py index e72153cae..8fb9113a9 100644 --- a/src/dstack/_internal/server/models.py +++ b/src/dstack/_internal/server/models.py @@ -1061,6 +1061,14 @@ class InstanceHealthCheckModel(BaseModel): status: Mapped[HealthStatus] = mapped_column(EnumAsString(HealthStatus, 100)) response: Mapped[str] = mapped_column(Text) + __table_args__ = ( + Index( + "ix_instance_health_checks_instance_id_collected_at", + instance_id, + collected_at, + ), + ) + class VolumeModel(PipelineModelMixin, BaseModel): __tablename__ = "volumes"