From: | Mithun Cy <mithun(dot)cy(at)enterprisedb(dot)com> |
---|---|
To: | Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Robert Haas <robertmhaas(at)gmail(dot)com>, Andrew Dunstan <andrew(dot)dunstan(at)2ndquadrant(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: TAP tests take a long time |
Date: | 2017-04-12 14:47:59 |
Message-ID: | CAD__Ouh-qaEb+rD7Uy-4g3xQYOrhPzHs-a_TrFAjiQ5azAW5+w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Wed, Apr 12, 2017 at 6:24 PM, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
wrote:
>
> I have looked into the tests and I think we can do some optimization
> without losing much on code coverage. First is we are doing both
> Vacuum Full and Vacuum on hash_split_heap in the same test after
> executing few statements, it seems to me that we can avoid doing
> Vacuum Full. Also, I think we can try by reducing the number of
> inserts in hash_split_heap to see if we can achieve the code coverage
> of split bucket code path. Finally, I am not sure if Reindex Index
> hash_split_index is required for code coverage, but we might need it
> for the sake of testing that operation.
>
> Mithun, as you are the original author of these tests, can you please
> try some of the above optimizations and any others you can think of
> and see if we can reduce the time for hash index tests?
I have tried to optimize the tests maintaining the same coverage we were
able to get with it.
Original coverage
Lines: 1466 2341 62.6 %
Functions: 79 101 78.2 %
After test changes
Lines: 1534 2341 65.5 %
Functions: 79 101 78.2 %
changes done
Earlier :
CREATE INDEX hash_split_index on hash_split_heap USING HASH (keycol);
+ Time: 8.950 ms
INSERT INTO hash_split_heap SELECT 1 FROM generate_series(1, 70000) a;
+ Time: 3135.098 ms (00:03.135)
VACUUM FULL hash_split_heap;
+ Time: 2748.146 ms (00:02.748)
REINDEX INDEX hash_split_index;
+ Time: 114.290 ms
Insertion and vacuum full were taking most of the time in tests. I have
removed the vacuum full as suggested by you, which is taken care by vacuum
statement at the end, And reduced the number of rows inserted to trigger a
split, by inserting some records before creating hash index. This way we
start with less number of buckets and thus splits will happen much early.
Now :
+ INSERT INTO hash_split_heap SELECT 1 FROM generate_series(1, 500) a;
+ Time: 2.946 ms
CREATE INDEX hash_split_index on hash_split_heap USING HASH (keycol);
! Time: 8.933 ms
! INSERT INTO hash_split_heap SELECT 1 FROM generate_series(1, 5000) a;
! Time: 81.674 ms
Also removed REINDEX INDEX as suggested which was not adding for coverage.
With this, I think tests should run significantly faster now.
--
Thanks and Regards
Mithun C Y
EnterpriseDB: http://www.enterprisedb.com
Attachment | Content-Type | Size |
---|---|---|
hash_index_optimize_testruns.patch | application/octet-stream | 2.1 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Fujii Masao | 2017-04-12 14:48:24 | Re: Tab completion support for ALTER SUBSCRIPTION REFRESH PUBLICATION |
Previous Message | Peter Eisentraut | 2017-04-12 14:46:38 | Re: Interval for launching the table sync worker |