mysql大批量数据插入技巧

最近在做MySQL大批量数据的测试,就简单总结一下遇到的问题

操作方法

  • 01

    首先我是简单的写了一个mysql的循环插入数据的SP,具体如下:

  • 02

    这是插入100W数据的过程和结果,可以看到是换了55min +20S约3320秒(约300rows/s),看到之后我是只崩溃,就在网上查了些提速的方法: 0. 最快的当然是直接 copy 数据库表的数据文件(版本和平台最好要相同或相似);1. 设置 innodb_flush_log_at_trx_commit = 0 ,相对于 innodb_flush_log_at_trx_commit = 1 可以十分明显的提升导入速度;2. 使用 load data local infile 提速明显;3. 修改参数 bulk_insert_buffer_size, 调大批量插入的缓存;4. 合并多条 insert 为一条: insert into t values(a,b,c),  (d,e,f) ,,,5. 手动使用事物;

  • 03

    而我创建的是Innodb类型的表,分了128个分区。而我依照以上的方法,设置如下:

  • 04

    可以明显的看到插入百万数据是100S左右,速度提升了33倍之多。 速度是提升了不少,那就加大插入的数据量,提升10倍,即插入千万的数据量,具体的SP如下:

  • 05

    可以看到时间差不多是1200s左右,因为字段加长了,可能也有影响插入的速度。 为了具体验证,就按千万行插入,字段的长度为1000字节,来查看结果,具体的SP和结果如下:

  • 06

    varchar字段 字段的限制在字段定义的时候有以下规则: a) 存储限制 varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。 b) 编码长度限制 字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;   字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。   对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。   若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。 c) 行长度限制   导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示   ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to    change some columns to TEXT or BLOBs。

  • 07

    再次升级插入的数据量,提升10倍,看插入的时间及占用的内存,字段的字节同样为1000,具体的SP和结果如下:

  • 08

    从上图可以清楚的看到,插入1亿条数据的时间为5hours +20 min+ 56s=19256s,平均插入的条数为(5193 rows/s)。根上次插入1千万条的时间差不多,再看所耗磁盘空间,用了98G的空间,跟上次插入千万条数据时的(26G-17G=9G)也是成线性关系的。按照本机500G的磁盘空间,存储1行1K字节大小的数据,本机可以存储理想极限情况下为5亿条数据,保守为4~4.5亿左右合适,以防其他的应用或者数据库的UNDO,索引空间占用。 最后再看一次查询的时间,上次插入百万数,查询数据量的时间

  • 09

    因为创建了索引,在查百万级的数据量时,时间是1秒左右,在数据量上升到千万时,查询1亿5百万时,时间为3Min 30S,再插入1亿数据,查询数据量,时间达到27min 43s,可见,不是线性关系,是几何级增加的。 现在描述集群环境的测试 集群:32G内存 ,500G硬盘,3台虚拟机也就是3个节点:188.188.2.181(主节点,数据节点和SQL节点)、188.188.2.182(数据节点和SQL节点)和188.188.2.183(数据节点和SQL节点)。/root目录分区磁盘空间200G(原先默认的是50G)、插入的数据量为8000KW,所占磁盘空间为下图

(0)

相关推荐

  • Excel2007教程:数据输入技巧

    Excel2007基础教程:数据输入技巧 通过使用一些有用的小技巧,可以简化将信息输入Excel 工作表的过程,同时还可以更快地完成所需工作。具体方法如下所述。 1 .输入数据后自动移动单元格指针 默 ...

  • excel提取空格前后数据小技巧

    excel怎样提取空格两边的数据呢?很多时候我们需要用excel提取空格左边或右边的数据,现在我们便来分享一下excel提取空格前后数据的技巧。 一、excel分列。Excel中分列是对某一数据按一定 ...

  • Win7系统如何使用CMD命令导出MySQL表数据

    Win7系统如何使用CMD命令导出MySQL表数据 操作方法: 1.打开始菜单中运行命令提示符: 2.然后输入命令: 假设导出tomtopportal数据库下的t_article_base表数据到E: ...

  • 如何在2016版Excel中将整行数据插入至指定行?

    相信很多小伙伴在日常办公中都会用到Excel,在其中如何才能将整行数据移动到指定行呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 首先,在Excel中打开我们要进行操作的表格,然后找到我们要移 ...

  • wps表格快速录入数据的技巧

    今天给大家介绍wps表格快速录入数据的几个小技巧,希望对大家有用.技巧一:双击快速填充1. 双击填充法主要用于需要填充较长序号.日期时.我们一般会手动输入或填充柄向下拉输入,比较繁琐.2. 先将填充日 ...

  • 虚拟主机如何导入MSSQL或mysql的数据

    虚拟主机如何导入MSSQL或mysql的数据,是每一位站长所关心的问题,在此,小编以美国主机Bluehost为例为大家详细介绍, 虚拟主机如何导入MSSQL或mysql的数据详细步骤如下: 1.首先点 ...

  • Excel数据输入技巧

    Excel是一款大众很熟悉的办公软件.在数据处理方面它操作简便而又功能强大,已经成为我们工作学习中不可缺少的工具.这里介绍一些关于Excel录入数据的技巧,使我们工作更加高效快捷. 操作方法 01 当 ...

  • 笔记本画了无法开机,急用里面的数据该怎么办呢? 取回电脑内数据的技巧

    这里介绍一个笔记本电脑损坏无法开机,如何取回电脑内的数据。此种情况,一般适用于可以判断笔记本硬盘正常无故障,但是笔记本电脑又因主板损坏或者CPU损坏等其他原因引起的笔记本电脑无法开机。此种办法可以快速 ...

  • Word 2007中选择链接和插入技巧

    当要在Word 2007中使用其他程序中的数据时,有两种选择:链接或嵌入。事实上,尽管使用的术语不同,但是含义是相似的。例如,将图片插入到Word2007文档中时可以使用这些选项。定位到图片后,利用“ ...