Hi,

On 2022-03-18 13:32:52 +0530, Bharath Rupireddy wrote:
> @@ -6115,46 +6116,81 @@ LogCheckpointEnd(bool restartpoint)
>                       CheckpointStats.ckpt_sync_rels;
>       average_msecs = (long) ((average_sync_time + 999) / 1000);
>  
> +     initStringInfo(&logmsg);
> +
>       if (restartpoint)
> -             ereport(LOG,
> -                             (errmsg("restartpoint complete: wrote %d 
> buffers (%.1f%%); "
> -                                             "%d WAL file(s) added, %d 
> removed, %d recycled; "
> -                                             "write=%ld.%03d s, 
> sync=%ld.%03d s, total=%ld.%03d s; "
> -                                             "sync files=%d, 
> longest=%ld.%03d s, average=%ld.%03d s; "
> -                                             "distance=%d kB, estimate=%d 
> kB",
> -                                             
> CheckpointStats.ckpt_bufs_written,
> -                                             (double) 
> CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
> -                                             CheckpointStats.ckpt_segs_added,
> -                                             
> CheckpointStats.ckpt_segs_removed,
> -                                             
> CheckpointStats.ckpt_segs_recycled,
> -                                             write_msecs / 1000, (int) 
> (write_msecs % 1000),
> -                                             sync_msecs / 1000, (int) 
> (sync_msecs % 1000),
> -                                             total_msecs / 1000, (int) 
> (total_msecs % 1000),
> -                                             CheckpointStats.ckpt_sync_rels,
> -                                             longest_msecs / 1000, (int) 
> (longest_msecs % 1000),
> -                                             average_msecs / 1000, (int) 
> (average_msecs % 1000),
> -                                             (int) (PrevCheckPointDistance / 
> 1024.0),
> -                                             (int) 
> (CheckPointDistanceEstimate / 1024.0))));
> +             appendStringInfo(&logmsg,
> +                                             _("restartpoint complete: wrote 
> %d buffers (%.1f%%); "
> +                                               "%d WAL file(s) added, %d 
> removed, %d recycled; "
> +                                               "write=%ld.%03d s, 
> sync=%ld.%03d s, total=%ld.%03d s; "
> +                                               "sync files=%d, 
> longest=%ld.%03d s, average=%ld.%03d s; "
> +                                               "distance=%d kB, estimate=%d 
> kB"),
> +                                               
> CheckpointStats.ckpt_bufs_written,
> +                                               (double) 
> CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
> +                                               
> CheckpointStats.ckpt_segs_added,
> +                                               
> CheckpointStats.ckpt_segs_removed,
> +                                               
> CheckpointStats.ckpt_segs_recycled,
> +                                               write_msecs / 1000, (int) 
> (write_msecs % 1000),
> +                                               sync_msecs / 1000, (int) 
> (sync_msecs % 1000),
> +                                               total_msecs / 1000, (int) 
> (total_msecs % 1000),
> +                                               
> CheckpointStats.ckpt_sync_rels,
> +                                               longest_msecs / 1000, (int) 
> (longest_msecs % 1000),
> +                                               average_msecs / 1000, (int) 
> (average_msecs % 1000),
> +                                               (int) (PrevCheckPointDistance 
> / 1024.0),
> +                                               (int) 
> (CheckPointDistanceEstimate / 1024.0));
>       else
> -             ereport(LOG,
> -                             (errmsg("checkpoint complete: wrote %d buffers 
> (%.1f%%); "
> -                                             "%d WAL file(s) added, %d 
> removed, %d recycled; "
> -                                             "write=%ld.%03d s, 
> sync=%ld.%03d s, total=%ld.%03d s; "
> -                                             "sync files=%d, 
> longest=%ld.%03d s, average=%ld.%03d s; "
> -                                             "distance=%d kB, estimate=%d 
> kB",
> -                                             
> CheckpointStats.ckpt_bufs_written,
> -                                             (double) 
> CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
> -                                             CheckpointStats.ckpt_segs_added,
> -                                             
> CheckpointStats.ckpt_segs_removed,
> -                                             
> CheckpointStats.ckpt_segs_recycled,
> -                                             write_msecs / 1000, (int) 
> (write_msecs % 1000),
> -                                             sync_msecs / 1000, (int) 
> (sync_msecs % 1000),
> -                                             total_msecs / 1000, (int) 
> (total_msecs % 1000),
> -                                             CheckpointStats.ckpt_sync_rels,
> -                                             longest_msecs / 1000, (int) 
> (longest_msecs % 1000),
> -                                             average_msecs / 1000, (int) 
> (average_msecs % 1000),
> -                                             (int) (PrevCheckPointDistance / 
> 1024.0),
> -                                             (int) 
> (CheckPointDistanceEstimate / 1024.0))));
> +             appendStringInfo(&logmsg,
> +                                             _("checkpoint complete: wrote 
> %d buffers (%.1f%%); "
> +                                               "%d WAL file(s) added, %d 
> removed, %d recycled; "
> +                                               "write=%ld.%03d s, 
> sync=%ld.%03d s, total=%ld.%03d s; "
> +                                               "sync files=%d, 
> longest=%ld.%03d s, average=%ld.%03d s; "
> +                                               "distance=%d kB, estimate=%d 
> kB"),
> +                                               
> CheckpointStats.ckpt_bufs_written,
> +                                               (double) 
> CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
> +                                               
> CheckpointStats.ckpt_segs_added,
> +                                               
> CheckpointStats.ckpt_segs_removed,
> +                                               
> CheckpointStats.ckpt_segs_recycled,
> +                                               write_msecs / 1000, (int) 
> (write_msecs % 1000),
> +                                               sync_msecs / 1000, (int) 
> (sync_msecs % 1000),
> +                                               total_msecs / 1000, (int) 
> (total_msecs % 1000),
> +                                               
> CheckpointStats.ckpt_sync_rels,
> +                                               longest_msecs / 1000, (int) 
> (longest_msecs % 1000),
> +                                               average_msecs / 1000, (int) 
> (average_msecs % 1000),
> +                                               (int) (PrevCheckPointDistance 
> / 1024.0),
> +                                               (int) 
> (CheckPointDistanceEstimate / 1024.0));

before we further change this (as done in this patch) we should deduplicate
these huge statements in a separate patch / commit.


> +     if (CheckpointStats.repl_snap_files_rmvd_cnt > 0)
> +     {
> +             long t_msecs;
> +
> +             t_msecs = 
> TimestampDifferenceMilliseconds(CheckpointStats.repl_snap_start_t,
> +                                                                             
>                   CheckpointStats.repl_snap_end_t);
> +
> +             appendStringInfo(&logmsg,
> +                                             _("; logical decoding snapshot 
> file(s) removed=" UINT64_FORMAT ", time=%ld.%03d s, cutoff LSN=%X/%X"),
> +                                               
> CheckpointStats.repl_snap_files_rmvd_cnt,
> +                                               t_msecs / 1000, (int) 
> (t_msecs % 1000),
> +                                               
> LSN_FORMAT_ARGS(CheckpointStats.repl_snap_cutoff_lsn));
> +     }

As discussed in a bunch of other threads, we typically prefer to cast to long
long and use %ll instead of using UINT64_FORMAT these days.


> +     if (CheckpointStats.repl_map_files_rmvd_cnt ||
> +             CheckpointStats.repl_map_files_syncd_cnt > 0)
> +     {
> +             long t_msecs;
> +
> +             t_msecs = 
> TimestampDifferenceMilliseconds(CheckpointStats.repl_snap_start_t,
> +                                                                             
>                   CheckpointStats.repl_snap_end_t);
> +
> +             appendStringInfo(&logmsg,
> +                                             _("; logical decoding rewrite 
> mapping file(s) removed=" UINT64_FORMAT ", synced=" UINT64_FORMAT ", 
> time=%ld.%03d s, cutoff LSN=%X/%X"),
> +                                               
> CheckpointStats.repl_map_files_rmvd_cnt,
> +                                               
> CheckpointStats.repl_map_files_syncd_cnt,
> +                                               t_msecs / 1000, (int) 
> (t_msecs % 1000),
> +                                               
> LSN_FORMAT_ARGS(CheckpointStats.repl_map_cutoff_lsn));
> +     }
> +
> +     ereport(LOG, errmsg_internal("%s", logmsg.data));
> +     pfree(logmsg.data);
>  }

This practically doubles the size of the log message - doesn't that seem a bit
disproportionate? Can we make this more dense? "logical decoding rewrite
mapping file(s) removed=" and "logical decoding snapshot file(s) removed=" is
quite long.


Greetings,

Andres Freund


Reply via email to