Thingsboard v3.63PE性能问题求助:Cassandra数据查询优化
Thingsboard v3.6.3 PE 时序数据性能问题解决方案
一、Cassandra 核心配置调优
你的服务器有64G内存+8核,必须把Cassandra的配置拉满才能匹配硬件:
- 修改
cassandra.yaml:concurrent_reads: 32(8核机器设为核数*4,充分榨干CPU)concurrent_writes: 32memtable_allocation_type: offheap_buffers(用堆外内存,减少Java GC拖慢速度)memtable_cleanup_threshold: 0.1(提前触发内存数据刷盘,避免突发IO阻塞)commitlog_segment_size_in_mb: 256(增大提交日志段,减少小文件IO开销)
- 修改
jvm.options:-Xms32G -Xmx32G(分配一半内存给Cassandra,64G机器留32G刚好)-XX:+UseG1GC(用G1垃圾收集器,大内存场景下GC效率更高)
二、Thingsboard 配置文件(thingsboard.conf)优化
添加以下参数提升时序查询性能:
TB_QUEUES_READER_THREADS=8(队列读取线程数跟CPU核数对齐)TS_MAX_INFLIGHT_REQUESTS=100(增大时序查询并发数,默认值偏低)TS_QUERY_BATCH_SIZE=1000(调整查询批次大小,平衡单次请求负载和IO次数)CASSANDRA_QUERY_FETCH_SIZE=5000(增大Cassandra查询的fetch size,减少客户端与数据库的往返次数)TB_CACHE_TS_DATA_TTL=3600(开启时序数据缓存,1小时内的重复查询直接从内存取,不用查库)
三、Widget 针对性优化
表格和Trip Animation Widget慢是因为渲染逻辑和数据加载方式的问题:
- 表格Widget:
- 强制开启
分页加载,别一次性拉10000条,每页设100-200条足够 - 删掉不需要的列,只留核心字段,减少数据传输量
- 关掉
自动刷新,改成手动刷新或者把间隔拉到5分钟以上
- 强制开启
- Trip Animation Widget:
- 降低轨迹点采样率,比如每5个点只取1个,减少渲染压力
- 先批量加载完历史数据再渲染,别边加载边画轨迹
- 调低地图渲染精度,关闭不必要的地图图层(比如卫星图换普通地图)
四、数据查询逻辑优化
单设备10000点卡顿、多设备同总量快的问题,大概率是查询范围跨了太多Cassandra分区:
- 确认查询时严格按时间范围过滤,Thingsboard默认按天分区,30天会跨30个分区,必须加时间条件避免全表扫描
- 别一次性查30天全量数据,拆成按天查询,前端再合并结果
- 非必要不查原始数据,用Thingsboard的聚合函数(比如平均值、最大值),能大幅减少返回的数据量
五、系统资源利用优化
- 给Thingsboard分配足够内存:在
thingsboard.conf里设JAVA_OPTS="-Xms16G -Xmx16G"(留16G给系统和其他进程) - 开启Cassandra的LZ4压缩:在
cassandra.yaml里设compression: {sstable_compression: LZ4Compressor},减少磁盘IO压力 - 检查磁盘类型,如果是机械硬盘赶紧换成SSD,时序数据的随机IO对硬盘速度要求极高
内容的提问来源于stack exchange,提问作者ecallaw
相关产品推荐
相关产品推荐

