mysql innodb 多线程插入_提高MySQL innodb处理INSERT…SELECT的效率配置

InnoDB引擎在处理巨量数据时表现出色,但INSERT…SELECT批量插入可能导致效率降低,因为MySQL需要保证日志和复制的顺序,从而在执行时锁定整个表。通过禁用日志并启用innodb_locks_unsafe_for_binlog参数,可以在不依赖日志的情况下解除锁表机制,提升批量插入的效率。然而,这可能不适合需要日志和复制一致性的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

InnoDB引擎对于巨量数据有强大的优势。特别是ROW LOCK的设计,即使多线程同时修改表中的多处数据,也不会造成锁死和等待。好处我就不多说了。

但是如果在InnoDB中大量使用 INSERT…SELECT这种批量插入的语句,InnoDB的优势便很遗憾的无法发挥了。为什么?因为MySQL为了保证Log和 Replication阵列的正常工作,就必须按顺序记录下所有数据插入记录,以保证当数据库阵列中的其他数据库通过Log建立数据库镜像的正确性。其前 提就是记录中的数据必须是确定的数值,而不能是不确定的数据。INSERT…SELECT中的SELECT过程耗时不固定,所以为了保证Log中的数据顺 序不被打乱,MySQL在这种情况必须要Lock整个表,等待SELECT结果并插入后,才会对表解锁。由此也带来剧大的效率损失。

这种锁死机制因为是由Log系统结构决定的,所以很难规避。但是如果并不准备建立阵列或Log,那么就可以在my.cnf中禁用Log后,使用 innodb_locks_unsafe_for_binlog=1参数。该参数可以解除MySQL为等待INSERT…SELECT结果而锁死目标表的 机制,使InnoDB表格成为真正不会锁死的表。

from:https://tomasen.org/archive/tag/innodb_locks_unsafe_for_binlog/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值