Closed Ngalstyan4 closed 1 year ago
Merging #205 (39f34ca) into main (3474f82) will increase coverage by
0.00%
. Report is 6 commits behind head on main. The diff coverage is85.71%
.
metric | old | new | pct change |
---|---|---|---|
recall (after create) | 0.740 | 0.740 | - |
recall (after insert) | 0.750 | 0.764 | +1.87% |
select bulk tps | 523.505 | 486.206 | -7.12% |
select bulk latency (ms) | 14.463 | 15.562 | +7.60% |
select bulk latency (stddev ms) | 2.168 | 2.963 | +36.67% |
create latency (ms) | 1212.732 | 1212.992 | +0.02% |
insert bulk tps | 12.198 | 11.131 | -8.75% |
insert bulk latency (ms) | 81.974 | 89.830 | +9.58% |
insert bulk latency (stddev ms) | 3.409 | 3.710 | +8.83% |
disk usage (bytes) | 6348800.000 | 6348800.000 | - |
[Copied from Ezra's pr (#200):
This adds checks for the
work_mem
andmaintenance_work_mem
GUC variables. Checks for both are fairly uncommon in the upstream extensions. It seems likemaintenance_work_mem
is checked more often thanwork_mem
this may be because it's greater size makes it less prohibitive to respect. Neither is actually enforced by postgres. I'll list some examples belowmaintenance_work_mem
is referenced more infrequently but its use is pretty straightforward when it is insrc/backend/access/gin/gininsert.c
in the build callback functionmaintenance_work_mem
is checkedsimilarly nbtree checks it in its parallel build functions
src/backend/access/nbtree/nbtsort.c
It is also checked in
src/backend/commands/vacuumparallel.c
. It is never checked in contrib. I think thebloom
in the earlier listing refers to an internal bloomfilter, not the extension. Notably though pgvector does have a checkwork_mem
is also checked very infrequently although within the optimizer/executor there are a number of checks. insrc/backend/access/gin/ginfast.c
it gets checkedit gets checked in
src/backend/access/nbtree/nbtpage.c
as well, albeit in a function that is only called during vacuumsI have however found the following calling pattern in several places including
contrib/tablefunc/tablefunc.c
,contrib/dblink/dblink.c
,contrib/adminpack/adminpack.c
and also pgvector (albeit only in ivfscans)this seems to be a data structure that holds tuples to be returned by a scan. It doesn't account for memory allocated elsewhere though. Overall the lack of enforcement seems to make checking these values somewhat uncommon. I think it makes sense to enforce
maintenance_work_mem
because building an index is relatively infrequent, but maybe enforcing runtime checks forwork_mem
is overkill