今天维护数据库时发现有条sql查询很慢,用set autot 发现是走upload_date字段索引的,当细致查下来发现其实并没有走索引。通过10046事件,发现走的是全表扫描:
从下面看出wait主要放映在 direct path read 该等待事件是ORACLE 11G的新特性。
Oracle Database 11g中有一个新特性,全表扫描可以通过直接路径读的方式来执行(Direct Path Read),如果全表扫描的大量数据读取是偶发性的,则直接路径读可以避免大量数据对于Buffer Cache的冲击。绕过buffer cache,这样的全表扫描就是物理读了。 在10g中,都是通过buffer来读的。
走的是全表扫描:
这是trc格式化以后得出的结果:

在维护数据库时遇到SQL查询速度慢的问题,原本应利用upload_date字段索引但实际未生效。通过10046事件分析,发现执行了全表扫描导致直接路径读等待。在Oracle 11g中,全表扫描的直接路径读可避免对Buffer Cache的冲击。为优化查询,通过SQL提示强制使SQL走索引,成功减少物理读,显著提升了查询效率。
最低0.47元/天 解锁文章
445

被折叠的 条评论
为什么被折叠?



