diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index ad8e272..523c278 100644
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -347,6 +347,7 @@ usage(void)
 		   "  -i, --initialize         invokes initialization mode\n"
 		   "  -F, --fillfactor=NUM     set fill factor\n"
 		   "  -n, --no-vacuum          do not run VACUUM after initialization\n"
+		   "  -N, --no-checkpoint      do not run CHECKPOINT after initialization\n"
 		   "  -q, --quiet              quiet logging (one message each 5 seconds)\n"
 		   "  -s, --scale=NUM          scaling factor\n"
 		   "  --foreign-keys           create foreign key constraints between tables\n"
@@ -366,7 +367,8 @@ usage(void)
 		   "                           protocol for submitting queries "
 		                                           "(default: simple)\n"
 		   "  -n, --no-vacuum          do not run VACUUM before tests\n"
-		   "  -N, --skip-some-updates  skip updates of pgbench_tellers and pgbench_branches\n"
+		   "  -N, --no-checkpoint      do not run CHECKPOINT before tests\n"
+		   "  -u, --skip-some-updates  skip updates of pgbench_tellers and pgbench_branches\n"
 		   "  -P, --progress=NUM       show thread progress report every NUM seconds\n"
 		   "  -r, --report-latencies   report average latency per command\n"
 		   "  -R, --rate=SPEC          target rate in transactions per second\n"
@@ -1520,7 +1522,7 @@ disconnect_all(CState *state, int length)
 
 /* create tables and setup data */
 static void
-init(bool is_no_vacuum)
+init(bool is_no_vacuum, bool is_no_checkpoint)
 {
 /* The scale factor at/beyond which 32bit integers are incapable of storing
  * 64bit values.
@@ -1775,6 +1777,12 @@ init(bool is_no_vacuum)
 		}
 	}
 
+	/* checkpoint */
+	if (!is_no_checkpoint)
+	{
+		fprintf(stderr, "checkpoint...\n");
+		executeStatement(con, "checkpoint");
+	}
 
 	fprintf(stderr, "done.\n");
 	PQfinish(con);
@@ -2213,6 +2221,7 @@ main(int argc, char **argv)
 		{"jobs", required_argument, NULL, 'j'},
 		{"log", no_argument, NULL, 'l'},
 		{"no-vacuum", no_argument, NULL, 'n'},
+		{"no-checkpoint", no_argument, NULL, 'N'},
 		{"port", required_argument, NULL, 'p'},
 		{"progress", required_argument, NULL, 'P'},
 		{"protocol", required_argument, NULL, 'M'},
@@ -2220,7 +2229,7 @@ main(int argc, char **argv)
 		{"report-latencies", no_argument, NULL, 'r'},
 		{"scale", required_argument, NULL, 's'},
 		{"select-only", no_argument, NULL, 'S'},
-		{"skip-some-updates", no_argument, NULL, 'N'},
+		{"skip-some-updates", no_argument, NULL, 'u'},
 		{"time", required_argument, NULL, 'T'},
 		{"transactions", required_argument, NULL, 't'},
 		{"username", required_argument, NULL, 'U'},
@@ -2240,6 +2249,7 @@ main(int argc, char **argv)
 	int			nclients = 1;	/* default number of simulated clients */
 	int			nthreads = 1;	/* default number of threads */
 	int			is_init_mode = 0;		/* initialize mode? */
+	int			is_no_checkpoint = 0;		/* no checkpoint at all before testing? */
 	int			is_no_vacuum = 0;		/* no vacuum at all before testing? */
 	int			do_vacuum_accounts = 0; /* do vacuum accounts before testing? */
 	int			ttype = 0;		/* transaction type. 0: TPC-B, 1: SELECT only,
@@ -2323,11 +2333,14 @@ main(int argc, char **argv)
 			case 'd':
 				debug++;
 				break;
+			case 'u':
+				ttype = 2;
+				break;
 			case 'S':
 				ttype = 1;
 				break;
 			case 'N':
-				ttype = 2;
+				is_no_checkpoint++;
 				break;
 			case 'c':
 				nclients = atoi(optarg);
@@ -2533,7 +2546,7 @@ main(int argc, char **argv)
 
 	if (is_init_mode)
 	{
-		init(is_no_vacuum);
+		init(is_no_vacuum, is_no_checkpoint);
 		exit(0);
 	}
 
@@ -2720,6 +2733,12 @@ main(int argc, char **argv)
 			fprintf(stderr, "end.\n");
 		}
 	}
+	if (!is_no_checkpoint)
+	{
+		fprintf(stderr, "starting checkpoint...");
+		executeStatement(con, "checkpoint");
+		fprintf(stderr, "end.\n");
+	}
 	PQfinish(con);
 
 	/* set random seed */
