【问题标题】:jdbc driver hang when insert data into TDengine in loop在循环中将数据插入 TDengine 时 jdbc 驱动程序挂起
【发布时间】: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 感谢您的建议。我曾经也将我的问题发布到 StackOverflow 上,希望如果它比作者的响应更快,是否有人可以帮助我解决问题。

标签: java jdbc time-series tdengine


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-05-22
    • 2010-12-06
    • 1970-01-01
    • 2013-08-12
    • 2011-09-08
    • 2020-06-23
    • 2021-09-29
    • 2020-07-18
    • 2019-04-18
    相关资源
    最近更新 更多