mysql中 insert …select …带来的死锁问题
来源:互联网 发布:提词器镜像软件出错 编辑:程序博客网 时间:2024/06/04 17:59
mysql中 insert …select …带来的问题
当使用insert...select...进行记录的插入时,如果select的表是innodb类型的,不论insert的表是什么类型的表,都会对select的表的纪录进行锁定。
对于那些从oracle迁移过来的应用,需要特别的注意,因为oracle并不存在类似的问题,所以在oracle的应用中insert...select...操作非常的常见。例如:有时候会对比较多的纪录进行统计分析,然后将统计的中间结果插入到另外一个表,这样的操作因为进行的非常少,所以可能并没有设置相应的索引。如果迁移到mysql数据库后不进行相应的调整,那么在进行这个操作期间,对需要select的表实际上是进行的全表扫描导致的所有记录的锁定,将会对应用的其他操作造成非常严重的影响。
究其主要原因,是因为mysql在实现复制的机制时和oracle是不同的,如果不进行select表的锁定,则可能造成从数据库在恢复期间插入结果集的不同,造成主从数据的不一致。如果不采用主从复制,关闭binlog并不能避免对select纪录的锁定,某些文档中提到可以通过设置innodb_locks_unsafe_for_binlog来避免这个现象,当这个参数设置为true的时候,将不会对select的结果集加锁,但是这样的设置将可能带来非常严重的隐患。如果使用这个binlog进行从数据库的恢复,或者进行主数据库的灾难恢复,都将可能和主数据库的执行效果不同。
因此,我们并不推荐通过设置这个参数来避免insert...select...导致的锁,如果需要进行可能会扫描大量数据的insert...select操作,我们推荐使用select...into outfile和load data infile的组合来实现,这样是不会对纪录进行锁定的,但是效率会下降
0 0
- mysql中 insert …select …带来的死锁问题
- mysql中 insert …select …带来的死锁问题
- mysql中insert...select引发的死锁
- mysql insert into ..select 发生死锁问题。
- MySql自动类型转换 MySql insert into select 带来的问题
- MySQL中INSERT INTO SELECT的使用
- MySQL中INSERT INTO SELECT的使用
- MySQL中INSERT INTO SELECT的使用
- MySQL中INSERT INTO SELECT的使用
- MySQL中INSERT INTO SELECT的使用
- MySQL中INSERT INTO SELECT的使用
- MySQL中INSERT INTO SELECT的使用
- MySQL中INSERT INTO SELECT的使用
- MySQL中INSERT INTO SELECT的使用
- Mysql中INSERT INTO SELECT的使用
- 在MySql中建立存储过程和解决insert into select 中主键冲突的问题
- MYSQL中insert...select优化?
- 【mysql】mysql中insert into select的用法
- 【MySQL】优化参考
- Python特殊语法:filter、map、reduce、lambda [转]
- 互联网+的是泡沫吗
- cocos2d-x2.2.3和android平台环境的搭建
- 架构师到底要做什么?
- mysql中 insert …select …带来的死锁问题
- Jackson 框架,轻易转换JSON
- tcp的三次握手和四次挥手
- java对redis的基本操作
- 第一个程序:HelloWorld
- 【伊利丹】Hadoop-2.5.0-CDH5.2.0/Hive与Hbase整合实验
- PHP调试环境搭建:wampserver2.4+zend studio12.0.1+Xdebug
- 机器学习中的相似性度量
- SVG基础 | SVG PATH 元素