jdbc驱动程序在循环中将数据插入TDengine时挂起



操作系统:Ubuntu 20.04TDengine版本:2.2.1.1taos驱动程序版本:2.0.34

Bug描述使用长连接来执行循环插入,当网络断开然后恢复时,程序将被卡住很长一段时间(持续时间不确定(。此时,请按如下方式检查线程信息。

"main" #1 prio=5 os_prio=0 tid=0x00007f529c00f000 nid=0x1c28a1 runnable [0x00007f52a0c30000]
java.lang.Thread.State: RUNNABLE
at com.taosdata.jdbc.TSDBJNIConnector.executeQueryImp(Native Method)
at com.taosdata.jdbc.TSDBJNIConnector.executeQuery(TSDBJNIConnector.java:98)
at com.taosdata.jdbc.TSDBStatement.executeUpdate(TSDBStatement.java:59)

程序打印执行时间如下,其中第二次断开连接,然后恢复

1, 2021-11-10T16:51:39.087, insert :1, used:62.248532 ms
2, 2021-11-10T17:08:53.628, insert :1, used:1034040.293917 ms
3, 2021-11-10T17:08:54.209, insert :1, used:81.080271 ms

样本代码:

public static void main(String[] args) throws Exception {
Class.forName("com.taosdata.jdbc.TSDBDriver");
Connection connection = DriverManager.getConnection("jdbc:TAOS://:/data",
"user",
"pass");
while (true) {
String sql = " a insert sql";
try (Statement statement = connection.createStatement()) {
long start = System.nanoTime();
int result = statement.executeUpdate(sql);
System.out.println(LocalDateTime.now()
+ ", insert :" + result + ", used:"
+ (System.nanoTime()- start)/ 1000000.0 + " ms");
}
TimeUnit.MILLISECONDS.sleep(500L);
}
}

根据描述,第二次执行insert的sql需要很长时间。

线程信息显示它正在执行本机方法executeQueryImp,该方法可能与TDengine的Client有关。您可以打开客户端的日志,并检查特定sql语句的执行时间。

最新更新