`
huangyongxing310
  • 浏览: 494479 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

mysql提高insert into 插入速度的方法

 
阅读更多
mysql提高insert into 插入速度的方法


innodb_flush_log_at_trx_commit

就是说设为1时:会在每个事务提交后会执行往磁盘写日志的操作。设为0或2可减少日志对磁盘IO的负担。0表示每秒往磁盘写一次日志,2表示每次事务都往内存提交日志,但每秒往磁盘仅写入一次。现在想想为什么之前插入这么慢,就是因为每个inset完成后都往磁盘写日志,导致占满了磁盘IO(我观察了磁盘IO,参数设为1的时候磁盘占用时间保持100%)

插入速度只有20-30 条/秒,后来查资料后,将MySQL的1个参数:innodb_flush_log_at_trx_commit,1改为了0(修改方法,可以直接修改my.ini(windows)/my.cnf(linux)中的对应参数,似乎用命令直接设置没有效果),插入速度就提升到了3000+每S,

更新的速度会比插入的速度快很多。本地测试发现插入40-50/s,更新在200-250/s


mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_flush_log%';
临时改:set global innodb_flush_log_at_trx_commit=2;重启数据库后失效


加大mysql配置中的 bulk_insert_buffer_size,这个参数默认为8M


本地测试结果:
innodb_flush_log_at_trx_commit=0时,20个线程,20的连接池,平均5000/s. 2500~7500.
innodb_flush_log_at_trx_commit=1时,20个线程,20的连接池,平均420/s. 250~740.
innodb_flush_log_at_trx_commit=2时,20个线程,20的连接池,平均2700/s. 2000~3500.


本地测试结果(SSD):
innodb_flush_log_at_trx_commit=0时,20个线程,20的连接池,平均7000/s. 5000~8000.
innodb_flush_log_at_trx_commit=1时,20个线程,20的连接池,平均5000/s. 4000-6000.
innodb_flush_log_at_trx_commit=2时,20个线程,20的连接池,平均4000/s. 2000-4500.


要提高写入速度可以使用批量写入的方式进行提高:
一个客户端进行测试:
INSERT test (id,name,value,sex,createDate)VALUES(UUID(),'xingxingxingxing','huangyongxinghuangyongxing',71,NOW());

1条插入:48条/s
10条插入:400条/s
20条插入:700条/s
40条插入:1350条/s
120条插入:3500条/s
200条插入:5500条/s
240条插入:7000条/s
480条插入:11000条/s
960条插入:15000条/s

在系统中可以使用队列的方式先保存下来,另一个线程进行获取并批量写入







https://www.cnblogs.com/snailmanlilin/p/7017137.html(MySQL插入10万数据时间(结论:最快14.967s,每秒插入6681条))

[url]https://blog.csdn.net/hwhua1986/article/details/53501882 [/url](insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决)

https://blog.csdn.net/codepen/article/details/52160715(有关mysql的innodb_flush_log_at_trx_commit参数)

https://blog.csdn.net/thundermeng/article/details/50448614(innodb_flush_log_at_trx_commit和sync_binlog参数详解)
























分享到:
评论

相关推荐

    MYSQL SELECT INTO 和 INSERT INTO SELECT

    MySQL作为一种广泛使用的数据库管理系统,提供了多种用于数据复制的方法,其中`SELECT INTO`和`INSERT INTO SELECT`是两种非常实用的数据复制手段。本文将详细介绍这两种语法的具体用法及其应用场景。 #### 二、...

    解析SQL语句中Replace INTO与INSERT INTO的不同之处

    总结来说,`INSERT INTO` 和 `REPLACE INTO` 的主要区别在于处理冲突的方式:`INSERT INTO` 遇到冲突时会失败,而 `REPLACE INTO` 则会删除冲突的旧行再插入新行。在处理需要确保唯一性的数据时,`REPLACE INTO` 是...

    PHP+MySQL之Insert Into数据插入用法分析

    本文将详细分析`INSERT INTO`的使用方法,并结合PHP如何处理这些插入操作。 首先,`INSERT INTO`语句的基本格式如下: ```sql INSERT INTO table_name VALUES (value1, value2,....) ``` 这里,`table_name`是你...

    mysql如何实现 如果存在就update更新,不存在再insert插入.zip

    在MySQL数据库中,如果你需要执行一个操作,即当数据存在时进行更新,如果不存在则进行插入,你可以使用`INSERT INTO...ON DUPLICATE KEY UPDATE`语句。这个功能强大的语句结合了`INSERT`和`UPDATE`操作,允许你在...

    解析MySQL中INSERT INTO SELECT的使用

    MySQL中的`INSERT INTO SELECT`语句是一种非常实用的数据库操作,它允许你从一个或多个数据源中选择数据,并将其插入到另一个表中。这种操作在数据迁移、数据整合或者生成汇总报告时非常常见。下面将详细介绍`INSERT...

    insert into

    "Insert Into"是SQL语言中的一个关键操作,用于向数据库表中插入新的数据记录。这个命令的基本语法结构是`INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);`,其中`table_name`是你要...

    MySQL Insert Into 添加数据.docx

    MySQL Insert Into 添加数据 MySQL Insert Into 语句用于向数据表中添加数据记录。Insert Into 语句的基本语法是:INSERT INTO tb_name VALUES (value1, value2,...)。这个语法表示向表中所有的字段按顺序都插入...

    mysql大批量数据插入

    使用批量插入语句是实现 MySQL 大批量数据插入的有效方法,能够提高数据插入的速度和效率。 知识点: 1. MySQL 大批量数据插入的需求和挑战 2. 使用批量插入语句实现大批量数据插入 3. 批量插入语句的格式和使用...

    提高mysql插入数据的速度.pdf

    - 尽管这不在文档中直接提及,但提升磁盘I/O性能对于提高MySQL插入速度同样重要。这包括优化文件系统、使用更快的磁盘或者使用SSD等措施。 9. 使用第三方工具监控和管理: - 使用如Unix的top、Windows的任务管理...

    insert和select结合实现”插入某字段在数据库中的最大值+1″的方法

    INSERT INTO 表一 (column1, column2, column3, column4) select column1, column2, column3, column4 from 表二 问题二 表中插入数据时,某一字段取数据库中该字段的最大值,并+1, 在表中插入数据时,某一字段...

    MySQL中REPLACE INTO和INSERT INTO的区别分析

    在MySQL数据库中,`REPLACE INTO` 和 `INSERT INTO` 是两种不同的数据插入语句,它们各有其特定的用途和行为。理解它们的区别对于优化数据库操作至关重要。 首先,`INSERT INTO` 是最基本的数据插入语句,它用于在...

    mssql insert into 和insert into select性能比较

    本文主要探讨了两种不同的插入数据的方法:`INSERT INTO...VALUES` 和 `INSERT INTO...SELECT`,并以MSSQL(Microsoft SQL Server)为例,分析它们在性能上的差异。 首先,`INSERT INTO...VALUES` 语句用于向表中...

    mysql的插入问题 怎么获得自动增长的ID

    ### MySQL的插入问题:如何获取自动增长的ID 在MySQL中,经常需要用到自动增长的ID字段作为表的主键,特别是在频繁进行数据插入操作时。本文将深入探讨以下几个方面: 1. **理解自动增长ID的工作原理** 2. **在...

    MySQL创建存储过程批量插入10万条数据

    MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...

    Mybatis 3+Mysql 实现批量插入

    综上所述,利用MyBatis结合MySQL实现批量插入不仅可以大幅提高数据处理效率,还能有效降低系统资源消耗,是数据库操作中不可或缺的一项技能。通过上述详细讲解,相信读者已经对如何实现批量插入有了清晰的理解。

    mysql如何优化插入记录速度

    通过一次`INSERT`语句插入多条记录,例如`INSERT INTO table_name VALUES(….),(….),(….)`,能显著提高效率。这种方法减少了与数据库交互的次数,从而减少开销。 4. **使用LOAD DATA INFILE**: 对于大批量数据...

    mysql中insert与select的嵌套使用方法

    在MySQL数据库中,`INSERT` 与 `SELECT` 的嵌套使用是一种强大的功能,它允许我们在一条SQL语句中从一个或多个数据源提取数据并将其插入到目标表中。这种技术尤其适用于需要合并不同表的数据或者创建数据备份的情况...

    MySQL的Replace into 与Insert into on duplicate key update真正的不同之处

    MySQL中的`REPLACE INTO`和`INSERT INTO ... ON DUPLICATE KEY UPDATE`是两种处理数据冲突的方法,它们在处理已有键值冲突时的行为有所不同。这两种语句都是在插入新记录时,如果发现存在相同的唯一键值,则采取不同...

Global site tag (gtag.js) - Google Analytics