读取模式下cbc latch的事件模拟(热块竞争和热链竞争)-P62
文章目录
1. 背景
cbc latch的竞争,读取模式下各个版本可能是不同的。
比如在版本11.2.0.4.0是模拟不出读取模式下latch: cache buffers chains,这里原因不做探讨。
2. 过程
关于cbc latch,我们知道逻辑读下,通过全表扫描或者rowid去读取块,用的是独占的cbc latch模式。
2.1 热块竞争
热块竞争下的cbc。
2.1.1 版本11.2.0.1.0
session 1和session 2同时执行。
SYS@zkm> create table zkm.test as select rownum id from dual connect by rownum<=10;
Table created.
SYS@zkm> select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,rowid from zkm.test where rownum=1;
FILE# BLOCK# ROWID
---------- ---------- ------------------
4 131 AAAEQGAAEAAAACDAAA
2.1.1.1 session 1(sid:34)
SYS@zkm> select sid from v$mystat where rownum=1;
SID
----------
34
SYS@zkm> declare
2 r int;
3 begin
4 for i in 1..1000000000 loop
5 select count(*) into r from zkm.test where rowid='AAAEQGAAEAAAACDAAA';
6 end loop;
7 end;
8 /
---等待
2.1.1.2 session 2(sid:35)
SYS@zkm> select sid from v$mystat where rownum=1;
SID
----------
35
SYS@zkm> declare
2 r int;
3 begin
4 for i in 1..1000000000 loop
5 select count(*) into r from zkm.test where rowid='AAAEQGAAEAAAACDAAA';
6 end loop;
7 end;
8 /
---等待
2.1.1.3 session 3
查看等待事件。
下边结果是最终执行完后查询信息。
SYS@zkm> select sid,event,TOTAL_WAITS from v$session_event where sid in (34,35);
SID EVENT TOTAL_WAITS
---------- ---------------------------------------------------------------- -----------
34 Disk file operations I/O 1
34 latch: cache buffers chains 176
34 cursor: pin S 1497
34 SQL*Net message to client 7
34 SQL*Net message from client 6
35 Disk file operations I/O 1
35 latch: cache buffers chains 236
35 cursor: pin S 1453
35 SQL*Net message to client 7
35 SQL*Net message from client 6
10 rows selected.
其中,“latch: cache buffers chains”中sid34和sid35各发生了176次和236次。
2.1.2 版本11.2.0.4.0
步骤类似2.1,省略其中2.1.1.1-2.1.1.2。
2.1.2.1 session 3
SYS@zkm> select sid,event,TOTAL_WAITS from v$session_event where sid in (35,28);
SID EVENT TOTAL_WAITS
---------- ---------------------------------------------------------------- -----------
28 Disk file operations I/O 1
28 cursor: pin S 5225
28 latch: shared pool 6
28 SQL*Net message to client 7
28 SQL*Net message from client 6
35 Disk file operations I/O 2
35 db file sequential read 7
35 cursor: pin S 5235
35 latch: shared pool 4
35 SQL*Net message to client 7
35 SQL*Net message from client 6
11 rows selected.
其中,“latch: cache buffers chains”一次都没有出现。
2.1.3 版本10.2.0.1.0
步骤类似2.1,省略其中2.1.1.1-2.1.1.2。
2.1.3.1 session 3
SQL> select sid,event,TOTAL_WAITS from v$session_event where sid in (147,148);
SID EVENT TOTAL_WAITS
---------- ---------------------------------------------------------------- -----------
147 latch: cache buffers chains 762
147 latch: library cache 551
147 latch: library cache pin 423
147 SQL*Net message to client 9
147 SQL*Net message from client 8
148 latch: cache buffers chains 706
148 latch: library cache 624
148 latch: library cache pin 393
148 SQL*Net message to client 9
148 SQL*Net message from client 8
10 rows selected.
出现“latch: cache buffers chains”远远多于在11.2.0.1.0上的次数。并且时间上运行了3个小时(我还是ssd的盘),前面的两个版本都没那么久。
2.2热链竞争
热链竞争下的cbc。
2.2.1 版本11.2.0.1.0
SYS@zkm> set linesize 500
SYS@zkm> select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,rowid from zkm.test where id=1;
FILE# BLOCK# ROWID
---------- ---------- ------------------
4 131 AAAEQGAAEAAAACDAAA
SYS@zkm> select distinct hladdr from x$bh where file#=4 and dbablk=131;
HLADDR
----------------
00000003E4734398
SYS@zkm> select a.file#,a.dbablk,b.owner,b.object_name from x$bh a,dba_objects b where a.hladdr='00000003E4734398' and a.obj=b.data_object_id;
FILE# DBABLK OWNER OBJECT_NAME
---------- ---------- ------------------------------ --------------------------------------------------------------------------------------------------------------------------------
1 3160 SYS I_MON_MODS$_OBJ
2 15242 SYS I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST
4 131 ZKM TEST
4 4469 ZKM PIS
SYS@zkm> select object_id,data_object_id from dba_objects where owner='ZKM' and object_name='PIS';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
17419 17419
SYS@zkm> select dbms_rowid.rowid_create(1,17419,4,4469,0) from dual;
DBMS_ROWID.ROWID_C
------------------
AAAEQLAAEAAABF1AAA
其中,00000003E4734398是cbc latch的地址。找出这个地址后,在找出这个地址下保护的其他对象。
这里我们挑zkm.pis这张表(文件4,块号4469),因为SYS.I_MON_MODS$_OBJ和SYS.I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST没办法查询,我新构造了zkm.pis这张表直到出现这个00000003E4734398也有zkm.pis的结果。
2.2.1.1 session 1(sid:19)
SYS@zkm> select sid from v$mystat where rownum=1;
SID
----------
19
SYS@zkm> declare
2 r int;
3 begin
4 for i in 1..1000000000 loop
5 select id into r from zkm.test where rowid='AAAEQGAAEAAAACDAAA';
6 end loop;
7 end;
8 /
---等待
2.2.1.2 session 2(sid:31)
SYS@zkm> select sid from v$mystat where rownum=1;
SID
----------
31
SYS@zkm> declare
2 r int;
3 begin
4 for i in 1..1000000000 loop
5 select count(*) into r from zkm.pis where rowid='AAAEQLAAEAAABF1AAA';
6 end loop;
7 end;
8 /
---等待
2.2.1.3 session 3
SYS@zkm> select sid,event,state,p1raw,p2raw from v$session where sid in (19,31) order by 2;
SID EVENT STATE P1RAW P2RAW
---------- ---------------------------------------------------------------- ------------------- ---------------- ----------------
31 latch: cache buffers chains WAITED SHORT TIME 00000003E4734398 0000000000000096
19 latch: cache buffers chains WAITED SHORT TIME 00000003E4734398 0000000000000096
session 1和session 2跑期间可以刷出以上结果,其中,p1raw正好是latch的地址。
最后session 1和session 2,通过视图v$session_event查看等待事件的统计如下:
SYS@zkm> select sid,event,TOTAL_WAITS from v$session_event where sid in (19,31);
SID EVENT TOTAL_WAITS
---------- ---------------------------------------------------------------- -----------
19 Disk file operations I/O 1
19 latch: cache buffers chains 213
19 SQL*Net message to client 7
19 SQL*Net message from client 6
31 Disk file operations I/O 1
31 latch: cache buffers chains 279
31 SQL*Net message to client 7
31 SQL*Net message from client 6
8 rows selected.
2.2.2 版本11.2.0.4.0
步骤类似2.2.1.1-2.2.1.2,省略。
2.2.2.1 session 3
最后session 1和session 2,通过视图v$session_event查看等待事件的统计如下:
SYS@zkm> select sid,event,TOTAL_WAITS from v$session_event where sid in (29,24);
SID EVENT TOTAL_WAITS
---------- ---------------------------------------------------------------- -----------
24 Disk file operations I/O 1
24 latch: shared pool 7
24 SQL*Net message to client 8
24 SQL*Net message from client 7
24 SQL*Net break/reset to client 2
29 Disk file operations I/O 1
29 latch: shared pool 9
29 SQL*Net message to client 7
29 SQL*Net message from client 6
9 rows selected.
2.2.3 版本10.2.0.1.0
步骤类似2.2.1.1-2.2.1.2,省略。
2.2.3.1 session 3
SQL> select sid,event,state,p1raw,p2raw from v$session where sid in (148,158) order by 2;
SID EVENT STATE P1RAW P2RAW
---------- ---------------------------------------------------------------- ------------------- ---------------- ----------------
158 latch: cache buffers chains WAITED KNOWN TIME 0000000082FA5158 000000000000007A
148 latch: cache buffers chains WAITED KNOWN TIME 0000000082FA5158 000000000000007A
session 1和session 2跑期间可以刷出以上结果,其中,p1raw正好是latch的地址。
最后session 1和session 2,通过视图v$session_event查看等待事件的统计如下:
SQL> select sid,event,TOTAL_WAITS from v$session_event where sid in (148,158);
SID EVENT TOTAL_WAITS
---------- ---------------------------------------------------------------- -----------
148 latch: cache buffers chains 773
148 latch: library cache 794
148 latch: library cache pin 426
148 SQL*Net message to client 9
148 SQL*Net message from client 8
158 latch: cache buffers chains 673
158 latch: library cache 950
158 latch: library cache pin 413
158 SQL*Net message to client 9
158 SQL*Net message from client 8
10 rows selected.
现象和热块竞争时候是一样的。11.2.0.4.0一样模拟不出来“latch: cache buffers chains”。
而且在10.2.0.1.0和11.2.0.1.0中,10g的这个事件次数远多于11g的。
3 热块/链竞争的解决
热链竞争:可以通过修改隐藏参数_db_block_hash_buckets或者_db_block_hash_latches值,它们分别控制HASH Bucket的数量和CBC Latch的数量。修改后,BH和HASH Bucket的对应关系就会被重新计算。原本在同一链表中的BH,重新计算后很可能就不在同一链表中了。不过,不是实在无计可施的情况,不推荐修改这两个参数。
热块竞争:大多是执行计划不合理或者sql有问题导致的。比如等值查询条件表,表又比较大,可以考虑创建唯一索引,因为索引的根块枝块页块表块都是使用共享模式的CBC Latch,不用担心引起争用。
读取模式下cbc latch的事件模拟(热块竞争和热链竞争)-P62的更多相关文章
- Release编译模式下,事件是否会引起内存泄漏问题初步研究
题记:不常发生的事件内存泄漏现象 想必有些朋友也常常使用事件,但是很少解除事件挂钩,程序也没有听说过内存泄漏之类的问题.幸运的是,在某些情况下,的确不会出问题,很多年前做的项目就跑得好好的,包括我也是 ...
- Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录
项目无法启动了 简单的介绍一下事件过程:周一的早上,收到前端同事抛过来的一个任务,说是一个接口无法正常返回数据,于是就让他把参数发过来,我想试着在本地重现一下并且将问题修复掉,这种情况肯定是要通过de ...
- WPF中在MVVM模式下,后台绑定ListCollectionView事件触发问题
问题:WPF中MVVM模式下 ListView绑定ListCollectionView时,CurrentChanged无法触发 解决方案: 初期方案:利用ListView的SelectionChang ...
- epoll水平/边缘触发模式下阻塞/非阻塞EPOLLOUT事件触发条件及次数
在IO多路复用技术中,epoll默认的事件触发模式为Level_triggered(水平触发)模式,即当被监控的文件描述符上有可读/写事件发生时,epoll_wait()会通知处理程序去读写.如果这次 ...
- ASM:《X86汇编语言-从实模式到保护模式》越计卷:实模式下对DMA和Sound Blaster声卡的控制
说实话越计卷作者用了16页(我还是删过的),来讲怎么控制声卡,其实真正归纳起来就那么几点. ★PART1:直接存储访问 1. 总线控制设备(bus master) 在硬件技术不发达的早期,处理器是最重 ...
- sql服务器第5级事务日志管理的阶梯:完全恢复模式下的日志管理
sql服务器第5级事务日志管理的阶梯:完全恢复模式下的日志管理 原文链接http://www.sqlservercentral.com/articles/Stairway+Series/73785/ ...
- ASM:《X86汇编语言-从实模式到保护模式》第17章:保护模式下中断和异常的处理与抢占式多任务
★PART1:中断和异常概述 1. 中断(Interrupt) 中断包括硬件中断和软中断.硬件中断是由外围设备发出的中断信号引发的,以请求处理器提供服务.当I/O接口发出中断请求的时候,会被像8259 ...
- ASM:《X86汇编语言-从实模式到保护模式》第9章:实模式下中断机制和实时时钟
中断是处理器一个非常重要的工作机制.第9章是讲中断在实模式下如何工作,第17章是讲中断在保护模式下如何工作. ★PART1:外部硬件中断 外部硬件中断是通过两个信号线引入处理器内部的,这两条线分别叫N ...
- 软件调试——IA-32 保护模式下寄存器一览
最近在看张银奎先生的<调试软件>一书,想将关键的技术记录下来,以便日后查阅,也分享给想看之人吧. 1 通用寄存器 EAX,EBX,ECX,EDX:用于运算的通用寄存器,可以使用AX,BX等 ...
随机推荐
- Java实现 LeetCode 205 同构字符串
205. 同构字符串 给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序. ...
- Java实现 蓝桥杯 历届真题 数字拆分
正整数可以表示为若干正整数的累加和. 如,对于正整数n=6,可以分划为: 5+1 4+2 4+1+1 3+3 3+2+1 3+1+1+1 2+2+2 2+2+1+1 2+1+1+1+1 1+1+1+1 ...
- MySQL 8.0二进制包安装
1.官方下载 https://dev.mysql.com/downloads/mysql/ 这样就可以下载二进制包了 1.删除之前安装的MySQL包 [root@localhost ~]# rpm - ...
- 别人开发三年30k,而我才12K,看完他面试前狂刷的面试题,我惊了
朋友做Java开发三年多的时间了,在老东家勤勤恳恳工作了三年多,工资也就是从刚开始的8K涨到了12K,天天给我吐槽他的工资低.2019年中下旬开始就一直在各种地方找资源,刷面试题,想要“骑驴找马”,所 ...
- mail邮件操作
目录 1. 概念 1.1. 常见的类型 1.2. 相关协议 1.3. SMTP协议 2. python::smtplib 1. 概念 1.1. 常见的类型 Mail User Agent 收发邮件用的 ...
- 【Vulnhub】FristiLeaks v1.3
靶机信息 下载连接 https://download.vulnhub.com/fristileaks/FristiLeaks_1.3.ova.torrent https://download.vuln ...
- 不知道这些,你以为你还能devops?
一.什么是devops 在DevOps之前,从业人员使用瀑布模型或敏捷开发模型进行软件项目开发:瀑布模型或顺序模型是软件开发生命周期(SDLC)中的一种开创性方法,在这个模型中,软件开发成为一个线性过 ...
- (三)JavaMail发送附件
代码如下: package cases; import com.sun.mail.util.MailSSLSocketFactory; import javax.activation.DataHand ...
- C# 9.0 新特性之目标类型推导 new 表达式
阅读本文大概需要 2 分钟. 呼~~,每次过完一个周末,写作就失去了动力,一两天才能缓过来.尽管如此,还是要坚持写好每一篇文章的.宁缺毋滥嘛,宁愿发文的频率低一点,也要保证文章的质量,至少排版不能差, ...
- Java Jar 包加密 -- XJar
Java Jar 包加密 一.缘由 Java的 Jar包中的.class文件可以通过反汇编得到源码.这样一款应用的安全性就很难得到保证,别人只要得到你的应用,不需花费什么力气,就可以得到源码. 这时候 ...