时间/资源估算
ETA (预计完成时间) 估算
源端
- 全量过程, 公式为:
总时间 = 已用时间 / 发送到目标端的行数 * 总行数 其中,总行数 = (select count(*) ...) 预计完成时间 = 总时间 - 已用时间 即:预计完成时间 = 剩余行数 / 当前发送速率
- 增量过程, ETA 一直为
0s
目标端
- 全量过程. 公式为:
总时间 = 已用时间 / 已写入目标端的行数 * 总行数 预计完成时间 = 总时间 - 已用时间 即:预计完成时间 = 剩余行数 / 当前写入速率
- 增量过程, ETA 一直为
0s
内存占用估算
内存占用估算 = RowSize * ChunkSize * QueueSize * 内存占用系数
其中:
- RowSize为数据行的平均大小 (字节)
- ChunkSize为配置项
- QueueSize为传输队列长度, 硬编码为24
- 内存占用系数 测量约为 常量3.2
关于大事务
大事务指传输、处理数据量较大的事务,一般由DML组成。DDL事务(QueryEvent)不会太大,尽管某些DDL需要较长的执行时间。
对于一个多行的大事务,dtle会按行分开处理、传输并执行(但在目标端仍作为一个事务提交)。
当一个job处理大事务时,需要等待该段数据在目标端执行完毕才会获取下一批数据。
当同时处理大事务的job数量达到 big_tx_max_jobs
时,所有job都会进入等待模式。
为了避免MySQL源端超时,等待时间的上限是 @@net_write_timeout / 2