diff --git a/src/box/lua/sql.c b/src/box/lua/sql.c
index ee20faab76b605cf268701feb2b3fa87917f726e..cd6e75c43fb0b65a0b7df43d13557df2efe87e37 100644
--- a/src/box/lua/sql.c
+++ b/src/box/lua/sql.c
@@ -110,21 +110,11 @@ lua_sql_execute(struct lua_State *L)
 	return lua_error(L);
 }
 
-static int
-lua_sql_debug(struct lua_State *L)
-{
-	struct info_handler info;
-	luaT_info_handler_create(&info, L);
-	sql_debug_info(&info);
-	return 1;
-}
-
 void
 box_lua_sql_init(struct lua_State *L)
 {
 	static const struct luaL_Reg module_funcs [] = {
 		{"execute", lua_sql_execute},
-		{"debug", lua_sql_debug},
 		{NULL, NULL}
 	};
 
diff --git a/src/box/lua/stat.c b/src/box/lua/stat.c
index f6b2812d69b834cca9a261c5afec07e9f464c731..18b81a1b970ae9bca3d768e134e34041c123dae7 100644
--- a/src/box/lua/stat.c
+++ b/src/box/lua/stat.c
@@ -42,6 +42,7 @@
 #include "box/iproto.h"
 #include "box/engine.h"
 #include "box/vinyl.h"
+#include "box/sql.h"
 #include "info/info.h"
 #include "lua/info.h"
 #include "lua/utils.h"
@@ -187,6 +188,15 @@ lbox_stat_net_call(struct lua_State *L)
 	return 1;
 }
 
