楼主: wei-xh

[精华] buffer busy waits,我的看法

[复制链接]
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04
31#
发表于 2013-7-9 19:26 | 只看该作者
楼主那个截图用的哪个sql?

使用道具 举报

回复
论坛徽章:
21
奔驰
日期:2013-08-06 15:23:05日产
日期:2013-08-07 22:56:38蜘蛛蛋
日期:2012-12-29 19:15:08奥迪
日期:2013-08-07 17:02:24数据库板块每日发贴之星
日期:2010-06-28 01:01:03奥迪
日期:2013-08-13 10:10:28本田
日期:2013-11-20 15:17:02优秀写手
日期:2013-12-18 09:29:08玉兔
日期:2014-03-04 16:47:17铁扇公主
日期:2012-02-21 15:02:40
32#
 楼主| 发表于 2013-7-10 08:58 | 只看该作者
zhouyh139 发表于 2013-7-9 19:26
楼主那个截图用的哪个sql?

Tanel Poder的snapper脚本。你可以学习学习,非常有用。
http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper

使用道具 举报

回复
论坛徽章:
70
夏利
日期:2013-09-29 21:02:15天蝎座
日期:2016-03-08 22:25:51嫦娥
日期:2014-03-04 16:46:45ITPUB年度最佳技术原创精华奖
日期:2014-03-04 16:19:29马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:11
33#
发表于 2013-7-10 09:01 | 只看该作者
mike79 发表于 2013-7-8 17:06
测试了一下,确实后发生buffer busy wait的会话可能会先获取到buffer pin。



我记得也是这样。我观察到Buffer Pin锁没有队列,使用类似无队列Latch、或Mutex的机制被唤醒。

使用道具 举报

回复
论坛徽章:
70
夏利
日期:2013-09-29 21:02:15天蝎座
日期:2016-03-08 22:25:51嫦娥
日期:2014-03-04 16:46:45ITPUB年度最佳技术原创精华奖
日期:2014-03-04 16:19:29马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:11
34#
发表于 2013-7-10 09:02 | 只看该作者
Kamus 发表于 2013-7-8 22:48
我记得TX-Row Cache Lock也是没有先来先得顺序的?I'm not sure,anyway, excellent post.

是吗,buffer Pin Lock没有队列,不确定TX-Row Cache Lock有没有队列,我回头测测

使用道具 举报

回复
论坛徽章:
70
夏利
日期:2013-09-29 21:02:15天蝎座
日期:2016-03-08 22:25:51嫦娥
日期:2014-03-04 16:46:45ITPUB年度最佳技术原创精华奖
日期:2014-03-04 16:19:29马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:11
35#
发表于 2013-7-10 09:05 | 只看该作者
鼠标摸MM 发表于 2013-7-9 16:29
楼主能否在详细说下CLONE 块的细节?新CLONE出来的X CUR 块与原来的X CUR哪个会成为新的X CUR块等等!

如果一个进程先开始读,另一个进程修改,新CLONE出的Buffer是XCUR,原来的XCUR变成CR,这会使“current blocks converted for CR”资料加1。你可以在v$systat中查看这个值的变化。当然,AWR中也有这个值的变化。

使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24懒羊羊
日期:2015-03-28 12:52:25
36#
发表于 2013-7-10 12:14 | 只看该作者
vage 发表于 2013-7-10 09:01
我记得也是这样。我观察到Buffer Pin锁没有队列,使用类似无队列Latch、或Mutex的机制被唤醒。 ...

无队列latch或者mutex应该都是忙等待吧?但现在观察到的现象是buffer busy wait发生时CPU并不忙。

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59
37#
发表于 2013-7-10 21:07 | 只看该作者
学习一下.......

使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24ITPUB社区OCM联盟徽章
日期:2014-06-09 10:24:39
38#
发表于 2013-7-11 08:33 | 只看该作者
操作,实践。感谢。

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04
39#
发表于 2013-7-11 08:34 | 只看该作者
大家都在讨论有没有队列,是否可以提供一个方法,可以供大家测试一下

使用道具 举报

回复
论坛徽章:
21
奔驰
日期:2013-08-06 15:23:05日产
日期:2013-08-07 22:56:38蜘蛛蛋
日期:2012-12-29 19:15:08奥迪
日期:2013-08-07 17:02:24数据库板块每日发贴之星
日期:2010-06-28 01:01:03奥迪
日期:2013-08-13 10:10:28本田
日期:2013-11-20 15:17:02优秀写手
日期:2013-12-18 09:29:08玉兔
日期:2014-03-04 16:47:17铁扇公主
日期:2012-02-21 15:02:40
40#
 楼主| 发表于 2013-7-11 09:56 | 只看该作者
