diff --git a/src/box/memtx_space.c b/src/box/memtx_space.c
index 9f232803ea6644b37b44e0502840fcdc674e5701..78a0059a012b35393312509d9fc49c8112935839 100644
--- a/src/box/memtx_space.c
+++ b/src/box/memtx_space.c
@@ -47,6 +47,10 @@
  * Yield every 1K tuples while building a new index or checking
  * a space format. In debug mode yield more often for testing
  * purposes.
+ *
+ * Yields do not happen during recovery. At this point of time
+ * iproto aready accepts requests, and yielding would allow them
+ * to be proccessed while data is not fully recovered.
  */
 #ifdef NDEBUG
 enum { MEMTX_DDL_YIELD_LOOPS = 1000 };
@@ -884,6 +888,7 @@ memtx_space_check_format(struct space *space, struct tuple_format *format)
 	if (it == NULL)
 		return -1;
 
+	struct memtx_engine *memtx = (struct memtx_engine *)space->engine;
 	struct memtx_ddl_state state;
 	state.format = format;
 	state.cmp_def = pk->def->key_def;
@@ -905,7 +910,8 @@ memtx_space_check_format(struct space *space, struct tuple_format *format)
 		rc = tuple_validate(format, tuple);
 		if (rc != 0)
 			break;
-		if (++count % MEMTX_DDL_YIELD_LOOPS == 0) {
+		if (++count % MEMTX_DDL_YIELD_LOOPS == 0 &&
+		    memtx->state == MEMTX_OK) {
 			state.cursor = tuple;
 			tuple_ref(state.cursor);
 			fiber_sleep(0);
@@ -1033,6 +1039,7 @@ memtx_space_build_index(struct space *src_space, struct index *new_index,
 	if (it == NULL)
 		return -1;
 
+	struct memtx_engine *memtx = (struct memtx_engine *)src_space->engine;
 	struct memtx_ddl_state state;
 	state.index = new_index;
 	state.format = new_format;
@@ -1079,7 +1086,8 @@ memtx_space_build_index(struct space *src_space, struct index *new_index,
 		 */
 		if (new_index->def->iid == 0)
 			tuple_ref(tuple);
-		if (++count % MEMTX_DDL_YIELD_LOOPS == 0) {
+		if (++count % MEMTX_DDL_YIELD_LOOPS == 0 &&
+		    memtx->state == MEMTX_OK) {
 			/*
 			 * Remember the latest inserted tuple to
 			 * avoid processing yet to be added tuples