diff --git a/core/include/dap_common.h b/core/include/dap_common.h
index f97fe1acd3ecc6240afee2a25b593bfd8ec22401..9af6174c5007f37c07c5b276b97ecf5567a0461a 100755
--- a/core/include/dap_common.h
+++ b/core/include/dap_common.h
@@ -471,6 +471,9 @@ typedef enum dap_log_level {
   L_ERROR     = 7,
   L_CRITICAL  = 8,
   L_TOTAL,
+#ifdef DAP_TPS_TEST
+  L_TPS  = 15,
+#endif
 
 } dap_log_level_t;
 
diff --git a/core/src/dap_common.c b/core/src/dap_common.c
index d43ef6e5aa6cecf43ce28c6490121a183151a97c..acae11e5bb17887353c1232b923f823998f9b620 100755
--- a/core/src/dap_common.c
+++ b/core/src/dap_common.c
@@ -95,7 +95,11 @@ static const char *s_log_level_tag[ 16 ] = {
     " [---] ", //             = 12
     " [---] ", //             = 13
     " [---] ", //             = 14
+#ifdef DAP_TPS_TEST
+    " [TPS] ", // L_TPS       = 15
+#else
     " [---] ", //             = 15
+#endif
 };
 
 const char *s_ansi_seq_color[ 16 ] = {
@@ -115,7 +119,11 @@ const char *s_ansi_seq_color[ 16 ] = {
     "", //             = 12
     "", //             = 13
     "", //             = 14
+#ifdef DAP_TPS_TEST
+    "\x1b[1;32;40m",   // L_TPS      = 15,
+#else
     "", //             = 15
+#endif
 };
 
 static unsigned int s_ansi_seq_color_len[16] = {0};
@@ -388,6 +396,15 @@ static void print_it(unsigned a_off, const char *a_fmt, va_list va) {
 void _log_it(const char * func_name, int line_num, const char *a_log_tag, enum dap_log_level a_ll, const char *a_fmt, ...) {
     if ( a_ll < s_dap_log_level || a_ll >= 16 || !a_log_tag )
         return;
+#ifdef DAP_TPS_TEST
+    if (a_ll != L_TPS) {
+        FILE *l_file = fopen("/opt/cellframe-node/share/ca/without_logs.txt", "r");
+        if (l_file) {
+            fclose(l_file);
+            return;
+        }
+    }
+#endif
     static _Thread_local char s_format[LOG_FORMAT_LEN] = { '\0' };
     unsigned offset = s_ansi_seq_color_len[a_ll];
     memcpy(s_format, s_ansi_seq_color[a_ll], offset);
diff --git a/global-db/dap_global_db.c b/global-db/dap_global_db.c
index f0c02bdd2f314973a87c18424942f3d36d481923..e73f920cc732fc9afc703ec8076ff7302b0db4ab 100644
--- a/global-db/dap_global_db.c
+++ b/global-db/dap_global_db.c
@@ -1193,6 +1193,11 @@ static void s_msg_opcode_set_multiple_zc(struct queue_io_msg * a_msg)
 {
     int l_ret = 0;
     size_t i=0;
+#ifdef DAP_TPS_TEST
+    FILE *l_mempool_file = fopen("/opt/cellframe-node/share/ca/mempool_start.txt", "a");
+    fclose(l_mempool_file);
+    log_it(L_TPS, "Start write %zu records to mempool", a_msg->values_count);
+#endif
     if(a_msg->values_count>0) {
         dap_store_obj_t l_store_obj = {};
         for(;  i < a_msg->values_count && l_ret == 0  ; i++ ) {
@@ -1206,6 +1211,11 @@ static void s_msg_opcode_set_multiple_zc(struct queue_io_msg * a_msg)
                                 a_msg->values, a_msg->callback_arg);
     }
     dap_global_db_objs_delete( a_msg->values, a_msg->values_count);
+#ifdef DAP_TPS_TEST
+    l_mempool_file = fopen("/opt/cellframe-node/share/ca/mempool_finish.txt", "a");
+    fclose(l_mempool_file);
+    log_it(L_TPS, "Finish write %zu records to mempool ", a_msg->values_count);
+#endif
 }
 
 /* *** Pin/unpin functions group *** */
diff --git a/global-db/dap_global_db_driver_sqlite.c b/global-db/dap_global_db_driver_sqlite.c
index 30ebb641e14aa7a406e487bf5b6df6acd9f947b6..20c8ffdf9ac2604c99f4619c7c83150f5a85ac1b 100644
--- a/global-db/dap_global_db_driver_sqlite.c
+++ b/global-db/dap_global_db_driver_sqlite.c
@@ -464,13 +464,12 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da
     char *l_str_query_count = sqlite3_mprintf("SELECT COUNT(*) FROM '%s' "
                                         " WHERE driver_key IN (%s)",
                                         l_table_name, l_blob_str);
-    char *l_str_query_size = sqlite3_mprintf("SELECT SUM(LENGTH(key) + LENGTH(value) + LENGTH(sign)) FROM '%s' "
+    char *l_str_query_size = sqlite3_mprintf("SELECT SUM(LENGTH(key)) + SUM(LENGTH(value)) + SUM(LENGTH(sign)) FROM '%s' "
                                         " WHERE driver_key IN (%s)",
                                         l_table_name, l_blob_str);
     char *l_str_query = sqlite3_mprintf("SELECT * FROM '%s'"
                                         " WHERE driver_key IN (%s) ORDER BY driver_key",
                                         l_table_name, l_blob_str);
-    DAP_DEL_MULTY(l_table_name, l_blob_str);
     if (!l_str_query_count || !l_str_query) {
         log_it(L_ERROR, "Error in SQL request forming");
         goto clean_and_ret;
@@ -506,7 +505,7 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da
     size_t l_data_size = l_count * (sizeof(dap_global_db_pkt_t) + l_group_name_len + 1) + l_size;
     DAP_NEW_Z_SIZE_RET_VAL(l_ret, dap_global_db_pkt_pack_t, sizeof(dap_global_db_pkt_pack_t) + l_data_size, NULL, l_str_query_count, l_str_query);
 // data forming
-    for (size_t i = 0; i < l_count && s_db_sqlite_step(l_stmt) == SQLITE_ROW; ++i) {
+    for (size_t i = 0; i < l_count && l_ret->data_size < l_data_size && s_db_sqlite_step(l_stmt) == SQLITE_ROW; ++i) {
         dap_global_db_pkt_t *l_cur_pkt = (dap_global_db_pkt_t *)(l_ret->data + l_ret->data_size);
         size_t l_count_col = sqlite3_column_count(l_stmt);
         l_cur_pkt->group_len = l_group_name_len;
@@ -522,8 +521,9 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da
                 continue;
             }
             if (j == 1 && sqlite3_column_type(l_stmt, j) == SQLITE_TEXT) {
-                l_cur_pkt->key_len = sqlite3_column_bytes(l_stmt, j) + 1;
+                l_cur_pkt->key_len = sqlite3_column_bytes(l_stmt, j);
                 memcpy(l_cur_pkt->data + l_cur_pkt->data_len, sqlite3_column_text(l_stmt, j), l_cur_pkt->key_len);
+                l_cur_pkt->key_len++;
                 l_cur_pkt->data_len += l_cur_pkt->key_len;
                 continue;
             }
@@ -539,9 +539,13 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da
                 continue;
             }
             if (j == 4 && sqlite3_column_type(l_stmt, j) == SQLITE_BLOB) {
-                if (sqlite3_column_bytes(l_stmt, j)) {
+                size_t l_sign_size = sqlite3_column_bytes(l_stmt, j);
+                if (l_sign_size) {
                     dap_sign_t *l_sign = (dap_sign_t *)sqlite3_column_blob(l_stmt, j);
-                    size_t l_sign_size = dap_sign_get_size(l_sign);
+                    if (l_sign_size != dap_sign_get_size(l_sign)) {
+                        log_it(L_ERROR, "Wrong sign size from global_db");
+                        goto clean_and_ret;
+                    }
                     memcpy(l_cur_pkt->data + l_cur_pkt->data_len, sqlite3_column_blob(l_stmt, j), l_sign_size);
                     l_cur_pkt->data_len += l_sign_size;
                 }
@@ -556,6 +560,7 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da
     }
 clean_and_ret:
     s_db_sqlite_clean(l_conn, 3, l_str_query, l_str_query_count, l_str_query_size, l_stmt, l_stmt_count, l_stmt_size);
+    DAP_DEL_MULTY(l_table_name, l_blob_str);
     return l_ret;
 }