From: | Melanie Plageman <melanieplageman(at)gmail(dot)com> |
---|---|
To: | Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Cc: | Robert Haas <robertmhaas(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de> |
Subject: | Add LSN <-> time conversion functionality |
Date: | 2023-12-27 22:16:17 |
Message-ID: | CAAKRu_Z7tR7D1=DR=xWQDefYk_nu_gxgW88X0HtxN6AsK-8_gA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
Elsewhere [1] I required a way to estimate the time corresponding to a
particular LSN in the past. I devised the attached LSNTimeline, a data
structure mapping LSNs <-> timestamps with decreasing precision for
older time, LSN pairs. This can be used to locate and translate a
particular time to LSN or vice versa using linear interpolation.
I've added an instance of the LSNTimeline to PgStat_WalStats and insert
new values to it in background writer's main loop. This patch set also
introduces some new pageinspect functions exposing LSN <-> time
translations.
Outside of being useful to users wondering about the last modification
time of a particular block in a relation, the LSNTimeline can be put to
use in other Postgres sub-systems to govern behavior based on resource
consumption -- using the LSN consumption rate as a proxy.
As mentioned in [1], the LSNTimeline is a prerequisite for my
implementation of a new freeze heuristic which seeks to freeze only
pages which will remain unmodified for a certain amount of wall clock
time. But one can imagine other uses for such translation capabilities.
The pageinspect additions need a bit more work. I didn't bump the
pageinspect version (didn't add the new functions to a new pageinspect
version file). I also didn't exercise the new pageinspect functions in a
test. I was unsure how to write a test which would be guaranteed not to
flake. Because the background writer updates the timeline, it seemed a
remote possibility that the time or LSN returned by the functions would
be 0 and as such, I'm not sure even a test that SELECT time/lsn > 0
would always pass.
I also noticed the pageinspect functions don't have XML id attributes
for link discoverability. I planned to add that in a separate commit.
- Melanie
Attachment | Content-Type | Size |
---|---|---|
v1-0001-Record-LSN-at-postmaster-startup.patch | text/x-patch | 2.4 KB |
v1-0002-Add-LSNTimeline-for-converting-LSN-time.patch | text/x-patch | 8.7 KB |
v1-0003-Add-LSNTimeline-to-PgStat_WalStats.patch | text/x-patch | 4.3 KB |
v1-0004-Bgwriter-maintains-global-LSNTimeline.patch | text/x-patch | 1.3 KB |
v1-0005-Add-time-LSN-translation-functions-to-pageinspect.patch | text/x-patch | 4.5 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Eisentraut | 2023-12-27 22:25:05 | Re: add function argument names to regex* functions. |
Previous Message | Peter Eisentraut | 2023-12-27 21:52:15 | Re: [HACKERS] Changing references of password encryption to hashing |