pgbench-logging-v2.patch

text/plain

Filename: pgbench-logging-v2.patch
Type: text/plain
Part: 0
Message: Re: too much pgbench init output

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
Series: patch v2
File+
contrib/pgbench/pgbench.c 34 4
diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index 090c210..3cbb564 100644
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -135,6 +135,11 @@ int			unlogged_tables = 0;
 double		sample_rate = 0.0;
 
 /*
+ * logging steps (seconds between log messages)
+ */
+int			log_step_seconds = 5;
+
+/*
  * tablespace selection
  */
 char	   *tablespace = NULL;
@@ -1362,6 +1367,11 @@ init(bool is_no_vacuum)
 	char		sql[256];
 	int			i;
 
+	/* used to track elapsed time and estimate of the remaining time */
+	instr_time	start, diff;
+	double elapsed_sec, remaining_sec;
+	int log_interval = 1;
+
 	if ((con = doConnect()) == NULL)
 		exit(1);
 
@@ -1430,6 +1440,8 @@ init(bool is_no_vacuum)
 	}
 	PQclear(res);
 
+	INSTR_TIME_SET_CURRENT(start);
+
 	for (i = 0; i < naccounts * scale; i++)
 	{
 		int			j = i + 1;
@@ -1441,10 +1453,28 @@ init(bool is_no_vacuum)
 			exit(1);
 		}
 
-		if (j % 100000 == 0)
-			fprintf(stderr, "%d of %d tuples (%d%%) done.\n",
-					j, naccounts * scale,
-					(int) (((int64) j * 100) / (naccounts * scale)));
+		/* let's not call the timing for each row, but only each 100 rows */
+		if (j % 100 == 0 || j == scale * naccounts)
+		{
+			INSTR_TIME_SET_CURRENT(diff);
+			INSTR_TIME_SUBTRACT(diff, start);
+			
+			elapsed_sec = INSTR_TIME_GET_DOUBLE(diff);
+			remaining_sec = (scale * naccounts - j) * elapsed_sec / j;
+			
+			/* have ve reached the next interval? */
+			if (elapsed_sec >= log_interval * log_step_seconds) {
+			
+				fprintf(stderr, "%d of %d tuples (%d%%) done (elapsed %.2f s, remaining %.2f s).\n",
+						j, naccounts * scale,
+						(int) (((int64) j * 100) / (naccounts * scale)), elapsed_sec, remaining_sec);
+				
+				/* skip to the next interval */
+				log_interval = (int)ceil(elapsed_sec/log_step_seconds);
+				
+			}
+		}
+
 	}
 	if (PQputline(con, "\\.\n"))
 	{