大佬们 在用load data加载数据,为啥tidbserver的磁盘利用率会升高

来自 @h5n1 的问题 佬们 在用load data加载数据,为啥tidbserver的磁盘利用率会升高

来自 @meditator 的回复:

在哪里load data?

来自 @db_user 的回复:
analyze确实很影响下推啊,之前调到一个小时的间隔,观察了一些天,确实影响不大了,也侧面反映了这个参数是好用的,之前记得有谁说过这个参数不好用

来自 @h5n1 的回复:

远端 load的
前面平的那个是10个load一起起来的额,后来停了,一个个起的

来自 @meditator 的回复:

嗯,理论上 tidb-server只会用到计算资源,iotop看看

ssd吗? io 调度策略是什么

来自 @db_user 的回复:

正常load data得走tidb这层吧,不是tikv的

来自 @h5n1 的回复:

十几块的SAS盘raid10


上面还有个mysql ,mysql是5分钟插入一批数据
这些tmp路径也不是这些磁盘上的

来自 @meditator 的回复:

用户可以使用 LocalOpt 参数来指定导入的数据文件位于客户端或者服务端。目前 TiDB 只支持从客户端进行数据导入,因此在导入数据时 LocalOpt 应设置成 Local

是不是读取csv文件的产生的io?

来自 @db_user 的回复:

tidb的load data还没有,不过按照mysql来理解,远端load data local应该会有个拽数据的过程

来自 @h5n1 的回复:

csv
/dev/sda 还是系统盘,会往tmpdir写东西吗

来自 @meditator 的回复:

tidb这块不知道是不是和mysql一样的,如果跟mysql一样的话,理论上不会产生IO,直接读取文本,绕过sql解析,然后直接生成数据块。
tidb 没法像mysql一样 生成结构化的数据块

https://docs.pingcap.com/zh/tidb/stable/sql-statement-load-data

官方文档 只是说兼容mysql语法,内部实现跟mysql 不一样



IO产生确实是swap问题。 tidb resource_control 设置内存大小64G ,测试了3次,第一次9:45-9:55 tidb_dml_batch_size=50W 刚跑了1分钟开始swap,单批次事务量大,提交慢,最后oom。 第二次10:45-10:48, 关闭swap,tidb_dml_batch_size=50W 跑了1分多钟就oom了。第三次10:50开始 tidb_dml_batch_size=1w tidb内存比较平稳

生产环境配置还是严格按照官方建议来配置,避免swap和tidb oom还是要控制事务的大小。另外这几个集群都是sas盘提交也比较慢。