时序库拒绝访问

【TDengine 使用环境】生产环境
【TDengine 版本】
3.3.5.8
【操作系统以及版本】
CentOS Linux release 8 (4.18.0‑193.el8.x86_64)
【部署方式】非容器部署(物理机 ECS)
【集群节点数】单节点
【集群副本数】单副本
【描述业务影响】
物联网时序数据写入业务,设备上报数据通过 taos‑ws REST 接口批量入库;故障发生时全部写入请求报错,业务无法落库,发生数据丢失。
taos‑ws 接口 HTTP 返回码 200,但是接口返回 JSON 业务 code=-2147483346,重启 taosd 服务后业务立刻恢复。
问题在下午三点出现,一直到晚9点发现问题,一直都是这个问题。
【问题复现路径】
【遇到的问题:问题现象及影响】
全局所有 INSERT 写入统一报错:‑2147483346 No enough disk space;查询语句正常执行。
操作系统层面磁盘、inode 资源充足:磁盘使用率 42%,剩余 58%;inode 使用率 4%;配置文件中没有找到WAL相关配置,使用的是默认配置。
TDengine 配置校验:minDiskFreeSize=50MB、disk 预留百分比 20%,均未达到触发阈值。
文件句柄上限 openMax=1048576,句柄资源充足。
【资源配置】
CPU:8 核
内存:32GB
磁盘:数据盘剩余 58%,inode 使用率 4%
taos 关键配置:dataDir=/var/lib/taos/,wal_dir 使用默认同目录;minDiskFreeSize=52428800 (50MB);openMax=1048576
【报错完整截图 / 关键报错日志】
2147483346 No enough disk space
taos‑ws HTTP 状态码 200,返回 JSON 中 error_code=-2147483346,所有写入 SQL 全部返回该错误。

请提供如下信息:

  1. df -TH
  2. /etc/taos/taos.cfg
  3. taosdlog

b04bbe35f5fe8392442aefcc8007ae3e

########################################################

Configuration

########################################################

######### 0. Client only configurations #############

The interval for CLI to send heartbeat to mnode

shellActivityTimer 3

############### 1. Cluster End point ############################

根据 DNode 状态自动配置的集群入口

#firstEp ecs.novalocal:6030
#secondEp ecs.novalocal:6030

############### 2. Configuration Parameters of current dnode #####

节点标识配置

#fqdn ecs.novalocal
#serverPort 6030
#maxShellConns 50000

目录配置

#logDir /var/log/taos
#dataDir /var/lib/taos
#tempDir /tmp/

服务报告与监控

telemetryReporting 1
crashReporting 1
monitor 1
supportVnodes 21

— 核心安全增强配置 (解决内存与崩溃风险) —

[新增] 单条查询最大可用内存 (MB),防止单个 SQL 导致系统 OOM

singleQueryMaxMemorySize 2048

[新增] 查询结果未拉取的超时释放时间 (秒),快速回收僵死查询持有的内存

queryNoFetchTimeoutSec 300

[修改] 日志自动保留天数,从 0 (永久) 修改为 30 天,防止磁盘撑爆

logKeepDays 30

[修改] 限制单个日志文件行数,降低高并发下的 I/O 压力 [cite: 2]

numOfLogLines 1000000

写入配置

asyncLog 1
minimalLogDirGB 1.0
minimalDataDirGB 2.0

############ 3. Debug Flag and levels #############################################

生产环境安全建议:统一使用 131 级别 (仅 Warning 和 Error) [cite: 2]

屏蔽 135 或更高数值以减少不必要的日志写入和 CPU 消耗

debugFlag 131
tmrDebugFlag 131
uDebugFlag 131
rpcDebugFlag 131
jniDebugFlag 131
qDebugFlag 131
cDebugFlag 131
dDebugFlag 131
vDebugFlag 131
mDebugFlag 131
wDebugFlag 131
sDebugFlag 131
tsdbDebugFlag 131
tqDebugFlag 131
fsDebugFlag 131
udfDebugFlag 131
smaDebugFlag 131
idxDebugFlag 131
tdbDebugFlag 131
metaDebugFlag 131

允许生成 core 文件以供故障分析

enableCoreFile 1

文件过大,为3月7号到8月8号重启前的所有日志,是否需要全部?

taosdlog 只需要报错时间的就可以。

