C# MySqlBulkLoader 向MySQL数据库中插入数据速度慢

bbboy12008 2017-01-04 10:26:07
目前的业务是处理千万级的数据,将里面的字段拆分出来,插入到新表中,新表中的数据可能会过亿,在前期使用MySqlBulkLoader插入的时候,速度非常快,插入十万条数据少于1s,但是后期插入速度就非常缓慢了,插入十万条数据可能需要十分钟。
看了一下MySQL后台执行的线程,没有其他资源占用,只有LOAD DATA LOCAL INFILE在执行。
比较奇怪的是,有时候速度能提上来,但是一到白天工作期间就会慢,有大神能解释一下吗?
...全文
781 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbboy12008 2017-02-04
  • 打赏
  • 举报
回复
分不多,谢谢各位大神。
bbboy12008 2017-01-05
  • 打赏
  • 举报
回复
引用 15 楼 zjcxc 的回复:
开一个新库,建个空表测试一下,如果也是白天慢,那么瓶颈在服务器 如果空表也不稳定,那么说明是和其他某些操作有冲突,互相影响 如果空表快而且稳定,那么再把源表 copy 一份测试,如果这时候快了,那么说明是原表的使用和你的load 有冲突,如果也慢,说明问题就出在源表上,数据量大+索引的影响前面已经有人分析过了,通常是这个问题,考虑分区分表
嗯,在同一个数据库中建空表测试了,速度也是慢,但是换了个数据库建空表测试,速度就快了,应该是数据量大+索引导致的,谢谢大神。
zjcxc 2017-01-05
  • 打赏
  • 举报
回复
开一个新库,建个空表测试一下,如果也是白天慢,那么瓶颈在服务器 如果空表也不稳定,那么说明是和其他某些操作有冲突,互相影响 如果空表快而且稳定,那么再把源表 copy 一份测试,如果这时候快了,那么说明是原表的使用和你的load 有冲突,如果也慢,说明问题就出在源表上,数据量大+索引的影响前面已经有人分析过了,通常是这个问题,考虑分区分表
bbboy12008 2017-01-05
  • 打赏
  • 举报
回复
引用 13 楼 rucypli 的回复:
[quote=引用 8 楼 bbboy12008 的回复:] [quote=引用 6 楼 rucypli 的回复:] 查找下白天有哪些sql业务
会与MySQL表过大,导致插入慢,有这个关系吗?大神[/quote] 影响不会太大[/quote] 能具体解释下吗?大牛
闭包客 2017-01-04
  • 打赏
  • 举报
回复
引用 5 楼 bbboy12008 的回复:
[quote=引用 4 楼 closurer 的回复:] 【但是一到白天工作期间就会慢】,主机在做其他事情。 这个可能不是写法的问题了,硬件也有瓶颈。
这个主机是运行库,这么描述一下吧,数据库A中有表a1 a2,a1就是问题中描述的这个表,另外一个表a2也进行着同样的操作,这两个表问题一样,都是数据过亿,可能已经过十亿了,对相同的数据库,不同的表,进行这种load data local file操作,会彼此影响效率吗?[/quote] 效率肯定会彼此影响的。
闭包客 2017-01-04
  • 打赏
  • 举报
回复
数据库要维护索引,行数多索引的维护时间也会增加。
LongRui888 2017-01-04
  • 打赏
  • 举报
回复
引用 8 楼 bbboy12008 的回复:
[quote=引用 6 楼 rucypli 的回复:] 查找下白天有哪些sql业务
会与MySQL表过大,导致插入慢,有这个关系吗?大神[/quote] 数据量大了,插入肯定会慢,因为一般的表都会有主键索引,就是按照一个字段进行排序,因为插入数据,不像是文件中的复制那么简单,是要按照顺序来插入,所以当数据量大了,找到要插入在什么位置这个过程就会耗费更长的时间。 数据库中的数据一般都是存储在B+树中,数据越多,树的层数越高,而数据是插入到树的叶子节点,数据量上亿一般的层级大概是6-7层左右,也就是说,要找到插入数据的位置,大概需要进行至少6-7次的随机IO,然后找到了,在把数据插入到叶子节点。
bbboy12008 2017-01-04
  • 打赏
  • 举报
回复
引用 6 楼 rucypli 的回复:
查找下白天有哪些sql业务
会与MySQL表过大,导致插入慢,有这个关系吗?大神
bbboy12008 2017-01-04
  • 打赏
  • 举报
回复
引用 6 楼 rucypli 的回复:
查找下白天有哪些sql业务
您看我五楼的回复,因为这个是运行库,所以这个主机上有好几个数据库,每个数据库基本都有增删改查操作,但是我说的这个问题中的数据库,只有两个表,每个表都是大数据量表,而且每个表都在插入数据,load data local file,而且每个表都只有这一个操作
rucypli 2017-01-04
  • 打赏
  • 举报
回复
查找下白天有哪些sql业务
bbboy12008 2017-01-04
  • 打赏
  • 举报
回复
引用 4 楼 closurer 的回复:
【但是一到白天工作期间就会慢】,主机在做其他事情。 这个可能不是写法的问题了,硬件也有瓶颈。
这个主机是运行库,这么描述一下吧,数据库A中有表a1 a2,a1就是问题中描述的这个表,另外一个表a2也进行着同样的操作,这两个表问题一样,都是数据过亿,可能已经过十亿了,对相同的数据库,不同的表,进行这种load data local file操作,会彼此影响效率吗?
闭包客 2017-01-04
  • 打赏
  • 举报
回复
【但是一到白天工作期间就会慢】,主机在做其他事情。 这个可能不是写法的问题了,硬件也有瓶颈。
bbboy12008 2017-01-04
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
检查一下锁。
表被一个线程锁定了,就是这个load data local file,我可以这样理解吗?因为更新的优先级较高,所以在插入的时候表会被锁,这个应该没有问题吧?
bbboy12008 2017-01-04
  • 打赏
  • 举报
回复
表被一个线程锁定了,就是这个load data local file,我可以这样理解吗?因为更新的优先级较高,所以在插入的时候表会被锁,这个应该没有问题吧?
ACMAIN_CHM 2017-01-04
  • 打赏
  • 举报
回复
检查一下锁。
rucypli 2017-01-04
  • 打赏
  • 举报
回复
引用 8 楼 bbboy12008 的回复:
[quote=引用 6 楼 rucypli 的回复:] 查找下白天有哪些sql业务
会与MySQL表过大,导致插入慢,有这个关系吗?大神[/quote] 影响不会太大
bbboy12008 2017-01-04
  • 打赏
  • 举报
回复
引用 9 楼 yupeigu 的回复:
[quote=引用 8 楼 bbboy12008 的回复:] [quote=引用 6 楼 rucypli 的回复:] 查找下白天有哪些sql业务
会与MySQL表过大,导致插入慢,有这个关系吗?大神[/quote] 数据量大了,插入肯定会慢,因为一般的表都会有主键索引,就是按照一个字段进行排序,因为插入数据,不像是文件中的复制那么简单,是要按照顺序来插入,所以当数据量大了,找到要插入在什么位置这个过程就会耗费更长的时间。 数据库中的数据一般都是存储在B+树中,数据越多,树的层数越高,而数据是插入到树的叶子节点,数据量上亿一般的层级大概是6-7层左右,也就是说,要找到插入数据的位置,大概需要进行至少6-7次的随机IO,然后找到了,在把数据插入到叶子节点。[/quote] 说的很详细,谢谢大神

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