aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/xlog.c
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2010-12-14 09:25:25 -0500
committerRobert Haas <rhaas@postgresql.org>2010-12-14 09:26:19 -0500
commit34c70c7ac4926495b7ab5ebfe748704313a4c822 (patch)
tree190f7f2ea4e0318a367e6eef07ee769818bfb54c /src/backend/access/transam/xlog.c
parent9878e295dc937c664367875dc001b7503df057f1 (diff)
downloadpostgresql-34c70c7ac4926495b7ab5ebfe748704313a4c822.tar.gz
postgresql-34c70c7ac4926495b7ab5ebfe748704313a4c822.zip
Instrument checkpoint sync calls.
Greg Smith, reviewed by Jeff Janes
Diffstat (limited to 'src/backend/access/transam/xlog.c')
-rw-r--r--src/backend/access/transam/xlog.c41
1 files changed, 35 insertions, 6 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 49764581049..b49b933de3e 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -6953,10 +6953,15 @@ LogCheckpointEnd(bool restartpoint)
{
long write_secs,
sync_secs,
- total_secs;
+ total_secs,
+ longest_secs,
+ average_secs;
int write_usecs,
sync_usecs,
- total_usecs;
+ total_usecs,
+ longest_usecs,
+ average_usecs;
+ uint64 average_sync_time;
CheckpointStats.ckpt_end_t = GetCurrentTimestamp();
@@ -6972,18 +6977,39 @@ LogCheckpointEnd(bool restartpoint)
CheckpointStats.ckpt_sync_end_t,
&sync_secs, &sync_usecs);
+ /*
+ * Timing values returned from CheckpointStats are in microseconds.
+ * Convert to the second plus microsecond form that TimestampDifference
+ * returns for homogeneous printing.
+ */
+ longest_secs = (long) (CheckpointStats.ckpt_longest_sync / 1000000);
+ longest_usecs = CheckpointStats.ckpt_longest_sync -
+ (uint64) longest_secs * 1000000;
+
+ average_sync_time = 0;
+ if (CheckpointStats.ckpt_sync_rels > 0)
+ average_sync_time = CheckpointStats.ckpt_agg_sync_time /
+ CheckpointStats.ckpt_sync_rels;
+ average_secs = (long) (average_sync_time / 1000000);
+ average_usecs = average_sync_time - (uint64) average_secs * 1000000;
+
if (restartpoint)
elog(LOG, "restartpoint complete: wrote %d buffers (%.1f%%); "
- "write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s",
+ "write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; "
+ "sync files=%d, longest=%ld.%03d s, average=%ld.%03d s",
CheckpointStats.ckpt_bufs_written,
(double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
write_secs, write_usecs / 1000,
sync_secs, sync_usecs / 1000,
- total_secs, total_usecs / 1000);
+ total_secs, total_usecs / 1000,
+ CheckpointStats.ckpt_sync_rels,
+ longest_secs, longest_usecs / 1000,
+ average_secs, average_usecs / 1000);
else
elog(LOG, "checkpoint complete: wrote %d buffers (%.1f%%); "
"%d transaction log file(s) added, %d removed, %d recycled; "
- "write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s",
+ "write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; "
+ "sync files=%d, longest=%ld.%03d s, average=%ld.%03d s",
CheckpointStats.ckpt_bufs_written,
(double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
CheckpointStats.ckpt_segs_added,
@@ -6991,7 +7017,10 @@ LogCheckpointEnd(bool restartpoint)
CheckpointStats.ckpt_segs_recycled,
write_secs, write_usecs / 1000,
sync_secs, sync_usecs / 1000,
- total_secs, total_usecs / 1000);
+ total_secs, total_usecs / 1000,
+ CheckpointStats.ckpt_sync_rels,
+ longest_secs, longest_usecs / 1000,
+ average_secs, average_usecs / 1000);
}
/*