[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [OSSTEST PATCH 06/14] sg-report-flight: Use WITH clause to use index for $anypassq
> On Jul 21, 2020, at 7:41 PM, Ian Jackson <ian.jackson@xxxxxxxxxxxxx> wrote: > > Perf: runtime of my test case now ~11s > > Example query before (from the Perl DBI trace): > > SELECT * FROM flights JOIN steps USING (flight) > WHERE (branch='xen-unstable') > AND job=? and testid=? and status='pass' > AND ( (TRUE AND flight <= 151903) AND (blessing='real') ) > LIMIT 1 > > After: > > WITH s AS > ( > SELECT * FROM steps > WHERE job=? and testid=? and status='pass' > ) > SELECT * FROM flights JOIN s USING (flight) > WHERE (branch='xen-unstable') > AND ( (TRUE AND flight <= 151903) AND (blessing='real') ) > LIMIT 1 > > In both cases with bind vars: > > "test-amd64-i386-xl-pvshim" > "guest-start" > > Diff to the query: > > - SELECT * FROM flights JOIN steps USING (flight) > + WITH s AS > + ( > + SELECT * FROM steps > + WHERE job=? and testid=? and status='pass' > + ) > + SELECT * FROM flights JOIN s USING (flight) > WHERE (branch='xen-unstable') > - AND job=? and testid=? and status='pass' > AND ( (TRUE AND flight <= 151903) AND (blessing='real') ) > LIMIT 1 > > CC: George Dunlap <George.Dunlap@xxxxxxxxxx> > Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > --- > schema/steps-job-index.sql | 2 +- > sg-report-flight | 14 ++++++++++++-- > 2 files changed, 13 insertions(+), 3 deletions(-) > > diff --git a/schema/steps-job-index.sql b/schema/steps-job-index.sql > index 07dc5a30..2c33af72 100644 > --- a/schema/steps-job-index.sql > +++ b/schema/steps-job-index.sql > @@ -1,4 +1,4 @@ > --- ##OSSTEST## 006 Preparatory > +-- ##OSSTEST## 006 Needed > -- > -- This index helps sg-report-flight find if a test ever passed. > > diff --git a/sg-report-flight b/sg-report-flight > index b5398573..b8d948da 100755 > --- a/sg-report-flight > +++ b/sg-report-flight > @@ -849,10 +849,20 @@ sub justifyfailures ($;$) { > > my @failures= values %{ $fi->{Failures} }; > > + # In psql 9.6 this WITH clause makes postgresql do the steps query > + # first. This is good because if this test never passed we can > + # determine that really quickly using the new index, without > + # having to scan the flights table. (If the test passed we will > + # probably not have to look at many flights to find one, so in > + # that case this is not much worse.) Seems a bit weird, but OK. The SQL looks the same, so: Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx>
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |