diff --git a/dist/stat_data.py b/dist/stat_data.py
index 80c5d3e54..31de15443 100644
--- a/dist/stat_data.py
+++ b/dist/stat_data.py
@@ -548,6 +548,11 @@ connection_stats = [
     TxnStat('txn_checkpoint_fsync_post', 'transaction fsync calls for checkpoint after allocating the transaction ID'),
     TxnStat('txn_checkpoint_fsync_post_duration', 'transaction fsync duration for checkpoint after allocating the transaction ID (usecs)', 'no_clear,no_scale'),
     TxnStat('txn_checkpoint_generation', 'transaction checkpoint generation', 'no_clear,no_scale'),
+    TxnStat('txn_checkpoint_handle_count', 'transaction checkpoint handles included'),
+    TxnStat('txn_checkpoint_handle_count_skip', 'transaction checkpoint handles skipped'),
+    TxnStat('txn_checkpoint_handle_cursor_time', 'transaction checkpoint handles cursor check time (usecs)'),
+    TxnStat('txn_checkpoint_handle_lock_time', 'transaction checkpoint handles lock time (usecs)'),
+    TxnStat('txn_checkpoint_preparing', 'transaction checkpoint currently in prepare phase', 'no_clear,no_scale'),
     TxnStat('txn_checkpoint_running', 'transaction checkpoint currently running', 'no_clear,no_scale'),
     TxnStat('txn_checkpoint_scrub_target', 'transaction checkpoint scrub dirty target', 'no_clear,no_scale'),
     TxnStat('txn_checkpoint_scrub_time', 'transaction checkpoint scrub time (msecs)', 'no_clear,no_scale'),
diff --git a/src/include/stat.h b/src/include/stat.h
index de4d5fe97..4dc6cc397 100644
--- a/src/include/stat.h
+++ b/src/include/stat.h
@@ -700,8 +700,13 @@ struct __wt_connection_stats {
 	int64_t txn_set_ts_stable;
 	int64_t txn_set_ts_stable_upd;
 	int64_t txn_begin;
+	int64_t txn_checkpoint_preparing;
 	int64_t txn_checkpoint_running;
 	int64_t txn_checkpoint_generation;
+	int64_t txn_checkpoint_handle_cursor_time;
+	int64_t txn_checkpoint_handle_count;
+	int64_t txn_checkpoint_handle_lock_time;
+	int64_t txn_checkpoint_handle_count_skip;
 	int64_t txn_checkpoint_time_max;
 	int64_t txn_checkpoint_time_min;
 	int64_t txn_checkpoint_time_recent;
diff --git a/src/include/wiredtiger.in b/src/include/wiredtiger.in
index 13a3c6374..fac5b248f 100644
--- a/src/include/wiredtiger.in
+++ b/src/include/wiredtiger.in
@@ -5879,74 +5907,84 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection);
 #define	WT_STAT_CONN_TXN_SET_TS_STABLE_UPD		1374
 /*! transaction: transaction begins */
 #define	WT_STAT_CONN_TXN_BEGIN				1375
+/*! transaction: transaction checkpoint currently in prepare phase */
+#define	WT_STAT_CONN_TXN_CHECKPOINT_PREPARING		1376
 /*! transaction: transaction checkpoint currently running */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_RUNNING		1376
+#define	WT_STAT_CONN_TXN_CHECKPOINT_RUNNING		1377
 /*! transaction: transaction checkpoint generation */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_GENERATION		1377
+#define	WT_STAT_CONN_TXN_CHECKPOINT_GENERATION		1378
+/*! transaction: transaction checkpoint handles cursor check time (usecs) */
+#define	WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_CURSOR_TIME	1379
+/*! transaction: transaction checkpoint handles included */
+#define	WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_COUNT	1380
+/*! transaction: transaction checkpoint handles lock time (usecs) */
+#define	WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_LOCK_TIME	1381
+/*! transaction: transaction checkpoint handles skipped */
+#define	WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_COUNT_SKIP	1382
 /*! transaction: transaction checkpoint max time (msecs) */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX		1378
+#define	WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX		1383
 /*! transaction: transaction checkpoint min time (msecs) */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN		1379
+#define	WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN		1384
 /*! transaction: transaction checkpoint most recent time (msecs) */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT		1380
+#define	WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT		1385
 /*! transaction: transaction checkpoint scrub dirty target */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET	1381
+#define	WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET	1386
 /*! transaction: transaction checkpoint scrub time (msecs) */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME		1382
+#define	WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME		1387
 /*! transaction: transaction checkpoint total time (msecs) */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL		1383
+#define	WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL		1388
 /*! transaction: transaction checkpoints */
-#define	WT_STAT_CONN_TXN_CHECKPOINT			1384
+#define	WT_STAT_CONN_TXN_CHECKPOINT			1389
 /*!
  * transaction: transaction checkpoints skipped because database was
  * clean
  */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED		1385
+#define	WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED		1390
 /*! transaction: transaction failures due to cache overflow */
-#define	WT_STAT_CONN_TXN_FAIL_CACHE			1386
+#define	WT_STAT_CONN_TXN_FAIL_CACHE			1391
 /*!
  * transaction: transaction fsync calls for checkpoint after allocating
  * the transaction ID
  */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST		1387
+#define	WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST		1392
 /*!
  * transaction: transaction fsync duration for checkpoint after
  * allocating the transaction ID (usecs)
  */
-#define	WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION	1388
+#define	WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION	1393
 /*! transaction: transaction range of IDs currently pinned */
-#define	WT_STAT_CONN_TXN_PINNED_RANGE			1389
+#define	WT_STAT_CONN_TXN_PINNED_RANGE			1394
 /*! transaction: transaction range of IDs currently pinned by a checkpoint */
-#define	WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE	1390
+#define	WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE	1395
 /*!
  * transaction: transaction range of IDs currently pinned by named
  * snapshots
  */
-#define	WT_STAT_CONN_TXN_PINNED_SNAPSHOT_RANGE		1391
+#define	WT_STAT_CONN_TXN_PINNED_SNAPSHOT_RANGE		1396
 /*! transaction: transaction range of timestamps currently pinned */
-#define	WT_STAT_CONN_TXN_PINNED_TIMESTAMP		1392
+#define	WT_STAT_CONN_TXN_PINNED_TIMESTAMP		1397
 /*! transaction: transaction range of timestamps pinned by a checkpoint */
-#define	WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT	1393
+#define	WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT	1398
 /*!
  * transaction: transaction range of timestamps pinned by the oldest
  * active read timestamp
  */
-#define	WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER	1394
+#define	WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER	1399
 /*!
  * transaction: transaction range of timestamps pinned by the oldest
  * timestamp
  */
-#define	WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST	1395
+#define	WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST	1400
 /*! transaction: transaction read timestamp of the oldest active reader */
-#define	WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ	1396
+#define	WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ	1401
 /*! transaction: transaction sync calls */
-#define	WT_STAT_CONN_TXN_SYNC				1397
+#define	WT_STAT_CONN_TXN_SYNC				1402
 /*! transaction: transactions committed */
-#define	WT_STAT_CONN_TXN_COMMIT				1398
+#define	WT_STAT_CONN_TXN_COMMIT				1403
 /*! transaction: transactions rolled back */
-#define	WT_STAT_CONN_TXN_ROLLBACK			1399
+#define	WT_STAT_CONN_TXN_ROLLBACK			1404
 /*! transaction: update conflicts */
-#define	WT_STAT_CONN_TXN_UPDATE_CONFLICT		1400
+#define	WT_STAT_CONN_TXN_UPDATE_CONFLICT		1405
 
 /*!
  * @}
diff --git a/src/meta/meta_ckpt.c b/src/meta/meta_ckpt.c
index 49b2d2a2a..447f3ab30 100644
--- a/src/meta/meta_ckpt.c
+++ b/src/meta/meta_ckpt.c
@@ -259,8 +259,12 @@ __wt_meta_block_metadata(
 	 *
 	 * Get a minimal configuration string, just the non-default entries.
 	 */
+#if 1
 	WT_ERR(__wt_config_discard_defaults(
 	    session, filecfg, config, &min_config));
+#else
+	min_config = config;
+#endif
 
 	/* Fill out the configuration array for normal retrieval. */
 	filecfg[1] = config;
@@ -300,7 +304,9 @@ __wt_meta_block_metadata(
 	WT_ERR(__wt_strndup(session, b->data, b->size, &ckpt->block_metadata));
 
 err:
+#if 1
 	__wt_free(session, min_config);
+#endif
 	__wt_scr_free(session, &a);
 	__wt_scr_free(session, &b);
 	return (ret);
diff --git a/src/support/stat.c b/src/support/stat.c
index c1be2b98e..965539f26 100644
--- a/src/support/stat.c
+++ b/src/support/stat.c
@@ -1141,8 +1141,13 @@ static const char * const __stats_connection_desc[] = {
 	"transaction: set timestamp stable calls",
 	"transaction: set timestamp stable updates",
 	"transaction: transaction begins",
+	"transaction: transaction checkpoint currently in prepare phase",
 	"transaction: transaction checkpoint currently running",
 	"transaction: transaction checkpoint generation",
+	"transaction: transaction checkpoint handles cursor check time (usecs)",
+	"transaction: transaction checkpoint handles included",
+	"transaction: transaction checkpoint handles lock time (usecs)",
+	"transaction: transaction checkpoint handles skipped",
 	"transaction: transaction checkpoint max time (msecs)",
 	"transaction: transaction checkpoint min time (msecs)",
 	"transaction: transaction checkpoint most recent time (msecs)",
@@ -1584,8 +1589,13 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats)
 	stats->txn_set_ts_stable = 0;
 	stats->txn_set_ts_stable_upd = 0;
 	stats->txn_begin = 0;
+		/* not clearing txn_checkpoint_preparing */
 		/* not clearing txn_checkpoint_running */
 		/* not clearing txn_checkpoint_generation */
+	stats->txn_checkpoint_handle_cursor_time = 0;
+	stats->txn_checkpoint_handle_count = 0;
+	stats->txn_checkpoint_handle_lock_time = 0;
+	stats->txn_checkpoint_handle_count_skip = 0;
 		/* not clearing txn_checkpoint_time_max */
 		/* not clearing txn_checkpoint_time_min */
 		/* not clearing txn_checkpoint_time_recent */
@@ -2192,10 +2202,20 @@ __wt_stat_connection_aggregate(
 	to->txn_set_ts_stable_upd +=
 	    WT_STAT_READ(from, txn_set_ts_stable_upd);
 	to->txn_begin += WT_STAT_READ(from, txn_begin);
+	to->txn_checkpoint_preparing +=
+	    WT_STAT_READ(from, txn_checkpoint_preparing);
 	to->txn_checkpoint_running +=
 	    WT_STAT_READ(from, txn_checkpoint_running);
 	to->txn_checkpoint_generation +=
 	    WT_STAT_READ(from, txn_checkpoint_generation);
+	to->txn_checkpoint_handle_cursor_time +=
+	    WT_STAT_READ(from, txn_checkpoint_handle_cursor_time);
+	to->txn_checkpoint_handle_count +=
+	    WT_STAT_READ(from, txn_checkpoint_handle_count);
+	to->txn_checkpoint_handle_lock_time +=
+	    WT_STAT_READ(from, txn_checkpoint_handle_lock_time);
+	to->txn_checkpoint_handle_count_skip +=
+	    WT_STAT_READ(from, txn_checkpoint_handle_count_skip);
 	to->txn_checkpoint_time_max +=
 	    WT_STAT_READ(from, txn_checkpoint_time_max);
 	to->txn_checkpoint_time_min +=
diff --git a/src/txn/txn_ckpt.c b/src/txn/txn_ckpt.c
index ba3f4520e..0d1c4dcd0 100644
--- a/src/txn/txn_ckpt.c
+++ b/src/txn/txn_ckpt.c
@@ -268,6 +268,7 @@ __wt_checkpoint_get_handles(WT_SESSION_IMPL *session, const char *cfg[])
 	WT_BTREE *btree;
 	WT_CONFIG_ITEM cval;
 	WT_DECL_RET;
+	uint64_t time_start, time_stop;
 	const char *name;
 	bool force;
 
@@ -289,6 +290,8 @@ __wt_checkpoint_get_handles(WT_SESSION_IMPL *session, const char *cfg[])
 	if (F_ISSET(btree, WT_BTREE_NO_CHECKPOINT))
 		return (0);
 
+	time_start = __wt_clock(session);
+
 	/*
 	 * We may have raced between starting the checkpoint transaction and
 	 * some operation completing on the handle that updated the metadata
@@ -321,6 +324,12 @@ __wt_checkpoint_get_handles(WT_SESSION_IMPL *session, const char *cfg[])
 		WT_RET(ret);
 	}
 
+	time_stop = __wt_clock(session);
+	WT_STAT_CONN_INCRV(session,
+	    txn_checkpoint_handle_cursor_time,
+	    WT_CLOCKDIFF_US(time_stop, time_start));
+	time_start = time_stop;
+
 	/*
 	 * Decide whether the tree needs to be included in the checkpoint and
 	 * if so, acquire the necessary locks.
@@ -328,12 +337,20 @@ __wt_checkpoint_get_handles(WT_SESSION_IMPL *session, const char *cfg[])
 	WT_SAVE_DHANDLE(session, ret = __checkpoint_lock_dirty_tree(
 	    session, true, force, true, cfg));
 	WT_RET(ret);
+
+	time_stop = __wt_clock(session);
+	WT_STAT_CONN_INCRV(session,
+	    txn_checkpoint_handle_lock_time,
+	    WT_CLOCKDIFF_US(time_stop, time_start));
+
 	if (F_ISSET(btree, WT_BTREE_SKIP_CKPT)) {
+		WT_STAT_CONN_INCR(session, txn_checkpoint_handle_count_skip);
 		WT_ASSERT(session, btree->ckpt == NULL);
 		__checkpoint_update_generation(session);
 		return (0);
 	}
 
+	WT_STAT_CONN_INCR(session, txn_checkpoint_handle_count);
 	/*
 	 * Make sure there is space for the new entry: do this before getting
 	 * the handle to avoid cleanup if we can't allocate the memory.
@@ -808,6 +825,7 @@ __txn_checkpoint(WT_SESSION_IMPL *session, const char *cfg[])
 	saved_isolation = session->isolation;
 	full = idle = logging = tracking = use_timestamp = false;
 
+	fprintf(stderr, "Starting a checkpoint\n");
 	/* Avoid doing work if possible. */
 	WT_RET(__txn_checkpoint_can_skip(session,
 	    cfg, &full, &use_timestamp, &can_skip));
@@ -893,8 +911,10 @@ __txn_checkpoint(WT_SESSION_IMPL *session, const char *cfg[])
 	 * Hold the schema lock while starting the transaction and gathering
 	 * handles so the set we get is complete and correct.
 	 */
+	WT_STAT_CONN_SET(session, txn_checkpoint_preparing, 1);
 	WT_WITH_SCHEMA_LOCK(session,
 	    ret = __checkpoint_prepare(session, &tracking, cfg));
+	WT_STAT_CONN_SET(session, txn_checkpoint_preparing, 0);
 	WT_ERR(ret);
 
 	WT_ASSERT(session, txn->isolation == WT_ISO_SNAPSHOT);
@@ -1020,6 +1040,7 @@ __txn_checkpoint(WT_SESSION_IMPL *session, const char *cfg[])
 			conn->txn_global.last_ckpt_timestamp = ckpt_tmp_ts;
 	}
 
+	fprintf(stderr, "Finishing a checkpoint\n");
 err:
 	/*
 	 * Reset the timer so that next checkpoint tracks the progress only if