+static int
+lbox_stat_sql(struct lua_State *L)
+{
+	struct info_handler info;
+	luaT_info_handler_create(&info, L);
+	sql_debug_info(&info);
+	return 1;
+}
+
 static const struct luaL_Reg lbox_stat_meta [] = {
 	{"__index", lbox_stat_index},
 	{"__call",  lbox_stat_call},
@@ -206,6 +216,7 @@ box_lua_stat_init(struct lua_State *L)
 	static const struct luaL_Reg statlib [] = {
 		{"vinyl", lbox_stat_vinyl},
 		{"reset", lbox_stat_reset},
+		{"sql", lbox_stat_sql},
 		{NULL, NULL}
 	};
 
diff --git a/test/sql-tap/analyze3.test.lua b/test/sql-tap/analyze3.test.lua
index 13962876d0a82bdb8db09417e777ac094a5492d0..dcbea1da50ad0dcbb5a38c2e6d9e83a18d53d5ff 100755
--- a/test/sql-tap/analyze3.test.lua
+++ b/test/sql-tap/analyze3.test.lua
@@ -48,15 +48,6 @@ testprefix = "analyze3"
 --               have been fixed.
 --
 
-local function eqp(sql)
-    return test:execsql("EXPLAIN QUERY PLAN"..sql)
-end
-
-local function sf_execsql(sql, db)
-    r = test:execsql(sql)
-    return {box.sql.debug().sql_search_count, r}
-end
-
 ---------------------------------------------------------------------------
 --
 -- analyze3-1.1.1: 
diff --git a/test/sql-tap/between.test.lua b/test/sql-tap/between.test.lua
index d56de4e90b89d042393117952e54f4278e199c73..cd1aba1330dafaf733a754ed1ff6fbe5a593d5ef 100755
--- a/test/sql-tap/between.test.lua
+++ b/test/sql-tap/between.test.lua
@@ -51,10 +51,10 @@ test:do_test(
 -- is done.  Then it appends the names of the table and index used.
 --
 local function queryplan(sql)
-    local sql_sort_count = box.sql.debug().sql_sort_count
+    local sql_sort_count = box.stat.sql().sql_sort_count
     local data = test:execsql(sql)
     local x = "nosort"
-    if box.sql.debug().sql_sort_count - sql_sort_count then
+    if box.stat.sql().sql_sort_count - sql_sort_count then
         x = "sort"
     end
     table.insert(data,x)
diff --git a/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua b/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua
index 80a2a2d9cb3625746d7652c4a70abb54372543ff..bb8a4989e839c3cebb7f384724c7bd5144c7b3d4 100755
--- a/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua
+++ b/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua
@@ -5,9 +5,9 @@ test:plan(39)
 local function do_xfer_test(test, test_func, test_name, func, exp, opts)
     local opts = opts or {}
     local exp_xfer_count = opts.exp_xfer_count
-    local before = box.sql.debug().sql_xfer_count
+    local before = box.stat.sql().sql_xfer_count
     test_func(test, test_name, func, exp)
-    local after = box.sql.debug().sql_xfer_count
+    local after = box.stat.sql().sql_xfer_count
     test:is(after - before, exp_xfer_count,
                    test_name .. '-xfer-count')
 end
diff --git a/test/sql-tap/lua/sqltester.lua b/test/sql-tap/lua/sqltester.lua
index 8aac64cd7592080b825b44050c0c27d592fac2ad..05e2824e7b96bc1d198ab43c721f9350061e51cf 100644
--- a/test/sql-tap/lua/sqltester.lua
+++ b/test/sql-tap/lua/sqltester.lua
@@ -326,9 +326,9 @@ function test.do_select_tests(self, label, tests)
 end
 
 function test.sf_execsql(self, sql)
-    local old = box.sql.debug().sql_search_count
+    local old = box.stat.sql().sql_search_count
     local r = test:execsql(sql)
-    local new = box.sql.debug().sql_search_count - old
+    local new = box.stat.sql().sql_search_count - old
 
     return {new, r}
 end
diff --git a/test/sql-tap/minmax2.test.lua b/test/sql-tap/minmax2.test.lua
index a6f840d507371c3bf1867afb17e36f060c4a0f37..0e0f0d08e113f33210612d2596c0fba200ad8734 100755
--- a/test/sql-tap/minmax2.test.lua
+++ b/test/sql-tap/minmax2.test.lua
@@ -59,7 +59,7 @@ test:do_execsql_test(
 test:do_test(
     "minmax2-1.1",
     function()
-        sql_search_count = box.sql.debug().sql_search_count
+        sql_search_count = box.stat.sql().sql_search_count
         return test:execsql "SELECT min(x) FROM t1"
     end, {
         -- <minmax2-1.1>
@@ -70,13 +70,13 @@ test:do_test(
 test:do_test(
     "minmax2-1.2",
     function()
-        return box.sql.debug().sql_search_count - sql_search_count
+        return box.stat.sql().sql_search_count - sql_search_count
     end, 19)
 
 test:do_test(
     "minmax2-1.3",
     function()
-        sql_search_count = box.sql.debug().sql_search_count
+        sql_search_count = box.stat.sql().sql_search_count
         return test:execsql "SELECT max(x) FROM t1"
     end, {
         -- <minmax2-1.3>
@@ -87,14 +87,14 @@ test:do_test(
 test:do_test(
     "minmax2-1.4",
     function()
-        return box.sql.debug().sql_search_count - sql_search_count
+        return box.stat.sql().sql_search_count - sql_search_count
     end, 19)
 
 test:do_test(
     "minmax2-1.5",
     function()
         test:execsql "CREATE INDEX t1i1 ON t1(x DESC)"
-        sql_search_count = box.sql.debug().sql_search_count
+        sql_search_count = box.stat.sql().sql_search_count
         return test:execsql "SELECT min(x) FROM t1"
     end, {
         -- <minmax2-1.5>
@@ -105,13 +105,13 @@ test:do_test(
 test:do_test(
     "minmax2-1.6",
     function()
-        return box.sql.debug().sql_search_count - sql_search_count
+        return box.stat.sql().sql_search_count - sql_search_count
     end, 1)
 
 test:do_test(
     "minmax2-1.7",
     function()
-        sql_search_count = box.sql.debug().sql_search_count
+        sql_search_count = box.stat.sql().sql_search_count
         return test:execsql "SELECT max(x) FROM t1"
     end, {
         -- <minmax2-1.7>
@@ -122,13 +122,13 @@ test:do_test(
 test:do_test(
     "minmax2-1.8",
     function()
-        return box.sql.debug().sql_search_count - sql_search_count
+        return box.stat.sql().sql_search_count - sql_search_count
     end, 0)
 
 test:do_test(
     "minmax2-1.9",
     function()
-        sql_search_count = box.sql.debug().sql_search_count
+        sql_search_count = box.stat.sql().sql_search_count
         return test:execsql "SELECT max(y) FROM t1"
     end, {
         -- <minmax2-1.9>
@@ -139,7 +139,7 @@ test:do_test(
 test:do_test(
     "minmax2-1.10",
     function()
-        return box.sql.debug().sql_search_count - sql_search_count
+        return box.stat.sql().sql_search_count - sql_search_count
     end, 19)
 
 test:do_test(
@@ -149,7 +149,7 @@ test:do_test(
             CREATE TABLE t2(a INTEGER PRIMARY KEY, b INT );
             INSERT INTO t2 SELECT x, y FROM t1;
         ]]
-        sql_search_count = box.sql.debug().sql_search_count
+        sql_search_count = box.stat.sql().sql_search_count
         return test:execsql "SELECT min(a) FROM t2"
     end, {
         -- <minmax2-2.0>
@@ -160,13 +160,13 @@ test:do_test(
 test:do_test(
     "minmax2-2.1",
     function()
-        return box.sql.debug().sql_search_count - sql_search_count
+        return box.stat.sql().sql_search_count - sql_search_count
     end, 0)
 
 test:do_test(
     "minmax2-2.2",
     function()
-        sql_search_count = box.sql.debug().sql_search_count
+        sql_search_count = box.stat.sql().sql_search_count
         return test:execsql "SELECT max(a) FROM t2"
     end, {
         -- <minmax2-2.2>
@@ -177,7 +177,7 @@ test:do_test(
 test:do_test(
     "minmax2-2.3",
     function()
-        return box.sql.debug().sql_search_count - sql_search_count
+        return box.stat.sql().sql_search_count - sql_search_count
     end, 0)
 
 test:do_test(
@@ -186,7 +186,7 @@ test:do_test(
         test:execsql "INSERT INTO t2 VALUES((SELECT max(a) FROM t2)+1,999)"
 
 
-        sql_search_count = box.sql.debug().sql_search_count
+        sql_search_count = box.stat.sql().sql_search_count
         return test:execsql "SELECT max(a) FROM t2"
     end, {
         -- <minmax2-3.0>
@@ -197,7 +197,7 @@ test:do_test(
 test:do_test(
     "minmax2-3.1",
     function()
-        return box.sql.debug().sql_search_count - sql_search_count
+        return box.stat.sql().sql_search_count - sql_search_count
     end, 0)
 
 test:do_test(
@@ -206,7 +206,7 @@ test:do_test(
         test:execsql "INSERT INTO t2 VALUES((SELECT max(a) FROM t2)+1,999)"
 
 
-        sql_search_count = box.sql.debug().sql_search_count
+        sql_search_count = box.stat.sql().sql_search_count
         return test:execsql " SELECT b FROM t2 WHERE a=(SELECT max(a) FROM t2) "
 
 
@@ -220,7 +220,7 @@ test:do_test(
 test:do_test(
     "minmax2-3.3",
     function()
-        return box.sql.debug().sql_search_count - sql_search_count
+        return box.stat.sql().sql_search_count - sql_search_count
     end, 1)
 
 test:do_execsql_test(
diff --git a/test/sql-tap/minmax3.test.lua b/test/sql-tap/minmax3.test.lua
index 370757538f7f875182f99a7fec997a8ae763e21e..f1d9efc5a027fd3e41c974e876051bd0da8e41d6 100755
--- a/test/sql-tap/minmax3.test.lua
+++ b/test/sql-tap/minmax3.test.lua
@@ -24,9 +24,9 @@ test:plan(47)
 --
 
 local function count(sql)
-    local sql_search_count = box.sql.debug().sql_search_count
+    local sql_search_count = box.stat.sql().sql_search_count
     local r = test:execsql(sql)
-    table.insert(r, box.sql.debug().sql_search_count - sql_search_count)
+    table.insert(r, box.stat.sql().sql_search_count - sql_search_count)
     return r
 end
 
diff --git a/test/sql-tap/where2.test.lua b/test/sql-tap/where2.test.lua
index 8eaf4053d43de39eb17c074975b703a59573eb55..4116ca913da1962078c9507008cca226cc0bbd9f 100755
--- a/test/sql-tap/where2.test.lua
+++ b/test/sql-tap/where2.test.lua
@@ -62,10 +62,10 @@ test:do_test(
 -- Do an SQL statement.  Append the search count to the end of the result.
 --
 local function count(sql)
-    local sql_sort_count = box.sql.debug().sql_sort_count
+    local sql_sort_count = box.stat.sql().sql_sort_count
     local r = test:execsql(sql)
-    print("lol "..(box.sql.debug().sql_sort_count - sql_sort_count))
-    table.insert(r, box.sql.debug().sql_sort_count - sql_sort_count)
+    print("lol "..(box.stat.sql().sql_sort_count - sql_sort_count))
+    table.insert(r, box.stat.sql().sql_sort_count - sql_sort_count)
     return r
 end
 
@@ -78,9 +78,9 @@ end
 --
 local function cksort(sql)
     local sort = "nosort"
-    local sql_sort_count = box.sql.debug().sql_sort_count
+    local sql_sort_count = box.stat.sql().sql_sort_count
     local data = test:execsql(sql)
-    if sql_sort_count < box.sql.debug().sql_sort_count then
+    if sql_sort_count < box.stat.sql().sql_sort_count then
             sort = 'sort'
     end
     table.insert(data, sort)
@@ -97,9 +97,9 @@ end
 --
 local function queryplan(sql)
     local sort = "nosort"
-    local sql_sort_count = box.sql.debug().sql_sort_count
+    local sql_sort_count = box.stat.sql().sql_sort_count
     local data = test:execsql(sql)
-    if sql_sort_count < box.sql.debug().sql_sort_count then
+    if sql_sort_count < box.stat.sql().sql_sort_count then
         sort = 'sort'
     end
     table.insert(data, sort)
diff --git a/test/sql-tap/whereA.test.lua b/test/sql-tap/whereA.test.lua
index b4a0f0a74fa34bb351e032fa06966262f14cd77b..2c8cb45f95a867d52751910876eec64d644042b0 100755
--- a/test/sql-tap/whereA.test.lua
+++ b/test/sql-tap/whereA.test.lua
@@ -193,9 +193,9 @@ test:do_test(
 -- Do an SQL statement.  Append the search count to the end of the result.
 --
 local function count(sql)
-    local sql_sort_count = box.sql.debug().sql_sort_count
+    local sql_sort_count = box.stat.sql().sql_sort_count
     local r = test:execsql(sql)
-    table.insert(r, box.sql.debug().sql_sort_count - sql_sort_count)
+    table.insert(r, box.stat.sql().sql_sort_count - sql_sort_count)
     return r
 end
 
diff --git a/test/sql-tap/whereD.test.lua b/test/sql-tap/whereD.test.lua
index b103f3c87335172ce525c4b4e2d3b2f3ca07294b..14dc8d3bd341e33f73abbd1f6f01a6c527c59219 100755
--- a/test/sql-tap/whereD.test.lua
+++ b/test/sql-tap/whereD.test.lua
@@ -234,10 +234,10 @@ local function do_searchcount_test(tn, sql, res)
     test:do_test(
         tn,
         function()
-            local sql_search_count = box.sql.debug().sql_search_count
+            local sql_search_count = box.stat.sql().sql_search_count
             local r = test:execsql(sql)
             table.insert(r, "search")
-            table.insert(r, box.sql.debug().sql_search_count - sql_search_count)
+            table.insert(r, box.stat.sql().sql_search_count - sql_search_count)
             return r
         end,
         res)
diff --git a/test/sql-tap/with2.test.lua b/test/sql-tap/with2.test.lua
index ca3f00edbd7b1ce2c3e920ddcab407a4d9a06604..48f73772556b5f143ce9831814cd7509b619fa88 100755
--- a/test/sql-tap/with2.test.lua
+++ b/test/sql-tap/with2.test.lua
@@ -389,9 +389,9 @@ genstmt(255), {
 local function do_xfer_test(test, test_func, test_name, func, exp, opts)
     local opts = opts or {}
     local exp_xfer_count = opts.exp_xfer_count
-    local before = box.sql.debug().sql_xfer_count
+    local before = box.stat.sql().sql_xfer_count
     test_func(test, test_name, func, exp)
-    local after = box.sql.debug().sql_xfer_count
+    local after = box.stat.sql().sql_xfer_count
     test:is(after - before, exp_xfer_count,
                    test_name .. '-xfer-count')
 end