From 520c8a58267a4c405b6ac47f853a66c729f761a5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 16 Mar 2016 13:41:43 +0100 Subject: [PATCH] Use faster query to determine number of running builds The previous query select count(*) from builds b left join buildsteps s on s.build = b.id where busy = 1 and finished = 0 is suddenly taking several minutes. Probably PostgreSQL decided to use a suboptimal query plan. --- src/lib/Hydra/Controller/Root.pm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lib/Hydra/Controller/Root.pm b/src/lib/Hydra/Controller/Root.pm index 5070c090..722de6e4 100644 --- a/src/lib/Hydra/Controller/Root.pm +++ b/src/lib/Hydra/Controller/Root.pm @@ -45,9 +45,8 @@ sub begin :Private { } if (scalar(@args) == 0 || $args[0] ne "static") { - $c->stash->{nrRunningBuilds} = $c->model('DB::Builds')->search( - { finished => 0, 'buildsteps.busy' => 1 }, - { join => 'buildsteps', select => ["id"], distinct => 1 })->count(); + $c->stash->{nrRunningBuilds} = $c->model('DB')->schema->storage->dbh->selectrow_array( + "select count(distinct build) from buildsteps where busy = 1"); $c->stash->{nrQueuedBuilds} = $c->model('DB::Builds')->search({ finished => 0 })->count(); }