Re: [PATCH] Don't block HOT update by BRIN index

From: Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com>
To: Josef Šimánek <josef(dot)simanek(at)gmail(dot)com>
Cc: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [PATCH] Don't block HOT update by BRIN index
Date: 2021-11-30 19:11:03
Message-ID: c9a45a90-ed8c-61c6-c04e-e23d5dbbe415@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

OK,

I've polished the last version of the patch a bit (added a regression
test with update of attribute in index predicate and docs about the new
flag into indexam.sgml) and pushed.

I wonder if we could/should improve handling of index predicates. In
particular, it seems to me we could simply ignore indexes when the new
row does not match the index predicate. For example, if there's an index

CREATE INDEX ON t (a) WHERE b = 1;

and the update does:

UPDATE t SET b = 2 WHERE ...;

then we'll not add the tuple pointer to this index anyway, and we could
simply ignore this index when considering HOT. But I might be missing
something important about HOT ...

The main problem I see with this is it requires evaluating the index
predicate for each tuple, which makes it incompatible with the caching
in RelationGetIndexAttrBitmap. Just ditching the caching seems like a
bad idea, so we'd probably have to do this in two phases:

1) Do what we do now, i.e. RelationGetIndexAttrBitmap considering all
indexes / attributes. If this says HOT is possible, great - we're done.

2) If (1) says HOT is not possible, we need to look whether it's because
of regular or partial index. For regular indexes it's clear, for partial
indexes we could ignore this if the predicate evaluates to false for the
new row.

But even if such optimization is possible, it's way out of scope of this
patch and it's not clear to me it's actually a sensible trade-off.

regards

--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2021-11-30 19:33:25 Re: Can I assume relation would not be invalid during from ExecutorRun to ExecutorEnd
Previous Message Tomas Vondra 2021-11-30 19:04:47 pgsql: Ignore BRIN indexes when checking for HOT udpates