diff --git a/core/stat.m b/core/stat.m
index 9ca48d52e0bc1de644ce79533cc351ba8182da68..343757009dc06b5194ad969adc10348fcc2f846c 100644
--- a/core/stat.m
+++ b/core/stat.m
@@ -130,3 +130,11 @@ stat_init(void)
 	timer.repeat = 1.;
 	ev_timer_again(&timer);
 }
+
+void
+stat_cleanup(int base, size_t max_idx)
+{
+	for (int i = base; i < max_idx; i++)
+		for (int j = 0; j < SECS + 1; j++)
+			stats[i].value[j] = 0;
+}
diff --git a/include/stat.h b/include/stat.h
index 5fb30612ff51a0fc93574679a2901ee2a38f248f..0549a2e0f52c83596e8f9ae9a988a78aafc3eb4f 100644
--- a/include/stat.h
+++ b/include/stat.h
@@ -29,6 +29,7 @@
 #include <tbuf.h>
 
 void stat_init(void);
+void stat_cleanup(int base, size_t max_idx);
 int stat_register(char **name, size_t count);
 void stat_collect(int base, int name, i64 value);
 void stat_print(struct tbuf *buf);
diff --git a/mod/box/box.m b/mod/box/box.m
index d044c84d103101fce30ca12a81ac2fb5ca89d8ff..350d80b697169c646584b55a7d6bad92fad21dd7 100644
--- a/mod/box/box.m
+++ b/mod/box/box.m
@@ -1201,7 +1201,7 @@ box_process(struct box_txn *txn, u32 op, struct tbuf *request_data)
 {
 	ev_tstamp start = ev_now(), stop;
 
-	stat_collect(stat_base, txn->op, 1);
+	stat_collect(stat_base, op, 1);
 
 	@try {
 		txn_begin(txn, op, request_data);
@@ -1452,6 +1452,7 @@ mod_init(void)
 		return;
 
 	recover(recovery_state, 0);
+	stat_cleanup(stat_base, messages_MAX);
 
 	title("build_indexes");