楼主: 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
21#
发表于 2009-10-31 13:45 | 只看该作者

回复 #20 Yong Huang 的帖子

实验表明在10g时,FTS对segment header的每十个extent的读取,是算成的consistent reads,不算成db block gets。

那么,在10g通常情况下,只有dml语句和select for update才会有db block gets。

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:19:06
22#
 楼主| 发表于 2009-11-3 13:44 | 只看该作者
回#21:
实验表明在10g时,FTS对segment header的每十个extent的读取,是算成的consistent reads,不算成db block gets。
能不能详细点??有没有实现贴一下~

使用道具 举报

回复
论坛徽章:
3
2010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:07:23ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04
23#
发表于 2010-1-8 16:55 | 只看该作者
原帖由 viadeazhu 于 2009-10-29 09:16 发表
这个问题看看x$bh就很好理解了。
先创建一行的table,
SQL> create table testassm (id number) tablespace assmtbs;
Table created.
SQL> insert into testassm values(1);
1 row created.
SQL> commit;
Commit complete.

SQL> select object_id from user_objects where object_name='TESTASSM';
OBJECT_ID
----------
     63288
     
SQL>select FILE_ID,EXTENT_ID,BLOCK_ID,BLOCKS from dba_extents where segment_name='TESTASSM' ;
   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ---------- ----------
        17          0          9          8

SQL> select file#, dbablk, state, tch,CLASS from x$bh where obj=63288 order by 1,2;        
     FILE#     DBABLK      STATE        TCH      CLASS
---------- ---------- ---------- ---------- ----------
        17          9          1          2          8
        17         10          1          2          9
        17         11          1          3          4
        17         12          1          1          1
        17         13          1          1          1
        17         14          1          1          1
        17         15          1          1          1
        17         16          1          1          1
        
SQL> select * from TESTASSM;
        ID
----------
         1
SQL>  select file#, dbablk, state, tch,CLASS from x$bh where obj=63288 order by 1,2;
     FILE#     DBABLK      STATE        TCH      CLASS
---------- ---------- ---------- ---------- ----------
        17          9          1          2          8
        17         10          1          2          9
        17         11          1          4          4
        17         12          1          2          1
        17         13          1          2          1
        17         14          1          2          1
        17         15          1          2          1
        17         16          1          2          1  

用我自己的脚本看看:
SQL> exec hao_show_space('ASSMTEST');
SEGMENT_SPACE_MANAGEMENT: AUTO
##################################################
--------show_space_assm kit created by Hao---------
##################################################
The segment space usage for TABLE "ASSMTEST"
##################################################
UNUSED BLOCKS...........................0
UNUSED Bytes............................0
------------------------HWM------------------------
UNFORMATTED_BLOCKS......................0
--------------------------------------------------
FS1 Blocks..............................0
FS1 Bytes ..............................0
--------------------------------------------------
FS2 Blocks..............................0
FS2 Bytes ..............................0
--------------------------------------------------
FS3 Blocks..............................0
FS3 Bytes ..............................0
--------------------------------------------------
FS4 Blocks..............................5
FS4 Bytes ..............................40960
--------------------------------------------------
FULL BLOCKS.............................0
FULL_BYTES .............................0
##################################################
Data Blocks(under HWM)..................5
All Blocks (under HWM)..................8
Total Blocks............................8
Total Bytes.............................65536
##################################################
Last Used Ext FileId....................17
Last Used Ext BlockId...................9
Last Used Block.........................8


综上所示,这个表在HWM下一共有8个blocks,其中5个是data blocks,另外三个我们都知道是L1 block,L2 blocks和segment header block。
那为什么是7个逻辑读?
通过以上x$bh得知,原来全表扫描不会去读L1/L2 blocks,但会读segment header block。
于是对于这样的小表,segment header和5个data blocks各被读了一次,于是6个逻辑读。
然后再fetch 一次,加起来一共7个逻辑读。


对于大表,晶晶小妹有实验证明会读segment header3次,我没有具体证明,大家可以看看她的证明实验。
而且对于大表会回读segment header的情况,我认为也是可能的。


这里的再fetch一次是什么意思

使用道具 举报

