diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
index 59acea5c83cfd7bf74fb10eaf5b9b5a7a6e1a041..0f9bd6b5c44b2b6bcf9023716dfa49f618bc484a 100644
--- a/src/box/lua/schema.lua
+++ b/src/box/lua/schema.lua
@@ -2488,18 +2488,22 @@ end
 
 box.internal.check_select_opts = check_select_opts -- for net.box
 
-local check_select_safety_rl = log.internal.ratelimit.new()
-local function check_select_safety(index, key_is_nil, itype, limit, offset,
+local function is_select_long(sid, key_is_nil, itype, limit, offset,
                                    fullscan)
-    local rl = check_select_safety_rl
-    local sid = index.space_id
     local point_iter = itype == box.index.EQ or itype == box.index.REQ
     local window = offset + limit
-    if sid >= 512 and (key_is_nil or not point_iter) and
-       (not fullscan and window > 1000) then
-        rl:log_crit("Potentially long select from space '%s' (%d)\n %s",
-                    box.space[sid].name, sid, debug.traceback())
-    end
+    return sid >= 512 and
+           (key_is_nil or not point_iter) and
+           (not fullscan and window > 1000)
+end
+
+box.internal.is_select_long = is_select_long -- for read views
+
+local log_long_select_rl = log.internal.ratelimit.new()
+local function log_long_select(space)
+    log_long_select_rl:log_crit(
+        "Potentially long select from space '%s' (%d)\n %s",
+        space.name, space.id, debug.traceback())
 end
 
 base_index_mt.select_ffi = function(index, key, opts)
@@ -2514,10 +2518,14 @@ base_index_mt.select_ffi = function(index, key, opts)
     local new_position = nil
     local iterator, offset, limit, fullscan, after, fetch_pos =
         check_select_opts(opts, key_is_nil)
-    check_select_safety(index, key_is_nil, iterator, limit, offset, fullscan)
+    local sid = index.space_id
+    if is_select_long(sid, key_is_nil, iterator, limit, offset,
+                      fullscan) then
+        log_long_select(box.space[sid])
+    end
     local region_svp = builtin.box_region_used()
     normalize_position(index, after, iterator_pos, iterator_pos_end)
-    nok = builtin.box_select_ffi(index.space_id, index.id, key, key_end,
+    nok = builtin.box_select_ffi(sid, index.id, key, key_end,
                                  iterator_pos, iterator_pos_end, fetch_pos,
                                  port, iterator, offset, limit) ~= 0
     if not nok and fetch_pos and iterator_pos[0] ~= nil then
@@ -2549,8 +2557,12 @@ base_index_mt.select_luac = function(index, key, opts)
     local key_is_nil = #key == 0
     local iterator, offset, limit, fullscan, after, fetch_pos =
         check_select_opts(opts, key_is_nil)
-    check_select_safety(index, key_is_nil, iterator, limit, offset, fullscan)
-    return internal.select(index.space_id, index.id, iterator,
+    local sid = index.space_id
+    if is_select_long(sid, key_is_nil, iterator, limit, offset,
+                      fullscan) then
+        log_long_select(box.space[sid])
+    end
+    return internal.select(sid, index.id, iterator,
         offset, limit, key, after, fetch_pos)
 end