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

Posted

技术标签:

【中文标题】在循环中将数据插入 TDengine 时 jdbc 驱动程序挂起【英文标题】:jdbc driver hang when insert data into TDengine in loop 【发布时间】:2021-11-13 03:11:41 【问题描述】:

操作系统:Ubuntu 20.04 TDengine 版本:2.2.1.1 taos-driver 版本:2.0.34

错误描述 使用长连接执行循环插入,当断网再恢复时,程序会卡住很长时间(持续时间不确定)。此时,查看线程信息如下。

"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);
    

【问题讨论】:

您问题中的“错误描述”表明您正在尝试提交错误报告。 Stack Overflow 不适合那样做。错误报告需要向 TDengine 的作者提交。如果您想提出问题,请确保您实际上是在提出问题 @MarkRotteveel 感谢您的建议。我曾经也将我的问题发布到 *** 上,希望如果它比作者的响应更快,是否有人可以帮助我解决问题。 【参考方案1】:

从描述来看,是说第二次执行insert的sql需要很长时间。

线程信息显示它正在执行na​​tive方法executeQueryImp,这可能与TDengine的Client有关。可以在客户端开启日志,查看具体sql语句的执行时间。

【讨论】:

以上是关于在循环中将数据插入 TDengine 时 jdbc 驱动程序挂起的主要内容,如果未能解决你的问题,请参考以下文章

在 Java JDBC 中将行插入没有更新方法的 ResultSet

如何使用JDBC连接TDengine数据库?

在jdbc中的单个事务中将数据插入多个表中

为啥TDengine由于Invalid table ID无法插入数据

SQL 中将游标循环查询的结果插入到临时表中

tdengine jdbc restful接口返回值最大只有10240条