zhouyh139 发表于 2013-7-11 08:34
大家都在讨论有没有队列,是否可以提供一个方法,可以供大家测试一下

buffer pin一定是有队列的,至于这个队列是不是跟enq锁一样,有FIFO我不确定。
buffer pin不是latch,不是mutex,不会在cpu上做spin
buffer pin的队列结构很容易被dump,被证明:
select dbms_rowid.ROWID_RELATIVE_FNO(rowid) fn, dbms_rowid.rowid_block_number(rowid) bl, wxh_tbd.object_id,rowid from wxh_tbd where rownum<4;
        FN         BL  OBJECT_ID ROWID
---------- ---------- ---------- ------------------
         7     906227         20 AAAF2kAAHAADdPzAAA
         7     906227         46 AAAF2kAAHAADdPzAAB
         7     906227         28 AAAF2kAAHAADdPzAAC

新个3个session 分别执行:
test@DLSP>begin
  2  for i in 1 ..40000000 loop
  3  UPDATE  wxh_tbd SET object_name=46 where rowid='AAAF2kAAHAADdPzAAB';
  4  commit;
  5  end loop;
  6  end;
  7  /
test@DLSP>begin
  2  for i in 1 ..40000000 loop
  3  UPDATE  wxh_tbd SET object_name=28 where rowid='AAAF2kAAHAADdPzAAC';
  4  commit;
  5  end loop;
  6  end;
  7  /
test@DLSP>begin
  2  for i in 1 ..40000000 loop
  3  UPDATE  wxh_tbd SET object_name=20 where rowid='AAAF2kAAHAADdPzAAA';
  4  commit;
  5  end loop;
  6  end;
  7  /

然后dump.
alter system dump datafile 7 block 906227;
注意dump的次数要多一点,因为buffer pin是很快的,很可能你dump的时候,没抓到。

查看dump 文件,我截取几个:

BH (0xa37d8c9b8) file#: 7 rdba: 0x01cdd3f3 (7/906227) class: 1 ba: 0xa33c7e000
  set: 182 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0
  dbwrid: 1 obj: 23972 objn: 23972 tsn: 4 afn: 7 hint: f
  hash: [0xa37d8c5a8,0xadfdd5188] lru: [0xa37d8c5e0,0xae63edb58]
  ckptq: [NULL] fileq: [NULL] objq: [NULL] objaq: [NULL]
  use: [0xae5f89658,0xae5f89658] wait: [NULL] fast-cr-pins: 1
  st: CR md: SHR tch: 0
  cr: [scn: 0x0.8a4a8801],[xid: 0x0.0.0],[uba: 0x0.0.0],[cls: 0x0.8a4a8801],[sfl: 0x0],[lc: 0x0.8a4a8801]
  flags: only_sequential_access

BH (0x9f7ebfa68) file#: 7 rdba: 0x01cdd3f3 (7/906227) class: 1 ba: 0x9f5cd0000
  set: 184 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0
  dbwrid: 3 obj: 23972 objn: 23972 tsn: 4 afn: 7 hint: f
  hash: [0x9ffea3908,0xadfdd5188] lru: [0x9f7ebf0a0,0x9f7ebef70]
  obj-flags: object_ckpt_list
  ckptq: [0x9f7ebee88,0x9f7ebf0e8] fileq: [0xae64a4100,0xae64a4100] objq: [0xab46b0220,0xab46b0220] objaq: [0xab46b0200,0xab46b0200]
  use: [0xae5f89658,0xae5f89658] wait: [0xaf5ef8e28,0xaf5ef8e28]
  st: XCURRENT md: EXCL fpin: 'kdswh11: kdst_fetch' tch: 7
  flags: buffer_dirty mod_started block_written_once redo_since_read
          flush_after_writing
  change state: COMPLETE
  change count: 1
  LRBA: [0x44d.49bdc.0] LSCN: [0x0.8ad148b0] HSCN: [0x0.8ada8c13] HSUB: [2]

BH (0xa37db0618) file#: 7 rdba: 0x01cdd3f3 (7/906227) class: 1 ba: 0xa34042000
  set: 184 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0
  dbwrid: 3 obj: 23972 objn: 23972 tsn: 4 afn: 7 hint: f
  hash: [0xadfdd5188,0xadfdd5188] lru: [0xa37db0830,0xa37db05d0]
  ckptq: [NULL] fileq: [NULL] objq: [0xab46b0210,0xa37db05f8] objaq: [0xab46b0200,0xa37db0608]
  st: XCURRENT md: NULL fpin: 'kdswh11: kdst_fetch' tch: 85
  flags: only_sequential_access
  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]

请关注红色部分。
这个就是buffer pin的队列。
dump 的3个截取,第一个只有use队列,第二个use wait队列都存在,第三个由于我们没捕获到,这2个队列完全不存在。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表