Skip to content

Commit b19465a

Browse files
committed
Optimize attribute loading
1 parent 2a7cfad commit b19465a

3 files changed

Lines changed: 20 additions & 6 deletions

File tree

src/dstack/_internal/server/background/tasks/process_metrics.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from dstack._internal.core.models.runs import JobStatus
1010
from dstack._internal.server import settings
1111
from dstack._internal.server.db import get_session_ctx
12-
from dstack._internal.server.models import InstanceModel, JobMetricsPoint, JobModel
12+
from dstack._internal.server.models import InstanceModel, JobMetricsPoint, JobModel, ProjectModel
1313
from dstack._internal.server.schemas.runner import MetricsResponse
1414
from dstack._internal.server.services.instances import get_instance_ssh_private_keys
1515
from dstack._internal.server.services.jobs import get_job_provisioning_data, get_job_runtime_data
@@ -31,7 +31,11 @@ async def collect_metrics():
3131
res = await session.execute(
3232
select(JobModel)
3333
.where(JobModel.status.in_([JobStatus.RUNNING]))
34-
.options(joinedload(JobModel.instance).joinedload(InstanceModel.project))
34+
.options(
35+
joinedload(JobModel.instance)
36+
.joinedload(InstanceModel.project)
37+
.load_only(ProjectModel.ssh_private_key)
38+
)
3539
.order_by(JobModel.last_processed_at.asc())
3640
.limit(MAX_JOBS_FETCHED)
3741
)

src/dstack/_internal/server/background/tasks/process_prometheus_metrics.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@
99
from dstack._internal.core.consts import DSTACK_SHIM_HTTP_PORT
1010
from dstack._internal.core.models.runs import JobStatus
1111
from dstack._internal.server.db import get_session_ctx
12-
from dstack._internal.server.models import InstanceModel, JobModel, JobPrometheusMetrics
12+
from dstack._internal.server.models import (
13+
InstanceModel,
14+
JobModel,
15+
JobPrometheusMetrics,
16+
ProjectModel,
17+
)
1318
from dstack._internal.server.services.instances import get_instance_ssh_private_keys
1419
from dstack._internal.server.services.jobs import get_job_provisioning_data, get_job_runtime_data
1520
from dstack._internal.server.services.runner import client
@@ -43,7 +48,11 @@ async def collect_prometheus_metrics():
4348
JobPrometheusMetrics.collected_at < cutoff,
4449
),
4550
)
46-
.options(joinedload(JobModel.instance).joinedload(InstanceModel.project))
51+
.options(
52+
joinedload(JobModel.instance)
53+
.joinedload(InstanceModel.project)
54+
.load_only(ProjectModel.ssh_private_key)
55+
)
4756
.order_by(JobModel.last_processed_at.asc())
4857
.limit(MAX_JOBS_FETCHED)
4958
)

src/dstack/_internal/server/background/tasks/process_submitted_jobs.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
JobModel,
4444
ProjectModel,
4545
RunModel,
46+
UserModel,
4647
VolumeAttachmentModel,
4748
VolumeModel,
4849
)
@@ -162,7 +163,7 @@ async def _process_submitted_job(session: AsyncSession, job_model: JobModel):
162163
select(RunModel)
163164
.where(RunModel.id == job_model.run_id)
164165
.options(joinedload(RunModel.project).joinedload(ProjectModel.backends))
165-
.options(joinedload(RunModel.user))
166+
.options(joinedload(RunModel.user).load_only(UserModel.name))
166167
.options(joinedload(RunModel.fleet).joinedload(FleetModel.instances))
167168
)
168169
run_model = res.unique().scalar_one()
@@ -356,7 +357,7 @@ async def _process_submitted_job(session: AsyncSession, job_model: JobModel):
356357
await session.execute(
357358
select(VolumeModel)
358359
.where(VolumeModel.id.in_(volumes_ids))
359-
.options(selectinload(VolumeModel.user))
360+
.options(joinedload(VolumeModel.user).load_only(UserModel.name))
360361
.order_by(VolumeModel.id) # take locks in order
361362
.with_for_update(key_share=True)
362363
)

0 commit comments

Comments
 (0)