网络延时对 TDengine TSDB 写入性能的影响:实验解析与实践建议

部署 TDengine TSDB 时,CPU、内存等基础性能受关注,而易被忽略的网络延时对写入性能影响显著。本文通过 7 组实验验证:网络延时与写入速度强负相关,最优时(0.034ms)写入速度达 19.9 万 rows/s,最差仅为其 18.6%。

测试基于虚拟机(服务端 16 核 16GB、压测端 16 核 32GB,均 1000Mb/s 网络),以 tc 命令调延时,16 线程 + stmt2 模式压测;配套 ping 测试验证延时、性能监控保障数据可信。

实践建议:对于大数据量、高并发的生产环境,建议网络延时控制在 0.1ms 以下(ping -f)。

一、先搞懂:什么是网络延时?

网络延时就是一个数据从发出到对方收到并回复的总时间,单位是毫秒(ms),从专业角度看,总网络延时由四部分组成:

总网络延时 = 传输延时 + 传播延时 + 处理延时 + 排队延时

实际用网络时,常关注三种延时,它们对应不同场景:

  1. 单向延时(One-Way Latency)
  • 定义:数据从发出到对方收到的 “单程” 时间。
  • 适用场景:对时间特别敏感的情况,如实时通信、卫星通信。
  • 测量难点:需要让发数据和收数据的设备时间完全一致,不平时很少用这种方式测。
  1. 往返延时(Round-Trip Time, RTT)
  • 定义:数据从发出到对方收到并回复的 “来回” 总时间,。
  • 适用场景:大部分网络使用场景,这是平时测性能最常用的延时指标。
  • 测量方式:使用ping 192.168.3.67(实验中服务器的地址),结果中 time=0.034ms 就是往返延时。
  1. 应用层延时(Application Latency)
  • 定义:从发起操作到看到结果的总时间,除了网络延时,还包括设备处理数据的时间。
  • 典型示例:打开网页的延时 = DNS 寻址时间 + 建立网络连接的时间 + 数据传输的往返延时 + 服务器处理数据的时间 + 显示网页的时间。

本次实验主要测试 往返延时(RTT),验证其对 TDengine TSDB 数据写入的影响。

二、实验揭秘:如何验证网络延时对写入性能的影响?

文中做了 7 组实验,只改变 “网络延时” 这一个变量,以验证网络延时对写入性能的影响。

2.1 测试环境

实验用的是虚拟机。具体配置如下:

配置项服务端(TDengine 节点)压测端(客户端)
CPU 核心数16 核16 核
内存(MEM)16GB32GB
IP 地址192.168.3.67192.168.3.68
网络带宽1000Mb/s1000Mb/s
TDengine TSDB 版本3.3.6.14

注意:虚拟机有时候会出现宿主机资源竞争的情况,造成性能不稳定,影响实验结果。

2.2 用 tc 命令调整网络延时

为了模拟不同的网络情况,可以用 Linux 系统里的tc命令在压测端调整网络延时。核心命令是:

tc qdisc add dev ens160 root netem delay 10ms

参数解析:

字段作用说明
tc qdisc add操作类型:“add” 表示给网络加一条规则
dev ens160目标网络接口:指定对 “ens160” 这块网卡生效
root规则挂载点:把这条规则设为最顶层的,所有数据都要按这个规则走
netem队列规则类型:相当于 “网络模拟器”,能模拟网络延迟、丢包等情况
delay 10ms核心参数:把所有从压测端发出的数据都延迟 10ms 再传,

通过把delay后面的数字改成 0.2ms、0.3ms 等不同数值,就模拟出了 7 组不同的网络延时场景,为后面的对比实验做准备。

2.3 关键操作 2:用 ping -f 验证延时真实性

调完网络延时后,得确认延时与升级相符,可以用 “洪水 ping”(ping -f)模式,命令是:

ping -f -c 10000 192.168.3.67

-f参数特别重要,它能更真实地模拟大数据量场景:

  1. 发包间隔差异:普通 ping 每秒发 1 个数据包,就像货车每隔 1 秒才出发一辆,系统要频繁安排货车,浪费时间;-f参数让数据包连续发,货车一辆接一辆出发,不用频繁安排。
  2. 系统资源分配:用-f参数时,系统会优先处理这些 ping 请求,就像给货车队开绿灯,让它们更快通过。
  3. 网络传输连续性:连续发数据包能让网络一直处于忙碌状态,避免网络空闲后再启动时浪费时间,就像马路一直有车跑,不会出现车少了再发车时的等待。

ping -f -c 10000(发 10000 个数据包),可测量当前网络的往返延时,确保实验中 “延时” 这个条件准确。

2.4 压测脚本配置

使用用 TDengine 官方的压测工具 taosBenchmark,保证每次数据测试的条件都一样,,脚本如下:

