Re: Making empty Bitmapsets always be NULL

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

In response to

Responses

Browse pgsql-hackers by date

  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