批量插入数据问题

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
想请问一下,做了一个测试,用写的python代码跑批(单纯的insert),单张表写入30亿数据,目前写了4亿数据,就已经很慢了(每20w条需要15-20秒),想问下有什么优化点,或者有没有好的工具推荐。注:磁盘是普通的ssd,测试了没有官方要求的那么好)
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

数据是什么格式的? csv的话可以用 lightning 导入

可以转换成csv的,之前用过lighting,但是都要手动去转换成csv然后执行lighting比较麻烦,所以想问下有没有其他好的方法

看下jdbc连接上
useServerPrepStmts和cachePrepStmts
设置成true了吗
注意 prepStmtCacheSqlLimitprepStmtCacheSize 这个也要设置大一点,不然光上面俩值设置为true也不好使
使用了 batch吗?没用用上,
用了记得设置 rewriteBatchedStatements = true

1 个赞

你这有可能是有写热点了吧,create table的时候加了拆分region的参数吗,如果没有可以使用splite 来拆分现有的region,然后继续插入看看

1 个赞

那现在的数据是怎么插入的? 就是单纯 python 脚本根据一定逻辑生成insert 语句然后插入吗?

看看有没有热点问题,仅仅是写入的话,不会变慢的…

磁盘不够好,那得牺牲写入速度了,只能按量写入,写得太频繁,磁盘IO 肯定hold 不住了

集群硬件配置介绍下,几个机器是否虚拟机

麻烦也用lightning好,insert跑不过它

还真没batch,我试试

自建机房的虚拟机,看了磁盘不太行,确实是磁盘io顶不住了,

建了一个分区表,


使用的随机uuid然后key分区的