{
        "filetype":"insert",
        "cfgdir":"/etc/taos",
        "host":"c3-67",
        "port":6030,
        "user":"root",
        "password":"taosdata",
        "thread_count":16,
        "thread_count_create_tbl":100,
        "num_of_records_per_req":10,
        "result_file":"insert.log",
        "confirm_parameter_prompt":"no",
        "databases":[{
                "dbinfo":{
                        "name":"test",
                        "cachemodel":"'none'",
                        "cachesize":100,
                        "vgroups":8,
                        "drop":"yes"
                },
                "super_tables":[{
                        "name":"sbnt",
                        "child_table_exists":"no",
                        "childtable_count":80000,
                        "childtable_prefix":"tbtf_",
                        "auto_create_table":"no",
                        "batch_create_tbl_num":2000,
                        "data_source":"rand",
                        "insert_mode":"stmt2",
                        "insert_interval":0,
                        "insert_rows":10000,
                        "interlace_rows":10,
                        "max_sql_len":1048576,
                        "disorder_ratio":0,
                        "disorder_range":1000,
                        "timestamp_step":10000,
                        "start_timestamp":"2020-10-01 00:00:10",
                        "sample_format":"csv",
                        "sample_file":"",
                        "tags_file":"",
                        "columns": [{"type":"varchar","len":10,"count":1},{"type":"float","count":10}],
                        "tags":[{"type":"varchar","len":10,"count":1}]
                }]
        }]
}

执行脚本:

taosBenchmark -f i.json

三、实验结论:延时与写入速度呈 “强负相关”

通过 7 组实验对比,可以清楚地看到 “网络延时” 和 “TDengine TSDB数据写入速度” 的关系 ——网络延时越高,数据写入速度越慢;延时越低,数据写入速度越快

下面是实验的核心数据和结论:

3.1 核心实验数据对比

测试组往返延时(RTT)写入速度(rows/s,stmt2 模式)相对最优速度占比
Test10.034ms199141.88(每秒存近 20 万条数据)100%(最快)
Test21.088ms67626.02(每秒存约 6.8 万条数据)33.96%
Test32.101ms37096.76(每秒存约 3.7 万条数据)18.6%(最慢)
Test40.254ms155809.98(每秒存约 15.6 万条数据)78.24%
Test50.466ms122463.81(每秒存约 12.2 万条数据)61.5%
Test60.878ms81191.54(每秒存约 8.1 万条数据)40.77%
Test71.286ms58693.38(每秒存约 5.9 万条数据)29.48%
网络延时对 TDengine TSDB 写入性能的影响:实验解析与实践建议 - TDengine Database 时序数据库

3.2 关键结论解读

从数据里能看出三个重要规律:

  1. 最优性能边界:当网络延时最低时(Test1,0.034ms),数据写入速度最快,每秒能存近 20 万条数据,这是当前硬件条件下的最好成绩。
  2. 性能衰减极限:当网络延时最高时(Test3,2.101ms),数据写入速度最慢,每秒只存约 3.7 万条数据,只有最快速度的 18.6%。这意味着延时变成原来的 62 倍,数据写入速度就只剩原来的不到五分之一。
  3. 线性衰减规律:其他测试组,比如从 Test4 到 Test7,延时从 0.254ms 慢慢增加到 1.286ms,数据写入速度也从每秒约 15.6 万条慢慢降到约 5.9 万条,完全符合 “延时降、速度升” 的规律,进一步证明了两者的关系。

四、生产环境建议:网络延时控制在 0.1ms 以下

根据实验结论,在大数据、高并发的场景,给出以下优化建议:

核心建议:网络延时(RTT)控制在 0.1ms 以下

ping -f命令测客户端和 TDengine TSDB服务器之间的网络延时,要保证平均延时不超过 0.1ms。

为什么选这个数值呢?有两个原因:

  1. 性能保障:看 Test1(0.034ms)和 Test4(0.254ms)的数据,延时在 0.1ms 以下时,数据写入速度能保持在每秒 15 万条以上,接近最快速度的 80%,能满足大量数据写入的需求。
  2. 实际可行性:0.1ms 的延时是普通局域网的正常水平,通过网络优化就能达到这个目标。

ping -f “洪水 ping” 模式,通过减少系统开销和发包间隔,降低了单次 ping 的延时,能够更好的模拟高并发场景。

  1. 发包间隔差异:普通 ping 默认每秒发送 1 个数据包,系统需频繁切换进程状态,增加额外耗时;-f 参数无发包间隔,连续快速发送,减少进程切换开销。
  2. 系统资源分配:洪水 ping 优先级更高,系统会更集中地分配资源处理 ping 请求,减少等待耗时。
  3. 网络传输连续性:连续发包使网络传输更连贯,避免了普通 ping 中间隔导致的链路空闲后的重新初始化耗时。

辅助优化措施

  1. 硬件层面:让服务器和客户端尽量在同一个地方,比如都放在一个机房里,尽量避免跨交换机。
  2. 网络层面:定期用tc命令测网络延时,发现延时高、数据丢包等问题及时解决;给服务器的 IP 设固定路由。

总结

实验显示,网络延时从 0.034ms 增加到 2.1ms,数据写入速度衰减 80% 以上。因此,在大数据量、高并发的场景中,低网络延时是 TDengine TSDB 高效写入的前提。