Oracle等待事件:您如何解释db文件分散/顺序读取?

Oracle等待事件:您如何解释db文件分散/顺序读取?,oracle,wait,Oracle,Wait,让我们举两个例子: 全表扫描导致以下结果: TOTAL TIME EVENT WAITS WAITED ------------------------------ ----- ------ db file scattered read 460 13 这是通过非选择性索引范围扫描进行访问的结果:

让我们举两个例子: 全表扫描导致以下结果:

                               TOTAL   TIME
EVENT                          WAITS WAITED
------------------------------ ----- ------
db file scattered read           460     13
这是通过非选择性索引范围扫描进行访问的结果:

                               TOTAL   TIME
EVENT                          WAITS WAITED
------------------------------ ----- ------
db file scattered read            15      3
db file sequential read         6209    140
我希望在从非选择性索引中获取许多rowid之后,能够进行分散的读取。只需一次顺序读取即可读取碎片整理I/O系统上的所有表


你能解释一下如何读取这些数据吗?

这两个等待事件的命名相当混乱。它们都表示I/O瓶颈:
db file discreated read
通常来自多块读取,这意味着全表扫描,而
db file sequential read
通常来自单块读取,这意味着索引读取

关于甲骨文工程师给这些事件起了如此明显误导性的名字的原因,有各种不同的理论。我衷心建议你阅读埃里克·埃姆里克关于这一主题的文章


至于解释数据,索引读取至少是两次逻辑读取:查找索引,然后查找表指示的表行。诸如迁移行之类的操作可能会增加读取次数。因此,通过索引读取大量行是一项昂贵的操作。然而,一个完整的表扫描可以使用多块读取来筛选行:也就是说,为一次逻辑读取而拉入多行。这就是为什么全表扫描通常更有效地检索表中相对较小百分比的行