回复
论坛徽章:
3
2010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:07:23ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04
24#
发表于 2010-1-8 17:08 | 只看该作者
打开了autotrace,会对dual表读一次; 我明白了,sorry

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
7
BLOG每日发帖之星
日期:2008-11-24 01:01:03BLOG每日发帖之星
日期:2009-01-20 01:01:05BLOG每日发帖之星
日期:2009-02-02 01:01:04BLOG每日发帖之星
日期:2009-03-27 01:01:10BLOG每日发帖之星
日期:2009-06-15 01:01:022010新春纪念徽章
日期:2010-03-01 11:08:29ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
25#
发表于 2010-1-10 18:25 | 只看该作者
我也照这个帖子在10gr2的assm环境下,实验了一下,发觉对空表做一次全表扫描,
会有3个逻辑读,为什么?

看了x$bh,确实只有segment header块的tch增加了1,
加上开autotrace的开销,读了一次dual表,
那应该逻辑读总数是2啊?

dyl@TEST> set autotrace on stat
dyl@TEST> select * from t;

no rows selected


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

dyl@TEST> /

no rows selected


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

dyl@TEST> /

no rows selected


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

dyl@TEST> desc t
Name                                                                                                              Null?    Type
----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
X                                                                                                                          NUMBER(38)
Y                                                                                                                          NUMBER(38)

dyl@TEST> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

[ 本帖最后由 asword 于 2010-1-10 18:31 编辑 ]

使用道具 举报

回复
论坛徽章:
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
26#
发表于 2010-1-12 01:27 | 只看该作者
Sqlplus may add one more additional consistent get. Try a non-sqlplus tool, such as test.pl:

use DBI;

$dbh=DBI->connect("dbi:Oracle:conn_string","username","password",{AutoCommit=>0}) or die "Can't log in: $!";

$sth=$dbh->prepare("select /* some identifier */ * from mytable") or die "$DBI::errstr";
$sth->execute or die "Can't execute sth: $DBI::errstr.";

while (($mycolumn)=$sth->fetchrow_array)
{ print "$mycolumn" if defined $mycolumn;
}

$sth->finish;
$dbh->disconnect;

Go to DOS and type perl test.pl. Your perl.exe may be at C:\oracle\product\10.2.0\db_1\perl\5.8.3\bin\MSWin32-x86-multi-thread\perl.exe.

Go to sqlplus and type:
select * from v$sql where sql_text like '%some identifier%' and sql_text not like '%v$sql%';

Specifically, look at buffer_gets.

Yong Huang

使用道具 举报

回复
论坛徽章:
1
行业板块每日发贴之星
日期:2010-01-12 01:01:08
27#
发表于 2010-1-13 04:18 | 只看该作者
一致性读有7个I/O,为什么是7个

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
7
BLOG每日发帖之星
日期:2008-11-24 01:01:03BLOG每日发帖之星
日期:2009-01-20 01:01:05BLOG每日发帖之星
日期:2009-02-02 01:01:04BLOG每日发帖之星
日期:2009-03-27 01:01:10BLOG每日发帖之星
日期:2009-06-15 01:01:022010新春纪念徽章
日期:2010-03-01 11:08:29ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
28#
发表于 2010-1-13 09:59 | 只看该作者

回复 #27 def3ok2 的帖子

仔细看看4楼的解答,写得很清楚,如果还不明白,
可以看viadeazhu 的实验

使用道具 举报

回复
论坛徽章:
0
29#
发表于 2010-1-13 19:23 | 只看该作者
i/o处理学习

使用道具 举报

回复
论坛徽章:
13
生肖徽章2007版:蛇
日期:2009-09-29 15:44:15ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152010年世界杯参赛球队:日本
日期:2010-05-04 17:51:192010年世界杯参赛球队:南非
日期:2010-04-28 10:07:122010年世界杯参赛球队:希腊
日期:2010-04-23 16:19:412010新春纪念徽章
日期:2010-03-01 11:08:342010年世界杯参赛球队:科特迪瓦
日期:2010-01-27 14:47:432010年世界杯参赛球队:意大利
日期:2010-01-25 08:58:012010新春纪念徽章
日期:2010-01-04 08:33:08生肖徽章2007版:鼠
日期:2009-11-10 11:54:09
30#
发表于 2010-1-13 21:47 | 只看该作者
mark

使用道具 举报

回复

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

本版积分规则 发表回复

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