diff --git a/doc/sphinx/book/configuration/cfg-binary_logging_snapshots.rst b/doc/sphinx/book/configuration/cfg-binary_logging_snapshots.rst
index db7344fb8f7542f7b8c3a930753844426b5d684c..e6f3134446239178ce1ba35a39d0ac6859a7403a 100644
--- a/doc/sphinx/book/configuration/cfg-binary_logging_snapshots.rst
+++ b/doc/sphinx/book/configuration/cfg-binary_logging_snapshots.rst
@@ -60,5 +60,5 @@
     files for the sake of replication or local hot standby.
 
     Type: float |br|
-    Default: 0.1 |br|
+    Default: 2 |br|
     Dynamic: **yes** |br|
diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua
index 9937f9af616f9eedbab9b4f79f9654c926b2820c..e62f8a4abccaa069338ca8af200c048fa3a72d1e 100644
--- a/src/box/lua/load_cfg.lua
+++ b/src/box/lua/load_cfg.lua
@@ -47,7 +47,7 @@ local default_cfg = {
     too_long_threshold  = 0.5,
     wal_mode            = "write",
     rows_per_wal        = 500000,
-    wal_dir_rescan_delay= 0.1,
+    wal_dir_rescan_delay= 2,
     panic_on_snap_error = true,
     panic_on_wal_error  = true,
     replication_source  = nil,
diff --git a/src/box/recovery.cc b/src/box/recovery.cc
index e94ca3e22e0218345753b5a2693f8bf9df477e0c..1333f19d681c5ca397b4523dd790be6bafcfc39f 100644
--- a/src/box/recovery.cc
+++ b/src/box/recovery.cc
@@ -451,19 +451,47 @@ recovery_finalize(struct recovery_state *r, enum wal_mode wal_mode,
 
 /* {{{ Local recovery: support of hot standby and replication relay */
 
-struct recovery_stat_data {
+static void
+recovery_stat_cb(ev_loop *loop, ev_stat *stat, int revents);
+
+class EvStat {
+public:
+	struct ev_stat stat;
 	struct fiber *f;
-	bool signaled;
+	bool *signaled;
+	char path[PATH_MAX + 1];
+
+	inline void start(const char *path_arg)
+	{
+		f = fiber();
+		snprintf(path, sizeof(path), "%s", path_arg);
+		ev_stat_init(&stat, recovery_stat_cb, path, 0.0);
+		ev_stat_start(loop(), &stat);
+	}
+	inline void stop()
+	{
+		ev_stat_stop(loop(), &stat);
+	}
+
+	EvStat(bool *signaled_arg)
+		:signaled(signaled_arg)
+	{
+		path[0] = '\0';
+		ev_stat_init(&stat, recovery_stat_cb, path, 0.0);
+		stat.data = this;
+	}
+	~EvStat()
+	{
+		stop();
+	};
 };
 
+
 static void
-recovery_stat_cb(ev_loop *loop, ev_stat *stat, int revents)
+recovery_stat_cb(ev_loop * /* loop */, ev_stat *stat, int /* revents */)
 {
-	(void) loop;
-	(void) revents;
-	struct recovery_stat_data *data =
-		(struct recovery_stat_data *) stat->data;
-	data->signaled = true;
+	EvStat *data = (EvStat *) stat->data;
+	*data->signaled = true;
 	if (data->f->flags & FIBER_IS_CANCELLABLE)
 		fiber_wakeup(data->f);
 }
@@ -475,41 +503,34 @@ recovery_follow_f(va_list ap)
 	ev_tstamp wal_dir_rescan_delay = va_arg(ap, ev_tstamp);
 	fiber_set_user(fiber(), &admin_credentials);
 
-	char path[PATH_MAX] = { '\0' };
-	struct recovery_stat_data data = { fiber(), false };
-	struct ev_stat stat;
-	ev_stat_init(&stat, recovery_stat_cb, path, 0.0);
-	stat.data = &data;
+	bool signaled = false;
+	EvStat stat_dir(&signaled);
+	EvStat stat_file(&signaled);
 
-	auto evstat_guard = make_scoped_guard([&] {
-		ev_stat_stop(loop(), &stat);
-	});
+	stat_dir.start(r->wal_dir.dirname);
 
 	while (! fiber_is_cancelled()) {
-		data.signaled = false;
 		recover_remaining_wals(r);
 
-		if (ev_is_active(&stat) && ((r->current_wal == NULL) ||
-		     (strcmp(r->current_wal->filename, stat.path) != 0)))
-			ev_stat_stop(loop(), &stat);
+		if (r->current_wal == NULL ||
+		    strcmp(r->current_wal->filename, stat_file.path) != 0) {
 
-		if (r->current_wal != NULL && !ev_is_active(&stat)) {
-			snprintf(path, sizeof(path), "%s",
-				 r->current_wal->filename);
-			ev_stat_init(&stat, recovery_stat_cb, path, 0.0);
-			ev_stat_start(loop(), &stat);
+			stat_file.stop();
 		}
 
-		if (data.signaled)
-			continue;
+		if (r->current_wal != NULL && !ev_is_active(&stat_file.stat))
+			stat_file.start(r->current_wal->filename);
 
-		/**
-		 * Allow an immediate wakeup/break loop
-		 * from recovery_stop_local().
-		 */
-		fiber_set_cancellable(true);
-		fiber_yield_timeout(wal_dir_rescan_delay);
-		fiber_set_cancellable(false);
+		if (signaled == false) {
+			/**
+			 * Allow an immediate wakeup/break loop
+			 * from recovery_stop_local().
+			 */
+			fiber_set_cancellable(true);
+			fiber_yield_timeout(wal_dir_rescan_delay);
+			fiber_set_cancellable(false);
+		}
+		signaled = false;
 	}
 }
 
diff --git a/test/app/cfg.test.lua b/test/app/cfg.test.lua
index c20927158884e9dd90815ce067a68c24bec95067..a5c2a80d1c86b5f552444bb7af1f8a7b3162472e 100755
--- a/test/app/cfg.test.lua
+++ b/test/app/cfg.test.lua
@@ -72,7 +72,7 @@ test:is(box.cfg.panic_on_wal_error, true, "panic_on_wal_mode default value")
 box.cfg{panic_on_wal_error=false}
 test:is(box.cfg.panic_on_wal_error, false, "panic_on_wal_mode new value")
 
-test:is(box.cfg.wal_dir_rescan_delay, 0.1, "wal_dir_rescan_delay default value")
+test:is(box.cfg.wal_dir_rescan_delay, 2, "wal_dir_rescan_delay default value")
 box.cfg{wal_dir_rescan_delay=0.2}
 test:is(box.cfg.wal_dir_rescan_delay, 0.2, "wal_dir_rescan_delay new value")
 
diff --git a/test/app/init_script.result b/test/app/init_script.result
index dc7f846591c7a41d79e030e02046b727620f5385..072e1608910b0fad8b5102310ece2fbfb4737a36 100644
--- a/test/app/init_script.result
+++ b/test/app/init_script.result
@@ -25,7 +25,7 @@ box.cfg
 20	readahead:16320
 21	too_long_threshold:0.5
 22	snapshot_period:0
-23	wal_dir_rescan_delay:0.1
+23	wal_dir_rescan_delay:2
 --
 -- Test insert from detached fiber
 --
diff --git a/test/box/admin.result b/test/box/admin.result
index 7c3ef8b360bcc2325670073e00ddfb1d4922b1f2..ad426257b779309c61aaf84165ccbda469345d73 100644
--- a/test/box/admin.result
+++ b/test/box/admin.result
@@ -45,7 +45,7 @@ box.cfg
   pid_file: tarantool.pid
   rows_per_wal: 50
   snapshot_period: 0
-  wal_dir_rescan_delay: 0.1
+  wal_dir_rescan_delay: 2
 ...
 space:insert{1, 'tuple'}
 ---
diff --git a/test/box/cfg.result b/test/box/cfg.result
index 5ae566ae3322515f00133fb11edb94f5c77dc860..223e54d7938e4be6cff02680cc10e9485f72ede8 100644
--- a/test/box/cfg.result
+++ b/test/box/cfg.result
@@ -31,7 +31,7 @@ t
   - 'pid_file: tarantool.pid'
   - 'rows_per_wal: 50'
   - 'snapshot_period: 0'
-  - 'wal_dir_rescan_delay: 0.1'
+  - 'wal_dir_rescan_delay: 2'
 ...
 -- must be read-only
 box.cfg()
@@ -65,7 +65,7 @@ t
   - 'pid_file: tarantool.pid'
   - 'rows_per_wal: 50'
   - 'snapshot_period: 0'
-  - 'wal_dir_rescan_delay: 0.1'
+  - 'wal_dir_rescan_delay: 2'
 ...
 -- check that cfg with unexpected parameter fails.
 box.cfg{sherlock = 'holmes'}