oracle写会阻塞读吗,一致性读保证了读不阻塞写
再深入一步,为大家测试下,如果手动将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写会阻塞读吗,一致性读保证了读不阻塞写相关推荐
- sql怎么读_大白话讲解脏写、脏读、不可重复读和幻读
一般对于我们的业务系统去访问数据库而言,它往往是多个线程并发执行多个事务的,对于数据库而言,它会有多个事务同时执行,可能这多个事务还会同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决 我 ...
- 不可重复读和幻读的区别_图解脏写、脏读、不可重复读、幻读
MySQL 是支持多事务并发执行的,否则来一个请求处理一个请求,处理一个人请求的时候,别的人都等着,这网站就别做了,用户都要砸键盘了. 这里就有一个问题了:一个事务在写数据的时候,另一个事务要读这行数 ...
- 脏写、脏读、不可重复读、幻读的区别
一般对于我们的业务系统去访问数据库而言,它往往是多个线程并发执行多个事务的,对于数据库而言,它会有多个事务同时执行,可能这多个事务还会同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决 我 ...
- 多读多写是提高写作水平的重要保证
以下内容由南通 学成教育咨询有限公司 http://www.ntxcj.com/提供: 作文和基础知识.阅读理解并称为语文教学的三大板块,是检验学生语文综合水平.母语把握能力及综合素养的标准. ...
- 关于脏写、脏读、不可重复读、幻读的理解
1.概念: 脏写:如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发生了脏写(事务A修改还未提交的事务B所修改的变量,一旦事务B执行回滚操作,那么事务A所做的操作就是无效的) 脏读:如果一个 ...
- 大白话讲解脏写、脏读、不可重复读和幻读
一般对于我们的业务系统去访问数据库而言,它往往是多个线程并发执行多个事务的,对于数据库而言,它会有多个事务同时执行,可能这多个事务还会同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决 我 ...
- 大白话讲解脏写、脏读、可重复读和幻读
文章目录 前言 1. 脏写 2. 脏读 3. 不可重复读 4. 幻读 前言 当多个事务并发执行的时候,会导致什么问题? 我们知道,执行sql是在buffer pool中对数据进行查询或者修改.如若多个 ...
- 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行,太实用了!
作者:Martin cnblogs.com/mhq-martin/p/9035640.html 基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运 ...
- 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行
基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程 ...
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...
最新文章
- JAVA企业级应用TOMCAT实战
- python写电商网站框架,python-django框架-电商项目-商品模块开发_20191124
- Kobe Bryant crash report
- IPv6 RIPng (PT)
- mysql安装后无法启动和连接问题
- 深度linux内核升级,深度操作系统 2020.11.11 更新发布:内核升级
- Android 多级树形菜单
- Cesium中的坐标系及转换
- 服务器系统是选择CentOS,还是选择Ubuntu
- 从还珠格格到街头霸王!80后的怀旧神器 三星GalaxyFold另类体验
- MySQL字符集详解
- git ssh配置文件 服务器_【GIT】日常开发中的这些Git技巧你知道吗?
- [BZOJ 1212][HNOI2004]L语言(AC自动机)
- [2020 年百度之星·程序设计大赛 - 复赛] Battle for Wosneth
- 学校邮箱的pop服务器地,澳门大学的邮件服务器(POP)是多少
- 【操作系统】30天自制操作系统--(1)虚拟机加载最小操作系统
- 如何用ffmpeg截取视频片段截取时间不准确的坑
- Caffe MNIST 手写数字识别(全面流程)
- 3.3.10nbsp;质量管理——戴明,朱兰…
- 学习linux如何选择培训机构
热门文章
- Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(二)
- 官方股票交易接口有什么功能?
- 电子狗服务器登记到本机信息,电子狗在线升级 车友在线全智能化操作
- 禁用的来源disabled以及只读readonly,Vue给icon加禁用
- android 支付系统 demo,微信APP支付Android Demo详解
- 缓存雪崩、击穿和穿透
- 【mysql 中文和英文长度】mysql 如何 计算中文和英文的长度
- 第一次有人把“MACD”运用得出神入化,我整整读了10遍,太通透了
- android 蓝牙耗电量,安卓Android BLE低功耗蓝牙接受数据详解 只需100行代码轻松搞定...
- 多模、AI齐上阵,Deepfake换脸术终赢克星?