热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

目前的业务是处理千万级的数据,将里面的字段拆分出来,插入到新表中,新表中的数据可能会过亿,在前期使用MySqlBulkLoader插入的时候,速度非常快,插入十万条数据少于1s,但是后期插入速度就非常
目前的业务是处理千万级的数据,将里面的字段拆分出来,插入到新表中,新表中的数据可能会过亿,在前期使用MySqlBulkLoader插入的时候,速度非常快,插入十万条数据少于1s,但是后期插入速度就非常缓慢了,插入十万条数据可能需要十分钟。
看了一下MySQL后台执行的线程,没有其他资源占用,只有LOAD DATA LOCAL INFILE在执行。
比较奇怪的是,有时候速度能提上来,但是一到白天工作期间就会慢,有大神能解释一下吗?

17 个解决方案

#1


检查一下锁。

#2


表被一个线程锁定了,就是这个load data local file,我可以这样理解吗?因为更新的优先级较高,所以在插入的时候表会被锁,这个应该没有问题吧?

#3


引用 1 楼 ACMAIN_CHM 的回复:
检查一下锁。


表被一个线程锁定了,就是这个load data local file,我可以这样理解吗?因为更新的优先级较高,所以在插入的时候表会被锁,这个应该没有问题吧?

#4


【但是一到白天工作期间就会慢】,主机在做其他事情。

这个可能不是写法的问题了,硬件也有瓶颈。

#5


引用 4 楼 closurer 的回复:
【但是一到白天工作期间就会慢】,主机在做其他事情。

这个可能不是写法的问题了,硬件也有瓶颈。


这个主机是运行库,这么描述一下吧,数据库A中有表a1 a2,a1就是问题中描述的这个表,另外一个表a2也进行着同样的操作,这两个表问题一样,都是数据过亿,可能已经过十亿了,对相同的数据库,不同的表,进行这种load data local file操作,会彼此影响效率吗?

#6


查找下白天有哪些sql业务

#7


引用 6 楼 rucypli 的回复:
查找下白天有哪些sql业务


您看我五楼的回复,因为这个是运行库,所以这个主机上有好几个数据库,每个数据库基本都有增删改查操作,但是我说的这个问题中的数据库,只有两个表,每个表都是大数据量表,而且每个表都在插入数据,load data local file,而且每个表都只有这一个操作

#8


引用 6 楼 rucypli 的回复:
查找下白天有哪些sql业务


会与MySQL表过大,导致插入慢,有这个关系吗?大神

#9


引用 8 楼 bbboy12008 的回复:
Quote: 引用 6 楼 rucypli 的回复:

查找下白天有哪些sql业务


会与MySQL表过大,导致插入慢,有这个关系吗?大神


数据量大了,插入肯定会慢,因为一般的表都会有主键索引,就是按照一个字段进行排序,因为插入数据,不像是文件中的复制那么简单,是要按照顺序来插入,所以当数据量大了,找到要插入在什么位置这个过程就会耗费更长的时间。

数据库中的数据一般都是存储在B+树中,数据越多,树的层数越高,而数据是插入到树的叶子节点,数据量上亿一般的层级大概是6-7层左右,也就是说,要找到插入数据的位置,大概需要进行至少6-7次的随机IO,然后找到了,在把数据插入到叶子节点。

#10


数据库要维护索引,行数多索引的维护时间也会增加。

#11


引用 5 楼 bbboy12008 的回复:
Quote: 引用 4 楼 closurer 的回复:

【但是一到白天工作期间就会慢】,主机在做其他事情。

这个可能不是写法的问题了,硬件也有瓶颈。


这个主机是运行库,这么描述一下吧,数据库A中有表a1 a2,a1就是问题中描述的这个表,另外一个表a2也进行着同样的操作,这两个表问题一样,都是数据过亿,可能已经过十亿了,对相同的数据库,不同的表,进行这种load data local file操作,会彼此影响效率吗?


效率肯定会彼此影响的。

#12


引用 9 楼 yupeigu 的回复:
Quote: 引用 8 楼 bbboy12008 的回复:

Quote: 引用 6 楼 rucypli 的回复:

查找下白天有哪些sql业务


会与MySQL表过大,导致插入慢,有这个关系吗?大神


数据量大了,插入肯定会慢,因为一般的表都会有主键索引,就是按照一个字段进行排序,因为插入数据,不像是文件中的复制那么简单,是要按照顺序来插入,所以当数据量大了,找到要插入在什么位置这个过程就会耗费更长的时间。

数据库中的数据一般都是存储在B+树中,数据越多,树的层数越高,而数据是插入到树的叶子节点,数据量上亿一般的层级大概是6-7层左右,也就是说,要找到插入数据的位置,大概需要进行至少6-7次的随机IO,然后找到了,在把数据插入到叶子节点。


说的很详细,谢谢大神

#13


引用 8 楼 bbboy12008 的回复:
Quote: 引用 6 楼 rucypli 的回复:

查找下白天有哪些sql业务


会与MySQL表过大,导致插入慢,有这个关系吗?大神

影响不会太大

#14


引用 13 楼 rucypli 的回复:
Quote: 引用 8 楼 bbboy12008 的回复:

Quote: 引用 6 楼 rucypli 的回复:

查找下白天有哪些sql业务


会与MySQL表过大,导致插入慢,有这个关系吗?大神

影响不会太大


能具体解释下吗?大牛

#15


开一个新库,建个空表测试一下,如果也是白天慢,那么瓶颈在服务器
如果空表也不稳定,那么说明是和其他某些操作有冲突,互相影响
如果空表快而且稳定,那么再把源表 copy 一份测试,如果这时候快了,那么说明是原表的使用和你的load 有冲突,如果也慢,说明问题就出在源表上,数据量大+索引的影响前面已经有人分析过了,通常是这个问题,考虑分区分表

#16


引用 15 楼 zjcxc 的回复:
开一个新库,建个空表测试一下,如果也是白天慢,那么瓶颈在服务器
如果空表也不稳定,那么说明是和其他某些操作有冲突,互相影响
如果空表快而且稳定,那么再把源表 copy 一份测试,如果这时候快了,那么说明是原表的使用和你的load 有冲突,如果也慢,说明问题就出在源表上,数据量大+索引的影响前面已经有人分析过了,通常是这个问题,考虑分区分表


嗯,在同一个数据库中建空表测试了,速度也是慢,但是换了个数据库建空表测试,速度就快了,应该是数据量大+索引导致的,谢谢大神。

#17


分不多,谢谢各位大神。

推荐阅读
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 本文介绍如何在将数据库从服务器复制到本地时,处理因外键约束导致的数据插入失败问题。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • MySQL Server 8.0.28 升级至 8.0.30 的详细步骤
    为了修复安全漏洞,本文档提供了从 MySQL Server 8.0.28 升级到 8.0.30 的详细步骤,包括备份数据库、停止和删除旧服务、安装新版本以及配置相关环境变量。 ... [详细]
  • 在 CentOS 7 环境中使用 MySQL 5.6 镜像启动数据库时遇到权限问题,本文将详细探讨并提供解决方案。 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • SQL 连接详解与应用
    本文详细介绍了 SQL 连接的概念、分类及实际应用,包括内连接、外连接、自连接等,并提供了丰富的示例代码。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
author-avatar
不要破网名_329
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有