在循环中将数据插入 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需要很长时间。
线程信息显示它正在执行native方法executeQueryImp,这可能与TDengine的Client有关。可以在客户端开启日志,查看具体sql语句的执行时间。
【讨论】:
以上是关于在循环中将数据插入 TDengine 时 jdbc 驱动程序挂起的主要内容,如果未能解决你的问题,请参考以下文章
在 Java JDBC 中将行插入没有更新方法的 ResultSet