Hi,TDengine的用户朋友们,为防止过多的共性问题困扰大家,方便大家学习、吸收经验,从今天开始我们会对近期社区内用户遇到的共性问题进行精选、汇总,每两周给大家带来一次分享。这是此类专栏的第一期内容,为大家分享如下七个常见问题:
客户端连接串如何保证高可用?
Java应用使用taos-jdbcdriver连接TDengine时,RESTful与原生(JNI)接口性能相比如何,该如何选型?
TDengine如何做表关联?是使用JOIN吗?
为什么RESTful接口无响应、Grafana无法添加TDengine为数据源、TDengineGUI选了端口还是无法连接成功?
TDengine数据备份工具taosdump如何使用?
Windows客户端无法正常显示中文字符?
发生了OOM怎么办?
1.客户端连接串如何保证高可用?
本周有较多的用户提到了这个问题,类似的还有「如何给多节点TDengine集群的链接配置高可用」。这个问题时常出现在社区中,DBA、运维同学较为关心。我们已经整理成了文章,详情可看博客:「TDengine如何做到客户端高可用」
2.Java应用使用taos-jdbcdriver连接TDengine时,RESTful与原生(jni)接口性能相比如何,该如何选型?
使用RESTful连接时,不依赖TDengine客户端驱动,可以跨平台,RESTful连接支持所有能运行Java的平台。原生连接支持的平台则和TDengine客户端驱动支持的平台一致。因此RESTful相比于原生连接使用起来更加灵活、方便,但采用RESTful的方式连接,其性能相较于原生连接会低30%左右。
推荐在每秒写入量小于万条记录的场景下,优先选择RESTful。用户也可根据自己场景做性能测试,若使用RESTful连接时性能完全能满足业务操作需求则优先选择RESTful,反之选择原生连接。
3.TDengine如何做表关联?是使用JOIN吗?
TDengine支持在「普通表与普通表」、「超级表与超级表」、「子查询与子查询」之间进行自然连接,其语法相较于INNERJOIN有所不同,并且各种表进行关联查询的限制也不尽相同。
详细内容请看文档:「JOIN子句」
4.为什么RESTful接口无响应、Grafana无法添加TDengine为数据源、TDengineGUI选了端口还是无法连接成功?
上述问题也间歇性的出现在社区中,许多用户充满了疑问,特别是一些从TDengine旧版本升到2.4及之后版本的用户们,这是因为在2.4之前的版本中没有单独的taosAdapter组件,RESTful接口是由taosd内置的HTTP服务提供的,而如今要实现上述功能需要执行:systemctlstarttaosadapter命令来启动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/GB存储中文字符,而TDengine的默认字符集为UTF-8,在Windows系统中使用TDengine客户端时,客户端驱动会将字符统一转换为UTF-8编码后发送到服务端存储,因此在应用开发过程中,调用接口时正确配置当前的中文字符集即可。
在Windows10环境下运行TDengine客户端命令行工具taos时,若无法正常输入、显示中文,可以对客户端taos.cfg做如下配置:
localeC
charsetUTF-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的过程中,若遇到棘手的问题或对TDengine有改进意见,欢迎在GitHub上给我们提Issue,内容越详细越好,也可