From: | Ranier Vilela <ranier(dot)vf(at)gmail(dot)com> |
---|---|
To: | Yuya Watari <watari(dot)yuya(at)gmail(dot)com> |
Cc: | David Rowley <dgrowleyml(at)gmail(dot)com>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Making empty Bitmapsets always be NULL |
Date: | 2023-06-23 19:43:11 |
Message-ID: | CAEudQAo+yeNwti_Xk1tSMrZ4PiJg+sN29oO1KMOmTFsmSAa4-A@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Em qui., 22 de jun. de 2023 às 05:50, Yuya Watari <watari(dot)yuya(at)gmail(dot)com>
escreveu:
> Hello,
>
> On Thu, Jun 22, 2023 at 1:43 PM David Rowley <dgrowleyml(at)gmail(dot)com> wrote:
> > > 3. Avoid enlargement when nwords is equal wordnum.
> > > Can save cycles when in corner cases?
> >
> > No, you're just introducing a bug here. Arrays in C are zero-based,
> > so "wordnum >= a->nwords" is exactly the correct way to check if
> > wordnum falls outside the bounds of the existing allocated memory. By
> > changing that to "wordnum > a->nwords" we'll fail to enlarge the words
> > array when it needs to be enlarged by 1 element.
>
> I agree with David. Unfortunately, some of the regression tests failed
> with the v5 patch. These failures are due to the bug introduced by the
> #3 change.
>
Yeah, this is my fault.
Anyway thanks for the brilliant ideas about optimize bitmapset.
I worked a bit more on the v4 version and made a new v6 version, with some
changes.
I made some benchmarks with v4 and v6:
Windows 64 bits
msvc 2019 64 bits
== Query A ==
psql -U postgres -f c:\postgres_bench\tmp\bitmapset\create-tables-a.sql
psql -U postgres -f c:\postgres_bench\tmp\bitmapset\query-a.sql
=============
head:
Time: 3489,097 ms (00:03,489)
Time: 3501,780 ms (00:03,502)
patched v4:
Time: 2434,873 ms (00:02,435)
Time: 2310,832 ms (00:02,311)
Time: 2305,445 ms (00:02,305)
Time: 2185,972 ms (00:02,186)
Time: 2177,434 ms (00:02,177)
Time: 2169,883 ms (00:02,170)
patched v6:
Time: 2162,633 ms (00:02,163)
Time: 2159,805 ms (00:02,160)
Time: 2002,771 ms (00:02,003)
Time: 1944,436 ms (00:01,944)
Time: 1906,364 ms (00:01,906)
Time: 1903,897 ms (00:01,904)
== Query B ==
psql -U postgres -f c:\postgres_bench\tmp\bitmapset\create-tables-b.sql
psql -U postgres -f c:\postgres_bench\tmp\bitmapset\query-b.sql
patched v4:
Time: 2684,360 ms (00:02,684)
Time: 2482,571 ms (00:02,483)
Time: 2452,699 ms (00:02,453)
Time: 2465,223 ms (00:02,465)
patched v6:
Time: 1837,775 ms (00:01,838)
Time: 1801,274 ms (00:01,801)
Time: 1800,802 ms (00:01,801)
Time: 1798,786 ms (00:01,799)
I can see some improvement, would you mind testing v6 and reporting back?
regards,
Ranier Vilela
Attachment | Content-Type | Size |
---|---|---|
remove_zero_trailing_words_from_bitmapsets_v6.patch | application/octet-stream | 21.5 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Cary Huang | 2023-06-23 20:10:22 | Re: sslinfo extension - add notbefore and notafter timestamps |
Previous Message | Tomas Vondra | 2023-06-23 19:23:43 | Problems with estimating OR conditions, IS NULL on LEFT JOINs |