1120 11g select for update skip locked

[20171120]11g select for update skip locked.txt

--//11G在select for update遇到阻塞时可以通过skipped locked跳过阻塞的记录,测试看看:

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SCOTT@book> create table empx as select * from emp ;
Table created.

2.测试:
--//session 1:
SCOTT@book> select count(*) from empx ;
    COUNT(*)
------------
          14

SCOTT@book> update empx set sal=sal+100 where deptno=10;
3 rows updated.

--//sesson 2:
SCOTT@book> select * from empx for update ;

--//挂起!!

--//session 1:
SCOTT@book> @ &r/viewlock
   SID      SERIAL# USERNAME   OSUSER     MACHINE    MODULE       LOCK_TYPE       MODE_HELD  MODE_REQUE LOCK_ID1   LOCK_ID2   OWNER  OBJECT_TYP OBJECT_NAME          BLOCK LOCKWAIT
------ ------------ ---------- ---------- ---------- ------------ --------------- ---------- ---------- ---------- ---------- ------ ---------- -------------------- ----- --------------------
    80           15 SCOTT      oracle     xxxxxxx   SQL*Plus     TM DML(TM)      Row-X (SX) None       90707      0          SCOTT  TABLE      EMPX                 No    0000000084C350B8
    80           15 SCOTT      oracle     xxxxxxx   SQL*Plus     TX Transaction  Exclusive  None       589847     2894                                              No    0000000084C350B8
    80           15 SCOTT      oracle     xxxxxxx   SQL*Plus     TX Transaction  None       Exclusive  655366     22646                                             No    0000000084C350B8
   274            9 SCOTT      oracle     xxxxxxx   SQL*Plus     TX Transaction  Exclusive  None       655366     22646                                             Yes
   274            9 SCOTT      oracle     xxxxxxx   SQL*Plus     TM DML(TM)      Row-X (SX) None       90707      0          SCOTT  TABLE      EMPX                 No

SCOTT@book> select * from empx for update skip locked;
     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    20
      7499 ALLEN      SALESMAN        7698 1981-02-20 00:00:00       1600        300         30
      7521 WARD       SALESMAN        7698 1981-02-22 00:00:00       1250        500         30
      7566 JONES      MANAGER         7839 1981-04-02 00:00:00       2975                    20
      7654 MARTIN     SALESMAN        7698 1981-09-28 00:00:00       1250       1400         30
      7698 BLAKE      MANAGER         7839 1981-05-01 00:00:00       2850                    30
      7788 SCOTT      ANALYST         7566 1987-04-19 00:00:00       3000                    20
      7844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         30
      7876 ADAMS      CLERK           7788 1987-05-23 00:00:00       1100                    20
      7900 JAMES      CLERK           7698 1981-12-03 00:00:00        950                    30
      7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000                    20
11 rows selected.

--//可以显示没有上lock的11条记录.

时间: 2024-10-01 18:18:37

1120 11g select for update skip locked的相关文章

[20171123]Skip Locked and ITL slot 2.txt

[20171123]Skip Locked and ITL slot 2.txt --//昨天看链接提到Skip Locked and ITL slot相关问题,链接 http://jonathanlewis.wordpress.com/2010/05/31/skip-locked/ --//我自己重复测试看看: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ---------

MySQL8.0新特性随笔: NOWAIT以及SKIP LOCKED

MySQL8.0版本中对SELECT..FOR UPDATE进行了扩展,实现了新的子句NOWAIT 及 SKIP LOCKED ( WL#3597 及 WL #8919). 本文简单的试玩一把,并看看是怎么实现的.最后介绍下AliSQL中存在的类似功能 测试 如新语法的字面含义,NOWAIT表示当无法获取到锁时直接返回错误,而不是等待:SKIP LOCKED表示忽略那些已经被其他session占有行锁的记录. --session 1 mysql> use test Database change

Mysql 数据库死锁过程分析(select for update)_Mysql

近期有一个业务需求,多台机器需要同时从Mysql一个表里查询数据并做后续业务逻辑,为了防止多台机器同时拿到一样的数据,每台机器需要在获取时锁住获取数据的数据段,保证多台机器不拿到相同的数据. 我们Mysql的存储引擎是innodb,支持行锁.解决同时拿数据的方法有很多,为了更加简单,不增加其他表和服务的情况下,我们考虑采用select... for update的方式,这样X锁锁住查询的数据段,表里其他数据没有锁,其他业务逻辑还是可以操作. 这样一台服务器比如select .. for upda

PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率

PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率 作者 digoal 日期 2016-10-18 标签 PostgreSQL , advisory lock , 高并发更新 背景 通常在数据库中最小粒度的锁是行锁,当一个事务正在更新某条记录时,另一个事务如果要更新同一条记录(或者申请这一条记录的锁),则必须等待锁释放. 通常持锁的时间需要保持到事务结束,也就是说,如果一个长事务持有了某条记录的锁,其他会话要持有这条记录的锁,可能要

[20130312]undo与select for update.txt

[20130312]undo与select for update.txt 闲着没事,研究一下undo与select for update. DML操作在UNDO中的信息 通过Dump UNDO Block观察到DML操作记录在UNDO中的信息,主要为以下内容:1.对于Insert操作,需要在UNDO中记录插入行的ROWID.2.对于Update操作,需要在UNDO中记录被更新列的前镜像的值,同时也会记录被更新行的ROWID.3.对于Delete操作,需要在UNDO中记录被删除行所有列的值(前镜像

MySQL 4.1.0 中文参考手册 --- 6.4 数据操纵:SELECT, INSERT, UPDATE, DELETE

mysql|select|参考|参考手册|数据|中文 MySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译 MySQL Reference Manual for version 4.1.0-alpha. 6.4 数据操纵:SELECT, INSERT, UPDATE, DELETE6.4.1 SELECT 句法 SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACH

mysql的行锁与表锁(select* .... FOR UPDATE)

mysql中使用select for update的必须针对InnoDb,并且是在一个事务中,才能起作用. select的条件不一样,采用的是行级锁还是表级锁也不一样. 由于 InnoDB 预设是 Row-Level Lock,所以只有「明确」的指定主键,MySQL 才会执行 Row lock (只锁住被选取的资料例) ,否则 MySQL 将会执行 Table Lock (将整个资料表单给锁住). 举个例子: 假设有个表单 products ,裡面有 id 跟 name 二个栏位,id 是主键.

ibatis 使用select for update不生效

问题描述 ibatis 使用select for update不生效 ibatis执行select for update不生效,但用命令执行没问题,请问是什么原因?ibatis是否支持select for update? 解决方案 http://www.yiibai.com/ibatis/ibatis_update_operation.html 解决方案二: SELECT FOR UPDATEselect for update与select for nowait有关""SELECT F

【MySQL】select for update 的Row Lock 与Table Lock

select for update 对表施加的锁模式分两种情况: 只有当where 条件中明确地使用指定主键时,MySQL 才会对表执行Row lock (只锁住被选取的数据) , 否则MySQL 将会执行Table Lock (将整个数据表单给锁住). 下面以具体的实例验证上面的结论: 注意 表mail_queue 的结构如下 root@127.0.0.1 : test 22:06:52> show create table mail_queue \G ********************