使用Stmt方式批量写入数据,句柄数量小批量增加不释放。

【TDengine 使用环境】
生产环境

【TDengine 版本】

  • TDengine.Connector 版本: 3.1.7 服务端版本:3.0.3.1

【操作系统以及版本】

  • OS: window server 2019 Datacenter

  • RAM-128G CPU-24核

【部署方式】容器/非容器部署

【集群节点数】

【集群副本数】

【描述业务影响】

【问题复现路径/shan】做过哪些操作出现的问题

【遇到的问题:问题现象及影响】

每十五分钟写入大约20w条数据,运行20小时,写入80次,进程内 观察句柄数量由1200涨至2500左右,内存占用从300M涨至900M左右。

【资源配置】

【报错完整截图】(不要大段的粘贴报错代码,论坛直接看报错代码不直观)

Stmt伪代码:
 var builder = new ConnectionStringBuilder(connectionStr);  using (var client = DbDriver.Open(builder)) { using (var stmt = client.StmtInit()) { #region 插入时域数据表 try { string tabnameTIme = "t_" + deviceId + "_" + diagnosePointId.ToString(); string insertHeader = $"insert into {tabnameTIme} using timedomain TAGS ({deviceId},{diagnosePointId}) VALUES(?,?,?,?,?,?,?,?)"; long count = 0; stmt.Prepare(insertHeader); var row = new object[8]; row[5] = ""; row[6] = acqNumber; row[7] = channelNumber; int dataCount = channelDirection.timeDomainData.Count; for (int i = 0; i < dataCount; i++) { var dt = AppConst.GetTime((timestamp + i).ToString()); row[0] = dt; row[1] = channelDirection.timeDomainData[i].XAxis; row[2] = channelDirection.timeDomainData[i].YAxisAcceleration; row[3] = channelDirection.timeDomainData[i].YAxisDisplacement; row[4] = channelDirection.timeDomainData[i].YAxisSpeed; stmt.BindRow(row); stmt.AddBatch(); if ((i + 1) % batchSize == 0) { stmt.Exec(); count += batchSize; } } if (dataCount % batchSize != 0) { stmt.Exec(); count += (dataCount % batchSize); } _logger.LogTrace("插入{}条时域数据{},id={}", count, channelNumber, diagnosePointId); } catch (Exception) { throw; } #endregion #region 插入其它图表数据 #endregion #region 插入其它图表数据 #endregion #region 插入其它图表数据 #endregion #region 插入其它图表数据 #endregion        } }

局部截取_20260423_091401