mysql 压力测试之批量插入自增字段不连续问题

  • Gaps in auto-increment values for “bulk inserts”

With innodb_autoinc_lock_mode set to 0 (“traditional”) or 1 (“consecutive”), the auto-increment values generated by any given statement will be consecutive, without gaps, because the table-level AUTO-INC lock is held until the end of the statement, and only one such statement can execute at a time.

With innodb_autoinc_lock_mode set to 2 (“interleaved”), there may be gaps in the auto-increment values generated by “bulk inserts,” but only if there are concurrently executing “INSERT-like” statements.

For lock modes 1 or 2, gaps may occur between successive statements because for bulk inserts the exact number of auto-increment values required by each statement may not be known and overestimation is possible.

https://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-configurable.html

数据库机器上配置:

[email protected]:/etc/mysql$ grep -rn "innodb_autoinc_lock_mode" my.cnf

28:innodb_autoinc_lock_mode = 2

时间: 2024-10-22 10:33:19

mysql 压力测试之批量插入自增字段不连续问题的相关文章

mysql命令行批量插入100条数据命令

先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为";" 如何通过mysql命令行批量插入100条数据呢,可以在代码里实现,也可以通过命令行,也就是通过存储过程: delimiter $$create procedure myproc ()begindeclare num int ;set num = 1 ;while num < 100 d

MySQL事务回滚后自增键不连续

当在MySQL中使用事务,回滚后 ,会出现先自增id不连续的情况,解决:执行:          ALTER table tableName  AUTO_INCREMENT=1; 在回滚后都重置AUTO_INCREMENT的值. 注意:最好先了解MySQLl事务. 原文地址:https://www.cnblogs.com/donaldworld/p/10267370.html

mysql利用存储过程批量插入数据

最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能.由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍. 首先当然是建表: CREATE TABLE `fortest` (   `ID` INT(30) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,   `IP` VARCHAR(32) NOT NULL,   `OID` VARCHAR(15) DEFAULT NULL) 其次,构建存储过程: DELIMITER $$

Mysql 存储过程 处理批量插入具有一定特点的数据

本博文属于原创,转载请注明出处~! 首先,根据业务需求,需要往现有的所有第二级别的知识点中,添加数据 所有第二级别的数据如下: 上图中,cateCode就是代表级别代表,parentID实现链表树状级别 所有的第三第四级别的数据都是一样,其中sort是和当前id一致的,而parentID需要根据逻辑公式求出,下边是第三第四级别的插入sql数据 INSERT INTO `lc_knowledge_type` ( `createTime`, `modifyTime`, `child`, `image

Mysql游标使用 批量插入或更新数据

-- LOOP循环 CREATE PROCEDURE `test`.`new_procedure` () BEGIN -- 需要定义接收游标数据的变量 DECLARE a CHAR(16); -- 游标 DECLARE cur CURSOR FOR SELECT i FROM test.t; -- 遍历数据结束标志 DECLARE done INT DEFAULT FALSE; -- 将结束标志绑定到游标 DECLARE CONTINUE HANDLER FOR NOT FOUND SET do

mysql自增字段重排 mysql删除表后自增字段从1开始

MyISAM数据表 删除最大编号的记录后,该编号不可重用. 可在建表时可用"AUTO_INCREMENT=n"选项来指定一个自增的初始值. 可用alter table table_name AUTO_INCREMENT=n命令来重设自增的起始值. 其他: 由于删除了某些记录行,所以自增字段不连续了 1,3,4,5,7,10这样子 ------------------------- truncate命令是会把自增的字段还原为从1开始的,或者你试试把table_a清空,然后取消自增,保存,

mysql自增字段AUTO_INCREMENT重排或归零

由于删除了某些记录行,导致自增字段不连续了,重排或归零的方法: 方法1:truncate table 你的表名//这样不但重新定位自增的字段,而且会将表里的数据全部删除,慎用! 方法2:delete from 你的表名dbcc checkident(你的表名,reseed,0) //重新定位自增的字段,让它从1开始 方法3:如果你要保存数据,用phpmyadmin导出数据库,编辑sql文件,将其中的自增下一个id号改好,再导入. 方法4:MyISAM数据表可用alter table table_

MySQL自增id不连续问题

项目中有一张表是记录人员,在每个新用户调用接口认证通过了之后,会有一个往该表插入这个新用户信息的操作. 但是在线上环境中,发现该表的自增id不连续,且间隔都是差了2,比如上一个人的id是10,下一个人的id就是12,而在前端页面中,一个用户认证通过后,会调用3个接口,初步排查是MySQL并发操作导致了自增id不连续的情况 在这篇文章中,列举了导致自增id不连续的几个原因,这次遇到的就是第一种情况,因为个人的信息中我设置了唯一索引: https://www.jianshu.com/p/957f60

MYSQL开发性能研究&mdash;&mdash;批量插入的优化措施

一.我们遇到了什么问题 在标准SQL里面,我们通常会写下如下的SQL insert语句. INSERT INTO TBL_TEST (id) VALUES(1);   很显然,在MYSQL中,这样的方式也是可行的.但是当我们需要批量插入数据的时候,这样的语句却会出现性能问题.例如说,如果有需要插入100000条数据,那么就需要有100000条insert语句,每一句都需要提交到关系引擎那里去解析,优化,然后才能够到达存储引擎做真的插入工作. 正是由于性能的瓶颈问题,MYSQL官方文档也就提到了使