diff options
author | Thomas Munro <tmunro@postgresql.org> | 2023-07-04 15:16:34 +1200 |
---|---|---|
committer | Thomas Munro <tmunro@postgresql.org> | 2023-07-04 15:29:41 +1200 |
commit | 74ad9b0d1e7c7ef2f1c6c2468e87469b11700359 (patch) | |
tree | ab7feaca01385bc744cf6b2093ccee7cff16bc39 /src/backend/tcop/postgres.c | |
parent | 255a925d333be9a3d6314e2fe698063eb8e753a6 (diff) | |
download | postgresql-74ad9b0d1e7c7ef2f1c6c2468e87469b11700359.tar.gz postgresql-74ad9b0d1e7c7ef2f1c6c2468e87469b11700359.zip |
Re-bin segment when memory pages are freed.
It's OK to be lazy about re-binning memory segments when allocating,
because that can only leave segments in a bin that's too high. We'll
search higher bins if necessary while allocating next time, and
also eventually re-bin, so no memory can become unreachable that way.
However, when freeing memory, the largest contiguous range of free pages
might go up, so we should re-bin eagerly to make sure we don't leave the
segment in a bin that is too low for get_best_segment() to find.
The re-binning code is moved into a function of its own, so it can be
called whenever free pages are returned to the segment's free page map.
Back-patch to all supported releases.
Author: Dongming Liu <ldming101@gmail.com>
Reviewed-by: Robert Haas <robertmhaas@gmail.com> (earlier version)
Reviewed-by: Thomas Munro <thomas.munro@gmail.com>
Discussion: https://postgr.es/m/CAL1p7e8LzB2LSeAXo2pXCW4%2BRya9s0sJ3G_ReKOU%3DAjSUWjHWQ%40mail.gmail.com
Diffstat (limited to 'src/backend/tcop/postgres.c')
0 files changed, 0 insertions, 0 deletions