
# IoTDB性能调优
#### 配置场景
IoTDB主要利用堆内存完成读写操作。提高IoTDB内存可以有效提高IoTDB读写性能。
#### 配置描述
登录集群FusionInsight Manager页面，选择"集群 \> 服务 \> IoTDB \> 配置 \> 全部配置"，进入IoTDB配置界面搜索并修改参数。
配置方法如[表1]所示。
 表1IoTDB性能调优参数说明 
| 参数名称                                                                                                             | 描述                                                                                            | 默认值                                                                                                                                                                                                                       | 调优建议                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|:---|
| 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                                                                                                                                                                                                                       | 可根据堆内存使用率情况调整。如果内存使用率高，可适当调小该参数值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   
