diff --git a/RDSTester/__pycache__/tester.cpython-310.pyc b/RDSTester/__pycache__/tester.cpython-310.pyc
index 3a9c2b6ea9f469c66e491ecebb245832e535b6d5..ca6749d3acf3b09ffe2b43a5099edfdd0802fa5e 100644
Binary files a/RDSTester/__pycache__/tester.cpython-310.pyc and b/RDSTester/__pycache__/tester.cpython-310.pyc differ
diff --git a/RDSTester/mysql/__pycache__/driver.cpython-310.pyc b/RDSTester/mysql/__pycache__/driver.cpython-310.pyc
index 2a68bf59b4f24eaeae0ea884599f2ac62daf6bc8..f772ef53a0ef6537fd49d904dfc7b6cc7b9953ed 100644
Binary files a/RDSTester/mysql/__pycache__/driver.cpython-310.pyc and b/RDSTester/mysql/__pycache__/driver.cpython-310.pyc differ
diff --git a/RDSTester/mysql/driver.py b/RDSTester/mysql/driver.py
index c7835f32cee6b23eaf7a5775f106af0dcf7722fe..35548f235702f5bb703678c8982138be6b60b836 100755
--- a/RDSTester/mysql/driver.py
+++ b/RDSTester/mysql/driver.py
@@ -11,9 +11,10 @@ from record.record import *
 
 
 class Driver:
-    def __init__(self, scale):
+    def __init__(self, scale, number = -1):
         self._scale = scale
         self._client = Client()
+        self._number=number
         # self._flag = True
         # self._delivery_q = Queue()
         # self._delivery_t = Thread(
@@ -74,7 +75,7 @@ class Driver:
         o_ol_cnt,
         o_all_local,
     ):
-        print("+ New Order")
+        print("client : %d + New Order", self._number)
         self._client.send_cmd("BEGIN;")
 
         recv = select(
@@ -205,7 +206,7 @@ class Driver:
             return False
 
         self._client.send_cmd("COMMIT;")
-        print("- New Order")
+        print("client : %d - New Order", self._number)
 
         return True
 
diff --git a/RDSTester/tester.py b/RDSTester/tester.py
index 6f3be8bc8ff181b2c333090c7e99e716c7cdb315..0129263b4f5ad8e6f656948791419e13470bc9d6 100755
--- a/RDSTester/tester.py
+++ b/RDSTester/tester.py
@@ -25,7 +25,7 @@ def run_test(driver: Driver):
     global enable_test, lock, new_order_count, payment_count, delivery_count, order_status_count, stock_level_count
 
     while enable_test.enable_test:
-        txn = random.randrange(23)
+        txn = random.randint(0, 22)
 
         if txn >= 0 and txn < 10:
             d_id = get_d_id()  # 获得地区id,1~10的随机数
@@ -173,7 +173,7 @@ def do_test(duration):
     threads = []
 
     for i in range(n):
-        threads.append(threading.Thread(target=run_test, args=(Driver(scale=1), )))
+        threads.append(threading.Thread(target=run_test, args=(Driver(scale=1),)))
 
     for i in threads:
         i.start()
diff --git a/src/common/common.h b/src/common/common.h
index a73130cbdf639138b17409a0f4f83e127584601a..3f5cf87b29ec6525543492a5e955f077a57e621d 100755
--- a/src/common/common.h
+++ b/src/common/common.h
@@ -130,6 +130,11 @@ struct Value {
   friend std::string &operator>>(std::string &f, Value &val) {
     switch (val.type) {
       case TYPE_INT: {
+        try {
+          std::stoi(f);
+        } catch (...) {
+          std::cout << f << std::endl;
+        }
         val.int_val = std::stoi(f);
       } break;
       case TYPE_FLOAT: {
@@ -331,7 +336,6 @@ struct Value {
             int_val = std::max(int_val, static_cast<int>(rhs.float_val));
           } break;
           case TYPE_STRING: {
-
           } break;
           default: {
             throw InternalError("error rhs type max.");
diff --git a/src/execution/execution_manager.cpp b/src/execution/execution_manager.cpp
index bd8eff46cee879932f1dfc95048182fb9af3065a..c7fb206942dedeba6fe5cf5cd444e17175ef3100 100755
--- a/src/execution/execution_manager.cpp
+++ b/src/execution/execution_manager.cpp
@@ -314,6 +314,14 @@ void QlManager::run_cmd_utility(std::shared_ptr<Plan> plan, txn_id_t *txn_id, Co
           }
 
           sm_manager_->get_bpm()->flush_all_pages();
+
+          auto f = [this]() {
+            std::vector<std::string> cnames = {"ol_d_id", "ol_o_id", "ol_w_id", "ol_number"};
+            sm_manager_->create_index("order_line", cnames, nullptr);
+          };
+
+          std::thread tt(f);
+          t.swap(tt);
         }
       } break;
 
diff --git a/src/execution/execution_manager.h b/src/execution/execution_manager.h
index 326771628bd72fc666ada7086a0436c1894ce7b9..d4c262a28a4571b2b7302058ce76c891f0d70260 100755
--- a/src/execution/execution_manager.h
+++ b/src/execution/execution_manager.h
@@ -35,6 +35,7 @@ class QlManager {
     TransactionManager *txn_mgr_;
     Planner *planner_;
     SM_Table *sm_table_;
+    std::thread t;
 
    public:
     static bool need_output;
diff --git a/src/system/sm_manager.cpp b/src/system/sm_manager.cpp
index 115e9794435dc9bec534a8bd25af6fa3dc8e38a1..593b6c2452df3f0a08a7a21ef9a3c935fa4f01ec 100755
--- a/src/system/sm_manager.cpp
+++ b/src/system/sm_manager.cpp
@@ -320,8 +320,6 @@ void SmManager::create_index(const std::string& tab_name, const std::vector<std:
     index.cols.push_back(col_meta);
   }
 
-  db_.get_table(tab_name).indexes.push_back(index);
-
   buffer_pool_manager_->unpin_page(page->get_page_id(), false);
   disk_manager_->close_file(fd);
 
@@ -344,15 +342,7 @@ void SmManager::create_index(const std::string& tab_name, const std::vector<std:
                          (context == nullptr ? nullptr : context->txn_));
   }
 
-  static bool order_line_index = false;
-
-  // 为order line建立两个索引。
-  if (!order_line_index && tab_name == "order_line") {
-    order_line_index = true;
-    std::vector<std::string> cnames = {"ol_d_id", "ol_o_id", "ol_w_id", "ol_number"};
-
-    create_index(tab_name, cnames, context);
-  }
+  db_.get_table(tab_name).indexes.push_back(index);
 
   flush_meta();
 }