更新时间:2024-10-28 GMT+08:00

IoTDB性能调优

配置场景

IoTDB主要利用堆内存完成读写操作。提高IoTDB内存可以有效提高IoTDB读写性能。

配置描述

登录集群FusionInsight Manager页面,选择“集群 > 服务 > IoTDB > 配置 > 全部配置”,进入IoTDB配置界面搜索并修改参数。

配置方法如表1所示。

表1 IoTDB性能调优参数说明

参数名称

描述

默认值

调优建议

SSL_ENABLE

客户端到服务端通道SSL加密。

true

“true”表示开启SSL加密,“false”表示关闭SSL加密。数据传输加解密对性能影响较大,经过测试发现具有200%的性能差异,因此建议性能测试时关闭SSL加密。ConfigNode和IoTDBServer两个角色同名参数都要修改。

iotdb_server_kerberos_qop

集群内各个IoTDBServer实例数据传输加密,仅开启Kerberos认证的集群支持该参数。

auth-int

“auth-int”表示数据传输加密,“auth”表示只认证,不加密。因此建议将此参数值修改为“auth”。ConfigNode和IoTDBServer两个角色同名参数都要修改。

GC_OPTS

IoTDBServer使用的内存和GC配置参数,需要按实际情况进行配置。

-Xms2G -Xmx2G -XX:MaxDirectMemorySize=512M -XX:+UseG1GC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -Djdk.tls.ephemeralDHKeySize=3072

  • “-Xms2G -Xmx2G”为IoTDB JVM堆内存,对于时间序列多,写入并发量大的场景,需要增大此配置。可以根据GC时长阈值告警或堆内存阈值告警进行调优,如果告警发生,参数值按照0.5倍速率调大。如果告警频繁发生,参数值按照1倍速率调大。调整HeapSize大小时,建议将Xms和Xmx设置成相同的值,这样可以避免JVM动态调整HeapSize大小的时候影响性能。
  • “-XX:MaxDirectMemorySize”为IoTDB JVM直接内存,建议值为堆内存的“1/4”,主要影响写入性能,如果写入性能明显下降,可以适当调整该参数,参数值按照0.5倍速率调大。注意:需要保证“堆内存+直接内存 <= 80% * 系统可用内存”, 否则会导致IoTDB启动失败。
  • 查询场景调优举例:如果查询的范围比较大,单个序列10000个点以上,JVM分配内存的20% / 序列数 > 160K,即为默认配置下存储引擎对查询最友好的状态。
  • 序列和内存大小举例:500万序列,对应内存配置为:-Xms128G -Xmx128G

write_read_schema_free_memory_proportion(MRS 3.3.0及之后版本为“storage_query_schema_consensus_free_memory_proportion”)

内存分配比例:写、读、模型、空闲。

  • MRS 3.2.0版本:4:3:1:2
  • MRS 3.3.0及之后版本:3:3:1:1:2

可根据负载适当调整内存。

  • 写入内存越大,对写入吞吐和单个查询越好。
  • 查询内存越大,支持的并发查询越多。
  • 元数据内存越大,就不容易出现“IoTDB system load is too large”。
  • 空闲内存越大,越不容易导致内存爆满。

iot_consensus_throttle_threshold_in_byte

WAL目录大小上限,默认50GB,单位为字节。超过该值,写操作就会变慢或者被拒绝。

仅MRS 3.3.0及之后版本支持该参数。

‭53687091200‬

可根据写负载情况适当调整。

  • 写并发小,不用更改。
  • 写并发大,可适当调大。

data_region_iot_max_pending_batches_num

Leader数据副本同步给Follower的并发最大值。

仅MRS 3.3.0及之后版本支持该参数。

12

可根据CPU、WAL积压情况调整。该参数为自定义配置,需选择“IoTDBServer(角色) > 自定义”,在自定义参数“engine.customized.configs”中添加该参数项及参数值。

  • 写并发小,不用更改。
  • 写并发大,可适当调大。
  • WAL积压,可适当调小。
  • CPU使用持续80%以上,可适当调小。

avg_series_point_number_threshold

当内存数据平均点数达到此阈值时,Flush数据到Tsfile。

仅MRS 3.3.0及之后版本支持该参数。

10000

可根据堆内存使用率、GC时长情况调整。

  • GC时长较长,可适当调小。
  • 内存使用率高,可适当调小。

flush_proportion

调用刷盘的写内存比例,如果写入负载极高(如批处理=1000),可以降低该值。

仅MRS 3.3.0及之后版本支持该参数。

0.4

可根据堆内存使用率情况调整。如果内存使用率高,可适当调小该参数值。