Hi,TDengine 的用户朋友们,为防止过多的共性问题困扰大家,方便大家学习、吸收经验,从今天开始我们会对近期社区内用户遇到的共性问题进行精选、汇总,每两周给大家带来一次分享。 这是此类专栏的第一期内容,为大家分享如下七个常见问题:
- 客户端连接串如何保证高可用?
- Java 应用使用 taos-jdbcdriver 连接 TDengine 时, RESTful 与原生 ( JNI ) 接口性能相比如何,该如何选型?
- TDengine 如何做表关联?是使用 JOIN 吗?
- 为什么 RESTful 接口无响应、Grafana 无法添加 TDengine 为数据源、TDengineGUI 选了 6041 端口还是无法连接成功?
- TDengine 数据备份工具 taosdump 如何使用?
- Windows 客户端无法正常显示中文字符?
- 发生了 OOM 怎么办?
1. 客户端连接串如何保证高可用?
本周有较多的用户提到了这个问题,类似的还有 「如何给多节点 TDengine 集群的链接配置高可用」。这个问题时常出现在社区中,DBA、运维同学较为关心。我们已经整理成了文章,详情可看博客:「 TDengine 如何做到客户端高可用 」
2. Java 应用使用 taos-jdbcdriver 连接 TDengine 时, RESTful 与原生 ( jni ) 接口性能相比如何,该如何选型?
使用 RESTful 连接时,不依赖 TDengine 客户端驱动,可以跨平台,RESTful 连接支持所有能运行 Java 的平台。原生连接支持的平台则和 TDengine 客户端驱动支持的平台一致。 因此 RESTful 相比于原生连接使用起来更加灵活、方便,但采用 RESTful 的方式连接,其性能相较于原生连接会低 30% 左右。
推荐在每秒写入量小于 200 万条记录的场景下,优先选择 RESTful 。用户也可根据自己场景做性能测试,若使用 RESTful 连接时性能完全能满足业务操作需求则优先选择 RESTful ,反之选择原生连接。
3. TDengine 如何做表关联?是使用 JOIN 吗?
TDengine 支持在 「普通表与普通表」、「超级表与超级表」、「子查询与子查询」之间进行自然连接,其语法相较于 INNER JOIN 有所不同,并且各种表进行关联查询的限制也不尽相同。
详细内容请看文档:「 JOIN 子句 」
4. 为什么 RESTful 接口无响应、Grafana 无法添加 TDengine 为数据源、TDengineGUI 选了 6041 端口还是无法连接成功?
上述问题也间歇性的出现在社区中,许多用户充满了疑问,特别是一些从 TDengine 旧版本升到 2.4 及之后版本的用户们,这是因为在 2.4 之前的版本中没有单独的 taosAdapter 组件,RESTful 接口是由 taosd 内置的 HTTP 服务提供的,而如今要实现上述功能需要执行:systemctl start taosadapter
命令来启动 taosAdapter 服务。
需要说明的是,taosAdapter 的日志路径 path 需要单独配置,默认路径是 /var/log/taos ;日志等级 logLevel 有 8 个等级,默认等级是 info ,配置成 panic 可关闭日志输出。请注意操作系统 / 目录的空间大小,可通过命令行参数、环境变量或配置文件来修改配置,默认配置文件是 /etc/taos/taosadapter.toml 。
有关 taosAdapter 组件的详细介绍请看文档:「 taosAdapter 」
5. TDengine 数据备份工具 taosdump 如何使用?
taosdump 是 TDengine 集群的数据备份、还原工具,使用前请先查看文档中的说明及注意事项 :「 taosdump 」
需要注意的是,taosdump 采用逻辑备份的方式进行备份,其不应被用于备份任何原始数据、环境设置、 硬件信息、服务端配置或集群的拓扑结构;并且当备份的表数量很多时很容易导致文件系统卡住(一个表一个备份文件),推荐书写脚本循环调用 taosdump 按照较细的粒度备份到不同目录。
6. Windows 客户端无法正常显示中文字符?
Windows 系统中一般是采用 GBK/GB18030 存储中文字符,而 TDengine 的默认字符集为 UTF-8 ,在 Windows 系统中使用 TDengine 客户端时,客户端驱动会将字符统一转换为 UTF-8 编码后发送到服务端存储,因此在应用开发过程中,调用接口时正确配置当前的中文字符集即可。
【 v2.2.1.5以后版本 】在 Windows 10 环境下运行 TDengine 客户端命令行工具 taos 时,若无法正常输入、显示中文,可以对客户端 taos.cfg 做如下配置:
locale C
charset UTF-8
再次运行客户端命令行工具 taos ,即能正常进行操作。
另外,在 TDengine 中,中文字符或其他多字节字符需用 nchar 类型存储,不要用 binary 类型进行存储,否则在用 taosdump 工具导出导入时将出现乱码,导致不可修复的异常,binary 建议只用于存储 ASCII 可见字符。
7. 发生了 OOM 怎么办?
OOM 是操作系统的保护机制,当操作系统内存(包括 SWAP )不足时,会杀掉某些进程,从而保证操作系统的稳定运行。通常内存不足主要是如下两个原因导致,一是剩余内存小于 vm.min_free_kbytes ;二是程序请求的内存大于剩余内存。还有一种情况是内存充足但程序占用了特殊的内存地址,也会触发 OOM 。
TDengine 会预先为每个 VNode 分配好内存,每个 Database 的 VNode 个数受 maxVgroupsPerDb 影响,每个 VNode 占用的内存大小受 Blocks 和 Cache 影响。要防止 OOM,需要在项目建设之初合理规划内存,并合理设置 SWAP ,除此之外查询过量的数据也有可能导致内存暴涨,这取决于具体的查询语句。TDengine 企业版对内存管理做了优化,采用了新的内存分配器,对稳定性有更高要求的用户可以考虑选择企业版。
结尾语
感谢您阅读本期问题精选,希望以上内容对您有帮助。您在使用 TDengine 这款 TIme-Series Database 的过程中,若遇到棘手的问题或对 TDengine 有改进意见,欢迎在 https://github.com/taosdata/TDengine/issues 上给我们提 Issue ,内容越详细越好,也可微信扫下方二维码加入社区,与大家进行交流 ~ 最后,感谢使用 TDengine!