免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3127 | 回复: 3
打印 上一主题 下一主题

大家帮我看看这i/o次数是怎么计算出来的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-13 06:28 |只看该作者 |倒序浏览
emp表上deptno列有索引,而且deptno = 10条件能查询出表中大部分的数据如(50%)。如该表共有4000万行数据,共放在有500000个数据块中,每个数据块为8k,则该表共有约4G,则这么多的数据不可能全放在内存中,绝大多数需要放在硬盘上。db_file_multiblock_read_count参数的值200。如果采用全表扫描,则需要500000/db_file_multiblock_read_count=500000/200=2500次I/O。如果采用索引扫描,假设deptno列上的索引都已经cache到内存中,所以可以将访问索引的开销忽略不计。因为要读出4000万x 50% = 2000万数据,假设在读这2000万数据时,有99.9%的命中率,则还是需要20000次I/O。
我觉得内存中的索引是将4000万条记录的deptno列值和这4000万条记录的rowid存在了内存中,在扫描索引的时候会有2000万个rowid被找到,每个rowid都在一个数据块中,所以i/o次数应该是   2000万/200=10万
而这里最后得到的20000次i/o是怎么计算的?用索引读取数据是不是我想的这个过程呢? 多谢

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
2 [报告]
发表于 2011-01-13 09:05 |只看该作者
这里的20000次IO  应该是  2000w*0.01%  算出来的

你的10万也不一定准确,虽然deptno上有索引,即使相关数据也在内存中,但是如果返回数据需要回表的话,那就IO次数就不好说了!

论坛徽章:
0
3 [报告]
发表于 2011-01-13 14:05 |只看该作者
本帖最后由 wodi1015 于 2011-01-13 14:08 编辑

我没算错的话2000w*0.01%=2000, 你是想说2000w*(1-99.9%) 么

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
4 [报告]
发表于 2011-01-13 19:36 |只看该作者
好就没有细致的研究过了啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP