mysql insert 阻塞_insert遭遇阻塞
insert的阻塞确实不常见,今天碰到了一个,看书又了解一个,整理下。
1、多个会话同时向unique字段插入相同的值
session1:
首先建测试表test,并在字段id上创建一个主键索引(唯一键也可以)。
SQL> create table test(id number,name char(1));
Table created.
SQL> insert into test values(1,'a');
1 row created.
SQL> rollback;
Rollback complete.
SQL> alter table test add constraint pk_test_id primary key(id);
Table altered.
SQL> insert into test values(1,'a');
1 row created.
SQL>
session2:
SQL> insert into test values(1,'b');
session2的insert被阻塞。
如果应用确实需要生成主键或唯一键,可以采用序列生成。
2、主外键关系的表可能会相互阻塞
将1中创建的test表作为父表,再创建一个子表,如test_sun。
session1:
SQL> create table test_sun(id number,name char(1));
Table created.
SQL> alter table test_sun add constraint fk_test_sun_id foreign key(id) references test(id);
Table altered.
SQL> delete from test where id=1;
1 row deleted.
SQL>
session2:
SQL> insert into test_sun values(1,'c');
session2 被阻塞。
测试发现,当在一个会话中对子表插入一行(2,'d'),也会阻塞对父表delete from test where id=1;
查锁等待为:
SQL> select event,blocking_session,row_wait_obj#,sid,serial# from v$session where username=user and status='ACTIVE';
EVENT BLOCKING_SESSION ROW_WAIT_OBJ# SID SERIAL#
---------------------------------------------------------------- ---------------- ------------- ---------- ----------
enq: TM - contention 38 13892 1 29
SQL> select object_id,object_name from dba_objects where object_id=13892;
OBJECT_ID OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
13892 TEST_SUN
SQL> select * from dba_waiters;
WAITING_SESSION HOLDING_SESSION LOCK_TYPE MODE_HELD MODE_REQUESTED LOCK_ID1 LOCK_ID2
--------------- --------------- -------------------------- ------------------------------- ---------------------------------------- ---------- ----------
1 38 DML Row-X (SX) Share 13892 0
可以看到,父表正被子表test_sun阻塞,子表加的是一个行锁。
但是因为有主外键关系,主表必须保证子表的值都在主表里,所以必须能确定子表的值后才能做出回应,否则就处于等待状态了。
经测试发现:
因为主外表关系,导致主表必须保证子表的值都是主表里。当删除数据时,如果保证不报错,必须先删除子表数据再删除主表数据,插入数据时,必须先插入主表再插入子表。
1、删除时,先删除子表不提交或回滚,然后删除主表,会发现删除主表的会话处于等待。
2、插入时,先插入主表不提交或回滚,然后插入子表,会发现插入子表的会话处于等待。
mysql insert 阻塞_insert遭遇阻塞相关推荐
- mysql insert 主键冲突_insert 时防止出现主键冲突错误的方法
最近几天,产品上线比较多,从内网测试库导出表的部分内容到线上也就比平时频繁多了,这时候可能会出现主键冲突: Error Code : 1062 Duplicate entry '1' for key ...
- mysql insert into select大量数据插入比较慢_史上最全MySQL锁机制
本文主要记录学习MyISAM 和 InnoDB 这两个存储引擎. 为什么要学习锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制. 因为数据也是一种供许多用户共享的资源,如何保证数据并发访问的 ...
- 那些年让你迷惑的阻塞、非阻塞、异步、同步
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在IT圈混饭吃,不管你用什么编程语言.从事前端还是后端,阻塞.非阻塞.异步.同步这些概念,都需要清 ...
- 32 | 答疑(四):阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系
问题 1:阻塞.非阻塞 I/O 与同步.异步 I/O 的区别和联系 在文件系统的工作原理篇中,介绍了阻塞.非阻塞 I/O 以及同步.异步 I/O 的含义,这里我们再简单回顾一下. 首先我们来看阻塞和非 ...
- java 多线程阻塞队列 与 阻塞方法与和非阻塞方法
Queue是什么 队列,是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的.无论使用哪种排序方式,队列的头都是调用remove()或poll()移 ...
- socket阻塞与非阻塞,同步与异步
转自:http://blog.csdn.net/hguisu/article/details/7453390 socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网 ...
- 阻塞与非阻塞、同步与异步、I/O模型
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: 所谓同步,就是在c端 ...
- 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一文搞定
关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 阻塞IO情况下, ...
- linux 查看进程阻塞,linux进程 阻塞和非阻塞操作
在我们看全功能的 read 和 write 方法的实现之前, 我们触及的最后一点是决定何时使 进程睡眠. 有时实现正确的 unix 语义要求一个操作不阻塞, 即便它不能完全地进行下去. 有时还有调用进 ...
最新文章
- 初探swift语言的学习笔记五(线程)
- 小米面试题:合并二叉树
- 成功解决but is 0 and 2 (computed from start 0 and end 9223372 over shape with rank 2 and stride-1)
- 在Python中将字符串拆分为字符数组
- beautifulsoup网页爬虫解析_爬虫第三天——初识Xpath
- vue 限制渲染条数_深入理解Vue 的条件渲染和列表渲染
- ufs2.0测试软件,UFS 2.1和UFS 2.0差距到底多大?跑分还有很多学问
- C#中面向对象编程中的函数式编程
- 样式中指定调用的效果
- 离散数学:等价关系与集合覆盖
- 2019年终总结——工作第二年
- 微信小程序开发:微信小程序里面集成百度地图的步骤
- JDK1.6支持TSL1.2协议
- EventBus原理源码分析和使用
- Android(一)
- 110115-07-6,Ac-LLM-CHOCalpain 抑制剂
- 输入一个字符串并原样输出。
- GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解
- 蘑菇街财报:短暂“盈利”惹众嘲
- SIKI学院:MySQL数据库从零到精通:八:课时 10 : 09-如何利用MySQL Workbench查看数据库和创建