再深入一步,为大家测试下,如果手动将buffer Header中Buffer Pin内存位设置为1,这就等同于加上了共享Buffer Pin锁,这时另开一个会话,更新这个块,会有什么情况呢?

1、取T1表的第一行数据做测试:

SQL> select rowid,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,id,name from gyj.t1 where rownum=1;

ROWID                   FILE#     BLOCK#         ID   NAME

------------------ ---------- ---------- ----------   --------------

AAASP9AAGAAAACDAAA          6        131        468   gyj468

这里的DBA(Data Block Address)就是由6号文件和131号块组成

2、根据文件号块号获取CBC Latch的地址

SQL> select hladdr,ba,decode(state,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec',6,'irec',7,'write',8,'pi',9,'memory',10,'mwrite',11,'donated') status from x$bh where file#=6 and dbablk=131;

HLADDR           BA               STATUS

---------------- ---------------- -------

00000003A43FA468 000000039459C000 xcur    --BA=000000039459C000时这个块的状态是xcur(当前块)从上面可以看出6号文件131号块的状态是当前块

3、查本会话下的会话号,进程号

SQL> select s.sid,spid from v$session s,v$process b where s.paddr=b.addr and s.sid in(select sid from v$mystat where rownum=1);

SID SPID

---------- ------------------------

125 1545

从上面看出会话号125,进程号1545

4、用Dtrace跟踪一下找到buffer pin的地址3947e73d0

1  51768        sskgslcas:entry i=23 PID::entry:==pid1545:oracle:sskgslcas:entry 3947e73d0 0 1 0 3947e

如何查到buffer pin地址查看这个链接:5、另开一个会话利用oradebug工具

SQL> conn / as sysdba

Connected.

SQL> select distinct sid from v$mystat;

SID

----------

16

SQL> oradebug peek 0x3947e73d0 4        --查6号文件131号有没有buffer pin

BEFORE: [3947E73D0, 3947E73D4) = 00000000  --从这个值上看在6号文件131号块上没有加buffer pin

SQL> oradebug poke 0x3947e73d0 4 1      --在6号文件131号加buffer pin

BEFORE: [3947E73D0, 3947E73D4) = 00000000

AFTER:  [3947E73D0, 3947E73D4) = 00000001         --由0变成1,说明已加上了buffer pin

6、再回到125号会话下,查6号文件131号块的数据

SQL> select * from gyj.t1 where rowid='AAASP9AAGAAAACDAAA';

ID  NAME

---------- -----------------------------

468  gyj468

SQL> select hladdr,ba,decode(state,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec',6,'irec',7,'write',8,'pi',9,'memory',10,'mwrite',11,'donated') status from x$bh where file#=6 and dbablk=131;

HLADDR           BA               STATUS

---------------- ---------------- -------

00000003A43FA468 000000039459C000 xcur   --BA=000000039459C000时这个块的状态是xcur(当前块)

7、再开一个新会话,对6号文件131号块的rowid='AAASP9AAGAAAACDAAA'的这行数据做update,把name的值由gyj468修改成gyjdba;

SQL> update gyj.t1 set name='gyjdba' where rowid='AAASP9AAGAAAACDAAA';

1 row updated.

--update操作没有发生待等

8、再查6号文件131号块,有两条记录,多产生了一条状态是CR的记录

SQL> select hladdr,ba,decode(state,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec',6,'irec',7,'write',8,'pi',9,'memory',10,'mwrite',11,'donated') status from x$bh where file#=6 and dbablk=131;

HLADDR           BA               STATUS

---------------- ---------------- -------

00000003A43FA468 000000038F442000 xcur    --从BA这个字段可以看出这是新产生出来的,就是后面的UPDATE操作,xcur当前块

00000003A43FA468 000000039459C000 cr      --BA=000000039459C000可以看出这是原来做SELECT的操作,由状态xcur(当前块)变成cr(一致性读块)

9、查等待事件

SQL> select sid,event from v$session where wait_class<>'Idle';

SID EVENT

---------- ----------------------------------------------------------------

140 SQL*Net message to client                                  --没有发生等待

10、总结一下:在这种情况下读是不会阻塞写的,那我们在AWR中看到的buffer busy waits等待事件是由什么产生的,它是由写(DML/DDL)阻塞读(SELECT)和写阻塞写产生的。

11、思考个问题:

那读会阻塞写吗?

如果有那么在哪几种情况发生?

在AWR中看到的dirty buffers inspected等待事件跟读阻塞写有关吗?

12、读阻塞读的测试,链接地址:

**********本博客所有内容均为原创,如有转载请注明作者和出处!!!**********

Name:    guoyJoe

QQ:        252803295

Email:    oracledba_cn@hotmail.com

OCM:    http://education.oracle.com/education/otn/YGuo.HTM

_____________________________________________________________

加群验证问题:哪些SGA结构是必需的,哪些是可选的?否则拒绝申请!!!

Oracle@Paradise  总群:127149411

Oracle@Paradise No.1群:177089463(已满)

Oracle@Paradise No.2群:121341761

Oracle@Paradise No.3群:140856036

oracle写会阻塞读吗,一致性读保证了读不阻塞写相关推荐

  1. sql怎么读_大白话讲解脏写、脏读、不可重复读和幻读

    一般对于我们的业务系统去访问数据库而言,它往往是多个线程并发执行多个事务的,对于数据库而言,它会有多个事务同时执行,可能这多个事务还会同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决 我 ...

  2. 不可重复读和幻读的区别_图解脏写、脏读、不可重复读、幻读

    MySQL 是支持多事务并发执行的,否则来一个请求处理一个请求,处理一个人请求的时候,别的人都等着,这网站就别做了,用户都要砸键盘了. 这里就有一个问题了:一个事务在写数据的时候,另一个事务要读这行数 ...

  3. 脏写、脏读、不可重复读、幻读的区别

    一般对于我们的业务系统去访问数据库而言,它往往是多个线程并发执行多个事务的,对于数据库而言,它会有多个事务同时执行,可能这多个事务还会同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决 我 ...

  4. 多读多写是提高写作水平的重要保证

    以下内容由南通 学成教育咨询有限公司 http://www.ntxcj.com/提供:     作文和基础知识.阅读理解并称为语文教学的三大板块,是检验学生语文综合水平.母语把握能力及综合素养的标准. ...

  5. 关于脏写、脏读、不可重复读、幻读的理解

    1.概念: 脏写:如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发生了脏写(事务A修改还未提交的事务B所修改的变量,一旦事务B执行回滚操作,那么事务A所做的操作就是无效的) 脏读:如果一个 ...

  6. 大白话讲解脏写、脏读、不可重复读和幻读

    一般对于我们的业务系统去访问数据库而言,它往往是多个线程并发执行多个事务的,对于数据库而言,它会有多个事务同时执行,可能这多个事务还会同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决 我 ...

  7. 大白话讲解脏写、脏读、可重复读和幻读

    文章目录 前言 1. 脏写 2. 脏读 3. 不可重复读 4. 幻读 前言 当多个事务并发执行的时候,会导致什么问题? 我们知道,执行sql是在buffer pool中对数据进行查询或者修改.如若多个 ...

  8. 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行,太实用了!

    作者:Martin cnblogs.com/mhq-martin/p/9035640.html 基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运 ...

  9. 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行

    基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程 ...

  10. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

最新文章

  1. JAVA企业级应用TOMCAT实战
  2. python写电商网站框架,python-django框架-电商项目-商品模块开发_20191124
  3. Kobe Bryant crash report
  4. IPv6 RIPng (PT)
  5. mysql安装后无法启动和连接问题
  6. 深度linux内核升级,深度操作系统 2020.11.11 更新发布:内核升级
  7. Android 多级树形菜单
  8. Cesium中的坐标系及转换
  9. 服务器系统是选择CentOS,还是选择Ubuntu
  10. 从还珠格格到街头霸王!80后的怀旧神器 三星GalaxyFold另类体验
  11. MySQL字符集详解
  12. git ssh配置文件 服务器_【GIT】日常开发中的这些Git技巧你知道吗?
  13. [BZOJ 1212][HNOI2004]L语言(AC自动机)
  14. [2020 年百度之星·程序设计大赛 - 复赛] Battle for Wosneth
  15. 学校邮箱的pop服务器地,澳门大学的邮件服务器(POP)是多少
  16. 【操作系统】30天自制操作系统--(1)虚拟机加载最小操作系统
  17. 如何用ffmpeg截取视频片段截取时间不准确的坑
  18. Caffe MNIST 手写数字识别(全面流程)
  19. 3.3.10nbsp;质量管理——戴明,朱兰…
  20. 学习linux如何选择培训机构

热门文章

  1. Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(二)
  2. 官方股票交易接口有什么功能?
  3. 电子狗服务器登记到本机信息,电子狗在线升级 车友在线全智能化操作
  4. 禁用的来源disabled以及只读readonly,Vue给icon加禁用
  5. android 支付系统 demo,微信APP支付Android Demo详解
  6. 缓存雪崩、击穿和穿透
  7. 【mysql 中文和英文长度】mysql 如何 计算中文和英文的长度
  8. 第一次有人把“MACD”运用得出神入化,我整整读了10遍,太通透了
  9. android 蓝牙耗电量,安卓Android BLE低功耗蓝牙接受数据详解 只需100行代码轻松搞定...
  10. 多模、AI齐上阵,Deepfake换脸术终赢克星?