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
通常来自单块读取,这意味着索引读取
关于甲骨文工程师给这些事件起了如此明显误导性的名字的原因,有各种不同的理论。我衷心建议你阅读埃里克·埃姆里克关于这一主题的文章
至于解释数据,索引读取至少是两次逻辑读取:查找索引,然后查找表指示的表行。诸如迁移行之类的操作可能会增加读取次数。因此,通过索引读取大量行是一项昂贵的操作。然而,一个完整的表扫描可以使用多块读取来筛选行:也就是说,为一次逻辑读取而拉入多行。这就是为什么全表扫描通常更有效地检索表中相对较小百分比的行