为什么Table Scan操作却一直在用db file sequential read读?

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
一个MERGE语句.两表HASH关联,MERGE到其中一个表.
从执行计划看,两表均用Table Scan,应该用scattered read读才对啊.
可是却一直在用sequential read读.一块的一块的读.慢极了.
这是什么原因啊?
注:
这两个表的每个EXTEN都包括几十个块.这个不是问题.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
ORACLE有说明对表读不能使用SEQUENTIAL READ 吗?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
不是TABLE SCAN不能使用SEQUENTIAL READ.
而是不知道为什么总在使用它, 而不使用scattered read?
我想请大家帮助找下原因.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
可能索引不合理
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 nokilled 发布
[B]可能索引不合理 [/B]

从执行计划看,也没用索引啊
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
Table Scan与scattered read没有必然关系
你可以简单认为,多块读为scattered read
单块读为sequential read
如果现在发生的都是单块读,那么就是sequential read
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 piner 发布
[B]Table Scan与scattered read没有必然关系
你可以简单认为,多块读为scattered read
单块读为sequential read
如果现在发生的都是单块读,那么就是sequential read [/B]

你说得对.
可能是我没说清楚吧. 我其实就是想问为什么总在执行单块读.
ORACLE文档说,TABLE SCAN倾向于使用多块读(DB_FILE_MULTIBLOCK_READ_COUNT现为16).
只有在以下两个条件中才会不得于不采用单块读:
每个对象EXTENT只有一个BLOCK; 或者读取的BUFFER已经在BUFFER CACHE中(我对这第二个条件不是太理解).
我想不通在我的环境中TABLE SCAN为什么要使用单块读?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 ydwangcn 发布
[B]
或者读取的BUFFER已经在BUFFER CACHE中(我对这第二个条件不是太理解).
[/B]

这个说的是1,3,5,7块在buffer中, 所以2,4,6,8块只能sequential read 了吧.
不过不会这么巧吧.
关注.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 KevinLee39 发布
[B]
这个说的是1,3,5,7块在buffer中, 所以2,4,6,8块只能sequential read 了吧.
不过不会这么巧吧.
关注. [/B]

你看每次都这样末?
个人觉得,如果不是每个extent都是一个block的话。
那么应当是有block在data buffer。
关键,不一定是1,3,5,7在buffer,你做一个级别为12的10046,看看跟踪文件就明白了
你读出来的可能是块1,下一个就是块12,再下一个可能是块30,也就是说,每个扫描的块都很远也可能啊。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
Oracle在读数据块的时候是先看在你的buffer cache中是否存在,如果不存在才到磁盘上读的÷

这样的目的也是显而易见的
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行