Skip to content

Commit

Permalink
Disable prepared statements completely
Browse files Browse the repository at this point in the history
Because of the way DBIx::Class does prepared statements, even
innocuous queries such

  $c->model('DB::Builds)->search({finished => 0})

can be extremely slow.  This is because DBIx::Class prepares a
PostgreSQL statement

  select ... from Builds where finished = ?

and since Builds is very large and there is a large fraction of rows
with "finished = 1", the PostgreSQL query planner decides to implement
this query with a sequential scan of the Builds table (despite the
existence of an index on "finished"), which is extremely slow.  It
would be nice if we could tell DBIx::Class that constants should be
part of the prepared statement, i.e.

  select ... from Builds where finished = 0

but AFAIK we can't.
  • Loading branch information
edolstra committed Mar 12, 2012
1 parent 0420232 commit a4b63db
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 10 deletions.
14 changes: 5 additions & 9 deletions src/lib/Hydra/Controller/Root.pm
Original file line number Diff line number Diff line change
Expand Up @@ -95,15 +95,11 @@ sub timeline :Local {

sub status :Local {
my ($self, $c) = @_;
$c->model('DB')->storage->dbh_do(sub {
my (undef, $dbh) = @_;
local $dbh->{pg_server_prepare} = 0;
$c->stash->{steps} = [ $c->model('DB::BuildSteps')->search(
{ 'me.busy' => 1, 'build.finished' => 0, 'build.busy' => 1 },
{ join => [ 'build' ]
, order_by => [ 'machine' ]
} ) ];
});
$c->stash->{steps} = [ $c->model('DB::BuildSteps')->search(
{ 'me.busy' => 1, 'build.finished' => 0, 'build.busy' => 1 },
{ join => [ 'build' ]
, order_by => [ 'machine' ]
} ) ];
}


Expand Down
5 changes: 4 additions & 1 deletion src/lib/Hydra/Model/DB.pm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ use Hydra::Helper::Nix;

__PACKAGE__->config(
schema_class => 'Hydra::Schema',
connect_info => [getHydraDBPath],
connect_info => {
dsn => getHydraDBPath,
pg_server_prepare => 0,
},
);

=head1 NAME
Expand Down

0 comments on commit a4b63db

Please sign in to comment.