首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL Insert语句单个批次数量过多导致CPU性能问题分析

【异常期间线程处理情况】 下图是当时生产环境异常时抓取信息,该事务正在执行insert,已经执行5秒,线程运行在innodb内核,状态是thread declared inside InnoDB,还有...【哪些SQL执行慢】 从正在执行SQL,看到了insert慢查询SQL语句,统计了下这句SQL批量插入大于342条记录(SQL被截断) 【批量insert性能测试】 类似这种批量insert...】 对于MySQL需要插入大量数据时,每次单条insert性能较差,为了提升insert性能,我们采用了每批次多条记录同时insert方法。...但当批次增大到一定数量时,在高并发访问情况下,单个批次执行性能会出现较大下降,出现大量慢查询,并发线程堆积,CPU上升出现瓶颈, innodb层并发线程处理被慢查询阻塞,后面只能通过限流来缓解性能问题...根据上面的测试结论,建议控制热表单个批次insert记录条数,最好单个批次控制在10条左右(因为即使调大到50条,插入性能没有大提升,在高并发场景下,首先要保证当前SQL执行性能)。

1K10

sqlselect into用法_sql语句insert into用法

大家好,我是架构君,一个会写代码吟诗架构师。今天说一说sqlselect into用法_sql语句insert into用法,希望能够帮助大家进步!!!...1.select into from语句: 注意内容:要求目标表A不存在,因为在插入时会自动创建表A,并将B中指定字段数据复制到A。...示例如下: select * into A from B 2.insert into select 语句: 注意: (1)要求目标表B必须存在,并且字段field,field1...也必须存在 (2)注意...B主键约束,如果B有主键而且不为空,则 field1, field2...必须包括主键 (3)注意语法,不要加values,和插入一条数据sql混了,不要写成:insert into B (field...,... from A 或 insert into B select * from A 今天文章到此就结束了,感谢您阅读,Java架构师必看祝您升职加薪,年年好运。

2K30
您找到你想要的搜索结果了吗?
是的
没有找到

40 | insert 语句

有一些特殊insert语句,在执行过程需要加锁,本文针对这些特殊都insert语句进行展开。...A insert 语句执行。...它执行流程也比较简单,从表 t 按照索引 c 倒序,扫描第一行,拿到结果写入到表 t2 。 整条语句扫描行数是 1。...也就是说,这个语句会导致在表 t 上做全表扫描,并且会给索引 c 上所有间隙都加上共享 next-key lock。所以,这个语句执行期间,其他事务不能在这个表上插入数据。...至于这个语句执行为什么需要临时表,原因是这类一边遍历数据,一边更新数据情况,如果读出来数据直接写回原表,就可能在遍历过程,读到刚刚插入记录(因为可重复读隔离级别下,事务是可以看到自己刚刚修改数据

76910

MySQL插入语句(Insert)几种使用方式

注意:insert这种简写方式虽然非常简单,但是Values后面的值必须和表类顺序对应,且类型要保持一直,即使表某一个列不需要值也必须赋值为null,比如我们主键id设置是递增实际上是不用设置值...3.REPLACE INSERT语句语句作用是当我们在插入一条数据时,如果此条已经存在,那么先删除原来存在数据再添加插入数据,如果不存在那么直接插入新数据。...4.INSERT IGNORE INTO 语句语句作用是如果插入数据已经存在那么就忽略插入数据(也就是不改变原来数据),如果不存在则插入新数据。...6.INSERT SELECT语句 1.此语句作用是将SELECT语句结果插入表,可实现数据迁移。...查看被插入所有数据 ? 执行INSERT SELECT语句并查看结果 ?

2.2K30

insert语句加锁情况分析

// insert语句加锁情况分析 // 今天分享内容是MySQL里面insert语句加锁情况,废话就不多说了,直接从线上例子开始吧。...因此,为了避免这种情况发生,MySQL会在session 1对表t添加了(-无穷,1]之间next-key锁,来避免session2insert语句并发插入。...语句执行完成之后才释放自增锁; b、当该值为1时候,普通insert语句,自增锁在申请之后马上释放,insert into select语句,自增锁还是要等语句结束之后才释放 c、该值为2时候,所有的申请自增主键动作都是申请完成之后就释放锁...,第二次申请2个自增id 3、2个id用完了,第三次申请4个自增id 而在自增主键生成过程,其他事务是不能向目标表插入数据。...=1,所以这个锁是事务级别的,当满足selectwhere条件值足够多时候,其他事务要进行insert操作,会产生table_log表上auto inc锁等待。

2.2K21

MySQL实战Insert语句使用心得总结

喏 → MySQL专栏目录 | 点击这里   提到MySQLInsert语句,你肯定不陌生,或许已经张口就来:不就是insert into table values(xxx,xxx,xxx)嘛!...没错,但在实战,根据不同需求场景,插入操作在语法、执行方式上用法多种多样。   ...三、REPLACE INTO语法“坑” 一、Insert几种语法 1-1.普通插入语句 INSERT INTO table (`a`, `b`, `c`, ……) VALUES ('a', 'b'...,INSERT语句将插入新记录,否则,当前username='chenhaha'记录将被更新,更新字段由UPDATE指定。...情景示例:这张表存每个客户最近一次交易订单信息,要求保证单个用户数据不重复录入,且执行效率最高,与数据库交互最少,支撑数据库高可用。

1.2K20

一条诡异insert语句

作者 | 天士梦 来源 | https://www.cnblogs.com/cchust/p/4601536.html 问题背景 有同事反馈在mysql上面执行一条普通insert语句,结果报错,...为了方便说明,我将测试例子表和语句简化,但不影响问题重现。...但是,即使是字符集转换,也不应该导致插入报错,因为语句中文字符“校园网"都是普通汉字,UTF8->GBK不应该存在问题。...那我们在回过头来看看insert语句,唯一特殊是使用了concat和char两个函数。会不会跟这两个函数有关系?...由于目标表字符集是GBK,因此在入库时,还会发生一次binary到GBK转码,“校园网”二级制编码是E6A0A1 E59BAD E58DA1,在转码过程,由于GBK字符集只包含一个字节(编码值<128

30530

一条诡异insert语句

问题背景 有同事反馈在mysql上面执行一条普通insert语句,结果报错, execute failed due to >>> Incorrect string value: '\xA1;offl...为了方便说明,我将测试例子表和语句简化,但不影响问题重现。...但是,即使是字符集转换,也不应该导致插入报错,因为语句中文字符“校园网"都是普通汉字,UTF8->GBK不应该存在问题。...那我们在回过头来看看insert语句,唯一特殊是使用了concat和char两个函数。会不会跟这两个函数有关系?...由于目标表字符集是GBK,因此在入库时,还会发生一次binary到GBK转码,“校园网”二级制编码是E6A0A1 E59BAD E58DA1,在转码过程,由于GBK字符集只包含一个字节(编码值<128

57430

insert into 语句四种写法

【特注】当 id 为自增,即 id INT PRIMARY KEY AUTO_INCREMENT 时,执行 insert into 语句,需要将除 id 外所有 field 列举出来(有没有感觉,好不方便...方式3.1、 INSERT INTO t2(field1,field2) SELECT colm1,colm2 FROM t1 WHERE …… 这里简单说一下,由于可以指定插入到 talbe2 列...,以及可以通过相对较复杂查询语句进行数据源获取,可能使用起来会更加灵活一些,但我们也必须注意,我们在指定目标表列时,一定要将所有非空列都填上,否则将无法进行数据插入,还有一点比较容易出错地方就是...,且 SELECT 后面的列顺序 必须和目标表定义顺序完全一致 才能完成正确数据插入,这是一个很容易被忽略地方,值得注意。...(参考:mysql数据库插入数据INSERT INTO SET优势) 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159651.html原文链接:https:

72930

Insert into select语句引发生产事故

事故发生经过。   由于数据数据库order_today数据量过大,当时好像有700W了并且每天在以30W速度增加。...所以上司命令xxx将order_today内部分数据迁移到order_record,并将order_today数据删除。这样来降低order_today表数据量。   ...出现原因   在默认事务隔离级别下:insert into order_record select * from order_today 加锁规则是:order_record表锁,order_today...[explain_result_no_index.png]   通过观察迁移sql执行情况你会发现order_today是全表扫描,也就意味着在执行insert into select from 语句时...tableB语句时,一定要确保tableB后面的where,order或者其他条件,都需要有对应索引,来避免出现tableB全部记录被锁定情况。

2.1K11

MySQLDML语句事务概念「建议收藏」

ML语句 知识要点 DML语句 插入行到表 删除表行 更新表行 控制事务 DML语句 DML:DATA MANIPULATION LANGUAGE(数据操纵语言),由INSERT...、UPDATE、DELETE等语句构成,用来修改表数据 INSERT语句 1.带VALUES子句INSERT语句 INSERT [INTO] tbl_name[(col_name,…)]...sum(amount) FROM penalties)); 注意:子查询必须放在单独小括号 7.一条INSERT语句可以插入多个行 示例:添加4个新球队 INSERT INTO teams...:总是由一条DCL语句构成 2.在MySQL,系统变量@@autocommit默认是打开,这意味着任何1条SQL语句都会开始一个事务语句执行完后事务自动结束。...事务所做全部工作被撤销,表数据不受事务操作影响 其它事务控制语句 SAVEPOINT identifier :保存点命令,用来在事务做一个标记,专门提供给rollback to语句使用

1.9K20

图解MySQL | MySQL insert 语句磁盘写入之旅

---- 一条 insert 语句在写入磁盘过程到底涉及了哪些文件?顺序又是如何? 下面我们用两张图和大家一起解析 insert 语句磁盘写入之旅。 图 1:事务提交前日志文件写入 ?...我们知道 InnoDB 会将数据页缓存至内存 buffer pool,所以 insert 语句到了这里并不需要立刻将数据写入磁盘文件,只需要修改 buffer pool 当中对应数据页就可以了。...buffer pool 数据页刷盘并不需要在事务提交前完成,其中交互过程我们会在下一张图中分解。...图 2:事务提交后数据文件写入 ? 旅途过程: 当 buffer pool 数据页达到一定量脏页或 InnoDB IO 压力较小 时,都会触发脏页刷盘操作。...insert buffer 也是 buffer pool 一部分,当 buffer pool 空间不足需要交换出部分脏页时,有可能将 insert buffer 数据页换出,刷入共享表空间中 insert

4.3K32

11g利用listagg函数实现自动拼接INSERT语句

一个表字段太多 我要写insert语句 一个个粘字段 好费劲。。。...记不清楚了,好像是侯松书中曾说,若超过256个字段记录,可能就会出现行链接,所以表字段多少还是要根据业务需求和非功能需求,综合考虑。...扯远了,我们继续说这个需求,现在有一张表,字段很多,要拼接插入SQL语句,方法其实很多,比如:复制“desc 表名”结果,然后放入UE编辑器编辑,再用替换功能拼接出字段间逗号可能是非常直接一种方法...甚至可以定制一些脚本可以自动化生成常用SQL语句。 总结: 1.借助user_tab_cols视图和11g新特性listagg函数,可以实现行列转换需求。...3.测试同事要求使用带列名INSERT语句,这点其实还是非常好,我不清楚开发是否这么做,因为若仅用INSERT INTO TABLE VALUES(…)来写,未来表字段有变更,很可能忘记改,就会导致

1.1K20

MySQL大事务导致Insert案例分析

【问题】 有台MySQL服务器不定时会出现并发线程告警,从记录信息来看,有大量insert慢查询,执行几十秒,等待flushing log,状态query end 【初步分析】 从等待资源来看,...并发线程升高时,有50多个线程卡在Stage_manager::enroll_for函数,处于group commit阶段 线程0x519c5940对应SQL语句如下,已经执行18秒 Stage_manager...简单来说,对于一个分组事务,是被leader线程去提交,其他线程处于排队等待状态,等待leader线程将该线程事务提交完成。...,发现日志存在2个15M和20M事务 查看日志明细,存在delete from事务删除语句,约包含23W条记录,ROW模式下删除23W条记录,会产生大约20M日志文件,刷盘时间较长,阻塞了同一个分组下其他事务提交...整表事务删除语句 【其他变通方案】 2、 Binlog 记录ROW模式下会产生大量日志,改为MIXED模式,理论上也可以解决问题 3、 更换性能好磁盘

50610

insert事务产生duplicate key error引发死锁分析

大概意思就是:insert会对插入成功行加上排它锁,这个排它锁是个记录锁,而非next-key锁(也不是gap锁了),不会阻止其他并发事务往这条记录之前插入记录。...如果insert 事务出现了duplicate-key error ,事务会对duplicate index record加共享锁。...这个共享锁在并发情况下是会产生死锁,比如有两个并发insert都对要对同一条记录加共享锁,而此时这条记录又被其他事务加上了排它锁,排它锁事务提交或者回滚后,两个并发insert操作是会发生死锁...4475是事务1 ,4480和4481分别是事务2和3,从innodb_locks表可以看出事务1是X记录锁,事务2和3是S记录锁,且这三个锁对应是同样记录,从innodb_lock_waits表可以看出事务...优化insert引起死锁: 1、从程序逻辑上处理,尽量不要在高并发下同时insert一条数据 2、如果非特殊需求修改为非唯一索引 3、通过数据库连接池做分发处理 4、并发插入时,不在一个事务内进行再次事务提交

3K50

INSERT...SELECT语句对查询表加锁吗

加锁目的是确保事务在读取数据时能够看到一个一致数据快照。如果在执行 INSERT ... SELECT 时不加锁,那么可能会出现以下情况: 不可重复读:如果在 INSERT ......SELECT 执行期间,另一个事务修改了被查询数据,那么 INSERT ... SELECT 可能会读取到不同数据,导致插入数据不一致。...SELECT 语句在执行期间读取到数据是一致,并且不会被其他事务修改,从而维护了事务隔离性和一致性。尽管 MVCC 可以在大多数情况下提供高效数据读取和写入,但它并不能完全替代锁机制。...在 INSERT ... SELECT 这样操作,使用 MVCC 可能无法提供足够保证。...结论: INSERT...SELECT语句是否对查询表加锁跟事务隔离级别有关,REPEATABLE-READ隔离级别下加共享读锁,此共享读锁属于Nextkey lock,会影响其他事务对查询表DML操作

6010

PHPPDO操作学习(二)预处理语句事务

预处理语句功能 预处理语句就是准备好一个要执行语句,然后返回一个 PDOStatement 对象。一般我们会使用 PDOStatement 对象 execute() 方法来执行这条语句。...SQL 语句,在这段代码,我们使用是 :xxx 形式占位符,所以在调用 prepare() 方法返回 PDOStatement 对象 execute() 方法时,我们需要指定占位符值。...在代码,我们使用这一条 SQL 语句,通过替换不同占位符内容,实现了两次查询。 prepare() 方法第二个参数是为返回 PDOStatement 对象设置属性。...在 PHP操作数据库预处理语句 这篇文章中有详细示例。 事务能力 关于事务想必大家也都有一定了解,所以在这里也不介绍具体概念了,我们只看看在 PDO 事务是如何实现。...try { // 开始事务 $pdo->beginTransaction(); $pdo->exec("insert into tran_innodb (name, age)

96000
领券