另外执行 select * from information_schema.ins_dnode_variables where name like ‘%freesize’ or name like ‘minimal%’; 查询一下当前生效的参数。

df -TH 看下所有挂载点,主要是 /tmp

出现问题的时间为13:55:58,日志名称为taoslog0.1786196296;无其他类型报错。

08/08 13:54:36.159544 03600268 C TSC ERROR [monitor] monitorSendAllSlowLog failed to get file size:/tmp//tdengine_slow_log/tdengine-6a0b776aa8f3d31b-3600254-26, err:2
08/08 13:54:36.159555 03600268 C TSC ERROR failed to unlock file:/tmp//tdengine_slow_log/tdengine-6a0b776aa8f3d31b-3600254-26 since -2147483368
08/08 13:55:06.189885 03600268 C TSC ERROR [monitor] monitorSendAllSlowLog failed to get file size:/tmp//tdengine_slow_log/tdengine-6a0b776aa8f3d31b-3600254-26, err:2
08/08 13:55:06.189897 03600268 C TSC ERROR failed to unlock file:/tmp//tdengine_slow_log/tdengine-6a0b776aa8f3d31b-3600254-26 since -2147483368
08/08 13:55:36.223875 03600268 C TSC ERROR [monitor] monitorSendAllSlowLog failed to get file size:/tmp//tdengine_slow_log/tdengine-6a0b776aa8f3d31b-3600254-26, err:2
08/08 13:55:36.223887 03600268 C TSC ERROR failed to unlock file:/tmp//tdengine_slow_log/tdengine-6a0b776aa8f3d31b-3600254-26 since -2147483368
08/08 13:55:58.659436 03600278 C QRY ERROR QID:0x200000000068d4b1,SID:1,CID:0x13800f68ebfcd9e,TID:0x19710df,EID:0 task failed and no more retry, code:No enough disk space
08/08 13:55:59.585352 03600270 C QRY ERROR QID:0x200000000068d4b2,SID:1,CID:0x13800f68ebfcd9e,TID:0x19710e3,EID:0 task failed and no more retry, code:No enough disk space
08/08 13:55:59.585480 03600276 C QRY ERROR QID:0x200000000068d4b2,SID:1,CID:0x13800f68ebfcd9e,TID:0x19710e0,EID:0 task failed and no more retry, code:No enough disk space
08/08 13:55:59.585485 03600276 C QRY ERROR QID:0x200000000068d4b2,SID:1,CID:0x13800f68ebfcd9e,TID:0x19710e1,EID:0 task failed and no more retry, code:No enough disk space
08/08 13:55:59.592818 03600277 C QRY ERROR QID:0x200000000068d4b2,SID:1,CID:0x13800f68ebfcd9e,TID:0x19710e2,EID:0 task failed and no more retry, code:No enough disk space
08/08 13:56:00.003006 03600279 C QRY ERROR QID:0x20733dff149b0f62,SID:1,CID:0x13800f68ebfcd9e,TID:0x19710e4,EID:0 task failed and no more retry, code:No enough disk space

检查一下 /tmp//tdengine_slow_log 文件是否存在?是否能正常读写?

看样子像上次关闭时有文件残留。

停止 数据库
将 /tmp/tdengine_slow_log 目录删除。
启动 数据库

当前是存在的,最后修改时间为 九号晚上七点半。涛思数据库是八号晚上九点半左右重启的。这个文件不存在会影响 磁盘剩余空间判断吗?

八号晚上有重启,新的taosdlog文件中两个报错均不存在。重启后时序库读写恢复正常,主要想了解8号出现的磁盘空间不足是怎么出现的,后续如何规避?

No enough disk space 报错不太准确,
主要是 /tmp//tdengine_slow_log/tdengine-6a0b776aa8f3d31b-3600254-26 这个文件无法读取造成的错误。
客户端异常退出后,残留的 tdengine-{clusterId}-* 文件会在下次连接时被重新上报并删除。
类似问题在新版本进行了修复。请升级到最新版本。

该报错日志中六月份就出现了,一直没有影响正常读写。8号出现问题之后,时序库无法写入数据。java端调用rest码为200,但是sql执行报错。下午两点出现问题到晚九点重启时序库,中间插入sql全部失败。数据插入和/tmp//tdengine_slow_log/tdengine-6a0b776aa8f3d31b-3600254-26错误没有关系吧?

看日志与这个文件读取有关。建议升级到最新版本,新版本在这部分做了优化。