> On Nov 15, 2020, at 10:47 PM, Bharath Rupireddy 
> <bharath.rupireddyforpostg...@gmail.com> wrote:
> 
> On Thu, Nov 12, 2020 at 4:01 AM Mark Dilger
> <mark.dil...@enterprisedb.com> wrote:
>> 
>> While supporting customers, it would frequently be useful to have more 
>> information about the history of a cluster.  For example, which prior 
>> versions were ever installed and running on the cluster?  Has the cluster 
>> ever been run with fsync=off?  When did the server last enter recovery, if 
>> ever?  Was a backup_label file present at that time?
>> 
> 
> +1 for the idea. The information will be useful at times for debugging 
> purposes.

Thanks for the feedback.

> 
>> 
>> Some of this type of information could strictly be fixed size, such as a 
>> fixed set of timestamps for the time at which a fixed set of things last 
>> occurred, or a fixed set of bits indicating whether a fixed set of things 
>> ever happened.
>> 
>> Some other types would be variable size, but hopefully short in practice, 
>> like a list of all postgres versions that have ever been run on the cluster.
>> 
>> Logging the information via the usual log mechanism seems insufficient, as 
>> log files may get rotated and this information lost.
>> 
> 
> True. Just a thought, can we use existing logging mechanism and APIs
> to write to a new file that never gets rotated by the syslogger(Of
> course, we need to think of the maximum file size that's allowed)? The
> idea is like this: we use elog/ereport and so on with a new debug
> level, when specified, instead of logging into the standard log files,
> we log it to the new file.

That's going in a very different direction from what I had in mind.  I was 
imagining something like a single binary or text file of either fixed size or 
something very short but not fixed.  The "very short but not fixed" part of 
that seems a bit too hand-waving on reflection.  Any variable length list, such 
as the list of postgres versions started on the cluster, could be made fixed 
length by only tracking the most recent N of them, perhaps with a flag bit to 
indicate if the list has overflowed.

Using elog/ereport with a new log level that gets directed into a different log 
file is an interesting idea, but it is not clear how to use elog/ereport in a 
principled way to write files that need never get too large.

>> Would it be acceptable to store some fixed set of flag bits and timestamps 
>> in pg_control?  Space there is at a premium.
>> 
> 
> Since we allocate ControlFileData in shared memory and also we may
> have some data with timestamps, variable texts and so on, having this
> included in pg_control data structure would not seem a good idea to
> me.

Variable length texts seem completely out of scope for this.  I would expect 
the data to be a collection of integer types and flag bits.  Fixed length text 
might also be possible, but I don't have any examples in mind of text that we'd 
want to track.

>> Would it make sense to alternately, or additionally, store some of this 
>> information in a flat text file in pg_data, say a new file named 
>> "cluster_history" or such?
>> 
> 
> IMHO, this is also a good idea. We need to think of the APIs to
> open/read/write/close that history file? How often and which processes
> and what type of data they write? Is it that the postmaster alone will
> write into that file? If multiple processes are allowed to write, how
> to deal with concurrent writers? Will users have to open manually and
> read that file? or Will we have some program similar to
> pg_controldata? Will we have some maximum limit to the size of this
> file?

This depends in part on feedback about which information others on this list 
would like to see included, but I was imagining something similar to how 
pg_control works, or using pg_control itself.  The maximum size for pg_control 
is 512 bytes, and on my system sizeof(ControlFileData) = 296, which leaves 216 
bytes free.  I didn't check how much that might change on systems with 
different alignments.  We could either use some of the ~200 bytes currently 
available in pg_control, or use another file, "pg_history" or such, following 
the design pattern already used for pg_control.

—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company





Reply via email to