写点什么

时序数据库 IoTDB 常见问题 Q&A 第六期

作者:Apache IoTDB
  • 2025-03-21
    北京
  • 本文字数:2706 字

    阅读完需:约 9 分钟

时序数据库 IoTDB 常见问题 Q&A 第六期

关于 IoTDB 的 Q & A

 

第六期持续答疑解惑中!我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题“小百科”,方便大家使用时序数据库 IoTDB


Q1:时序数据库 IoTDB 看门狗配置后不生效

问题现象


使用时序数据库 IoTDB 安装包自带的脚本 daemon-confignode.sh 和 daemon-datanode.sh 配置看门狗后,使用“kill -9 ConfigNode 进程号 DataNode 进程号”的方式杀掉数据库进程后,数据库进程不会自动重启。


原因


执行脚本后,默认生成的 service 文件中的 RestartPreventExitStatus=SIGKILL,表示如果服务退出状态码为 SIGKILL(信号 9),则不会重启服务,所以数据库进程不会自动重启。


解决方案


1. 执行完 daemon-confignode.sh 和 daemon-datanode.sh 后,数据库进程服务其实还没有被 systemd 接管,这时需要先把 ConfigNode 和 DataNode 服务手动停一下,然后使用下面的命令启动服务,这样数据库进程就会被 systemd 接管了。


systemctl start iotdb-confignode.servicesystemctl start iotdb-datanode.service
复制代码


2. 修改 /etc/systemd/system/iotdb-confignode.service 和 /etc/systemd/system/iotdb-datanode.service 中的内容,把 RestartPreventExitStatus=SIGKILL 这一行注释掉。



3. 修改完脚本后执行以下命令使修改生效。


systemctl daemon-reload
复制代码


上面的步骤执行完成后,这时再杀掉数据库进程,看门狗就可以自动拉起数据库服务了。


Q2:时序数据库 IoTDB 写入数据后 data 目录为空

问题现象


向时序数据库 IoTDB 写入少量数据后,使用 CLI 工具可以查询到这部分数据,但是在 data 目录下未查找到对应的 TsFile 文件。




问题原因


写入数据时首先写入 memtable,记录 wal,并没有直接落盘。少量数据写入情况下可能并未触发 memtable 的持久化操作,因此在 data 目录下查看不到对应的 TsFile。而通过 CLI 命令行可以从内存中查询到这部分数据。


解决方案


在 CLI 中手动执行 flush 可以将当前 memtable 的所有数据持久化到磁盘上,将 TsFile 文件封口,然后在 data 下对应的目录中可以获取到完整的 TsFile。




思考


在做测试、备份等场景中,保证此时没有并发写入的条件下,需要当前数据文件完整性的话,可以手动 flush(使用 CLI 或者程序)。


Q3:时序数据库 IoTDB 日志提示 Too many open files

问题


时序数据库 IoTDB 1.3.3 版本 IoTDB 执行查询操作失败,日志打印提示 Too many open files。通过命令查看打开文件数,结果如下:


[root@0002 DataReceiver]# lsof|grep  28347|wc -l     DataNode55444[root@0002 DataReceiver]# lsof|grep  28207|wc -l    ConfigNode18574
复制代码


查看当前网络连接数,结果如下:



原因和解决方案


原因一:连接太多

解决方案:降一点客户端并发。


原因二:文件太多

解决方案:观察顺乱序文件数目以及各个模块文件的大小,TsFile 过多可以调优合并,顺序文件或者乱序文件过多可以修改配置。


 The priority of compaction execution# INNER_CROSS: prioritize inner space compaction, reduce the number of files first# CROSS_INNER: prioritize cross space compaction, eliminate the unsequence files first# BALANCE: alternate two compaction types# compaction_priority=BALANCE# 优先执行空间内合并任务compaction_priority=INNER_CROSS# BALANCE 各种合并平等# INNER_CROSS 优先进行顺序文件和顺序文件或乱序文件和乱序文件的合并# CROSS_INNER 优先将乱序文件合并到顺序文件中
复制代码


如果条件允许(系统资源利用率不高,对其他模块无影响的情况下),可以适当再调大合并写入限速、合并任务并发数,加速合并。


How many threads will be set up to perform compaction, 10 by default.# Set to 1 when less than or equal to 0.# Datatype: int# compaction_thread_count=1
# The limit of write throughput merge can reach per second# values less than or equal to 0 means no limit# Datatype: int, Unit: megabyte# compaction_write_throughput_mb_per_sec=16# 每秒可达到的写入吞吐量合并限制。
# The number of sub compaction threads to be set up to perform compaction.# Currently only works for nonAligned data in cross space compaction and unseq inner space compaction.# Set to 1 when less than or equal to 0.# Datatype: int# sub_compaction_thread_count=4# 每个合并任务的子任务线程数,只对跨空间合并和乱序空间内合并生效
复制代码


Q4:时序数据库 IoTDB TTL 不生效

问题


时序数据库 IoTDB 1.3.0 版本数据库的 TTL 设置为两天,show databases details 看到设置也是正确的,怎么还是可以查到好几天前的数据?因为有很多不活跃的测点,所以专门设置了两天过期,有什么办法可以自动清理呢?设置方式是在配置文件统一设置的。



原因


  • 可能因为期间出现过 ConfigNode OOM,加了内存重启过。

  • 或者是当前版本已解决的 TTL Cache 不一致问题。


方案


  • 用命令 unset 然后再 set,设置就可以生效了。

  • 升级到最新版 IoTDB。


Q5:时序数据库 IoTDB 一台节点的 DataNode 出现 xxxx.tsfile is not complete, and some source files is lost 错误

问题


使用时序数据库 IoTDB 1.3.0 版本集群的时候,其中有一台节点的 DataNode 出现这个错误,造成无法正常写入数据:


2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] ERROR o.a.i.d.s.d.c.e.r.CompactionRecoverTask:292 - root.ln-5 [Compaction][ExceptionHandler] target file unsequence/root.ln/5/2865/1733480889427-13297-1-0.tsfile is not complete, and some source files is lost, do nothing. Set allowCompaction to false 2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] INFO  o.a.i.c.conf.CommonConfig:399 - Set system mode from Running to ReadOnly. 2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] WARN  o.a.i.c.conf.CommonConfig:405 - Change system status to ReadOnly! Only query statements are permitted! 2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] ERROR o.a.i.d.s.d.c.e.r.CompactionRecoverTask:142 - root.ln-5 [Compaction][Recover] Failed to recover compaction, set allowCompaction to false
复制代码


还有两个 DataNode 节点是好的,连接好的 DataNode 节点写入是没有问题的,但是剩下的节点就不行了。


原因


在低版本的 IoTDB 当中,Compaction 时出现上述异常,会将对应的 DataNode 设置为 ReadOnly 的状态,此时该节点会无法进行写入请求。


解决方案


更新至时序数据库 IoTDB 1.3.3 及以上版本。

用户头像

Apache IoTDB

关注

还未添加个人签名 2021-12-30 加入

海量时序数据管理的解决方案,一款高吞吐、高压缩、高可用、物联网原生的开源时序数据库。

评论

发布
暂无评论
时序数据库 IoTDB 常见问题 Q&A 第六期_Apache IoTDB_InfoQ写作社区