楼主: fan_zhen_hua

[讨论] 如何如何计算I/O

[复制链接]
论坛徽章:
113
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:42:50现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36蛋疼蛋
日期:2011-07-24 22:25:332012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25
11#
发表于 2009-10-29 10:36 | 只看该作者

回复 #10 fan_zhen_hua 的帖子

库忙么?有可能是被flush出buffer cache了。
多执行几遍sql再看看

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:19:06
12#
 楼主| 发表于 2009-10-29 10:46 | 只看该作者
库不忙的。多执行几遍也还是没有。跟库忙会有关系吗》?

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:19:06
13#
 楼主| 发表于 2009-10-29 10:53 | 只看该作者
ASSM有一个低HWM和一个HWM,ORACLE会全表扫描至HWM,而对于低HWM以下的所有块会直接读取并加以处理,对于介于低HWM和HWM之间的块,必需更加小心,需要参考块所用的ASSM位图信息来查看应该读取哪些块,刚才的情况低HWM,和HWM应该是重合了。

使用道具 举报

回复
论坛徽章:
113
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:42:50现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36蛋疼蛋
日期:2011-07-24 22:25:332012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25
14#
发表于 2009-10-29 11:07 | 只看该作者
原帖由 fan_zhen_hua 于 2009-10-29 10:53 发表
ASSM有一个低HWM和一个HWM,ORACLE会全表扫描至HWM,而对于低HWM以下的所有块会直接读取并加以处理,对于介于低HWM和HWM之间的块,必需更加小心,需要参考块所用的ASSM位图信息来查看应该读取哪些块,刚才的情况低HWM,和HWM应该是重合了。


低hwm即formatted blocks的hwm,前面我脚本中显示出来了低hwm的位置:
##################################################
The segment space usage for TABLE "ASSMTEST"
##################################################
UNUSED BLOCKS...........................0
UNUSED Bytes............................0
------------------------HWM------------------------
UNFORMATTED_BLOCKS......................0
--------------------------------------------------


因为没有unformatted blocks,所以高低hwm重合

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:19:06
15#
 楼主| 发表于 2009-10-29 11:19 | 只看该作者
恩。非常感谢~

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
16#
发表于 2009-10-30 05:11 | 只看该作者
I want to make a few comments.

* x$bh.obj is xxx_objects.data_object_id, not object_id. They differ in various cases, such as table move, truncate, index rebuild, partition exchange, etc. (But may or may not change for an empty table.)

* Physically, the order of the first few blocks of a table in ASSM is: first level BMB (bitmap block), second level BMB, segment header, data... That is, the segment header should be after, not before, the bitmap blocks. In addition, each extent (other than extent 0) has its own first level BMB in the first block.

* I don't think you can bring reads of the segment header into the count of consistent gets, because reading segment headers should count as current mode gets. I know since 9iR2 the simplest table read will show 0 db block gets. See Tom Kyte's listing of the four versions at "Followup   April 26, 2005 - 8am Central time zone" at

http://asktom.oracle.com/pls/ask ... ION_ID:865586003021

The question and answer right below are relevant. But I'm not sure Tom really answered the question. We can see from viadeazhu's test in message #7 that the segment header (class 4) was indeed read once. Why does autotrace "db block gets" still report 0? Could SQL trace incorrectly add it to "consistent gets" (which makes message #7 an excellent explanation)? If anybody finds an official explanation, I'd like to see.

Where's the URL for "对于大表,晶晶小妹有实验证明会读segment header3次"?

Yong Huang

使用道具 举报

回复
论坛徽章:
113
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:42:50现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36蛋疼蛋
日期:2011-07-24 22:25:332012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25
17#
发表于 2009-10-30 08:41 | 只看该作者

回复 #16 Yong Huang 的帖子

我估计sql trace的确是把读segment header算成consistents read了。

晶晶小妹的实验:
http://www.itpub.net/thread-951696-1-1.html

引用其中一句,看来我们都是用实验推理论,没有official的理论支持:
“全表扫描,段头会被访问3次,这点,我就不详细写的证明过程了,因为不是很严谨,只能说是推测”

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:19:06
18#
 楼主| 发表于 2009-10-30 10:59 | 只看该作者
Yong Huang 贴的asktom 上的文章,对此有一些解释。
It is zero because they optimized away the need to do it.


原文如下:
Hi Tom,

I tried the same example (9204 on linux RHEL4/Dell 4600 Box ), and every time it does FTS then how
come "db block gets" can be 0 ? also why "consistent gets" got decreased after first execution ?
why recursive call got decreased from 173 to 0 ?


SQL> set autotrace on
SQL> select * from t1;

D
-
X


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (FULL) OF 'T1'




Statistics
----------------------------------------------------------
        173  recursive calls
          0  db block gets
         22  consistent gets
          2  physical reads
          0  redo size
        375  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> /

D
-
X


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (FULL) OF 'T1'




Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          3  consistent gets
          0  physical reads
          0  redo size
        375  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed





Followup   April 26, 2005 - 8am Central time zone:

the recursive sql was from the first "hard parse", brand new query -- never seen before, we ran
some sql in order to figure out how to run your sql.

That accounts for the extra consistent gets too -- that sql that was run for you by us, it counted
in the consistent gets.


The number of db block gets and consistent gets varies by release.


scott.dept on 817:
          4  db block gets
          2  consistent gets

scott.dept on 9ir1
          2  db block gets
          2  consistent gets


scott.dept on 9ir2
          0  db block gets
          4  consistent gets

scott.dept on 10gr1
          0  db block gets
          4  consistent gets



things change over time -- one of the reasons I show how to measure things here.   


   April 26, 2005 - 8am Central time zone Bookmark | Bottom | TopReviewer: Kapil Goyal from INDIA
<quote>
That indicates that we did 4 current mode reads to determine how to FULL SCAN dual.
</quote>
so in 9iR2, 10g what mechanism Oracle follows ? NO "current mode reads" kind of concept ? or some
great enhancement ?? i am sure you must have digged upto that much depth
Can you elaborate a bit more why it is ZERO in 9iR2 and 10g.



Followup   April 26, 2005 - 9am Central time zone:

that is a good enhancement since current mode reads are "more expensive" than the other kinds yes.

This was simply an incremental improvement over time.

It is zero because they optimized away the need to do it.

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:19:06
19#
 楼主| 发表于 2009-10-30 11:08 | 只看该作者
那什么时候读段头算consistents read,什么时候算db block gets。

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
20#
发表于 2009-10-31 05:37 | 只看该作者
原帖由 fan_zhen_hua 于 2009-10-29 21:08 发表
那什么时候读段头算consistents read,什么时候算db block gets。


I don't know. That's what we should look for on Metalink or any online source. One thing for sure is that if you run DML, db block gets are still non-zero.

Yong Huang

使用道具 举报

回复

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

本版积分规则 发表回复

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