问题描述
嗨,
我正在浏览下面的链接,并对自己进行了一些测试。
http://oracleinaction.com/simulate-buff-busy/
只关注下面的内容。
过程RUNSELECT
作为
游标假人从t中选择 *;
c1 t_refcur;
记录虚拟 % rowtype;
开始
我在1 .. 1000000
循环
c1:= retDSQL('从t' 中选择 *);
循环
将c1取入rec;
当c1% 未找到时退出;
结束循环;
关闭c1;
结束循环;
结束运行选择;
我同时从5个不同的会话中运行上述过程。
从另一个会话我运行下面的查询。
选择用户名、sid、序列号、sql_id、事件、p1文件 # 、p2块 #
从v $ 会话
席德在哪里
(select sid 从v $ 会话
其中username = 'TEST');
我看到下面的输出
89km4qj1thh13
从t中选择 *
9cnaxppp75nxq
开始GEN_BUF_BUSY.runSELECT; 结束;
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 9cnaxppp75nxq db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 89km4qj1thh13 db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 89km4qj1thh13 db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 9cnaxppp75nxq db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 9cnaxppp75nxq db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 9cnaxppp75nxq光标: 引脚S 1134051363 2.0616e 11
测试57 83 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 9cnaxppp75nxq db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 9cnaxppp75nxq光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 89km4qj1thh13 db文件分散读取4 553
测试45 29 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
请你帮忙解释一下上面的模式好吗?
为什么我在这里看不到 “其他会话阅读”?
问候,
桑迪普
我正在浏览下面的链接,并对自己进行了一些测试。
http://oracleinaction.com/simulate-buff-busy/
只关注下面的内容。
过程RUNSELECT
作为
游标假人从t中选择 *;
c1 t_refcur;
记录虚拟 % rowtype;
开始
我在1 .. 1000000
循环
c1:= retDSQL('从t' 中选择 *);
循环
将c1取入rec;
当c1% 未找到时退出;
结束循环;
关闭c1;
结束循环;
结束运行选择;
我同时从5个不同的会话中运行上述过程。
从另一个会话我运行下面的查询。
选择用户名、sid、序列号、sql_id、事件、p1文件 # 、p2块 #
从v $ 会话
席德在哪里
(select sid 从v $ 会话
其中username = 'TEST');
我看到下面的输出
89km4qj1thh13
从t中选择 *
9cnaxppp75nxq
开始GEN_BUF_BUSY.runSELECT; 结束;
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 9cnaxppp75nxq db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 89km4qj1thh13 db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 89km4qj1thh13 db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 9cnaxppp75nxq db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 9cnaxppp75nxq db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 9cnaxppp75nxq光标: 引脚S 1134051363 2.0616e 11
测试57 83 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 9cnaxppp75nxq db文件分散读取4 553
测试45 29 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 9cnaxppp75nxq光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
SQL>/
用户名SID串行 # SQL_ID事件文件 # 块 #
-
测试44 21 89km4qj1thh13 db文件分散读取4 553
测试45 29 9cnaxppp75nxq SQL * 来自客户端1650815232 1的Net消息
测试48 37 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
测试54 89 89km4qj1thh13光标: 引脚S 1134051363 2.0616e 11
测试57 83 89km4qj1thh13 SQL * 来自客户端1650815232 1的网络消息
请你帮忙解释一下上面的模式好吗?
为什么我在这里看不到 “其他会话阅读”?
问候,
桑迪普
专家解答
我没有仔细看代码,但是随着我们改善缓存中块的并发管理,Oracle的每个发行版都会变得更好。
查看繁忙缓冲区的一种简单得多的方法是让两个会话竞争索引块,例如
查看繁忙缓冲区的一种简单得多的方法是让两个会话竞争索引块,例如
SQL> create table t as select 1 x, 'y' y from dual; Table created. SQL> create index ix on t ( x ) ; Index created. -- -- 'n' sessions do this -- SQL> begin 2 for i in 1 .. 100000 loop 3 insert into t values (1,'z'); 4 end loop; 5 end; 6 / PL/SQL procedure successfully completed. -- -- and here's the session waits from one of those sessions -- SQL> @sessev Sid (Default=this session): EVENT TOTAL_WAITS TOTAL_TIMEOUTS SECS -------------------------------------------- ----------- -------------- ---------- Disk file operations I/O 2 0 .01 enq: TX - index contention 59 0 .01 events in waitclass Other 54 4 .03 buffer busy waits 1801 0 .03复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。