识别低效SQL
★ 返回行与逻辑读比率;
★ 评估值准确的重要性;
★ 隐式类型转换需认真关注;
★ 请小心递归调用部分;
★ 表的访问次数需敏感;
★ 注意表真实访问行数;
★ 谨慎的观察排序与否。
还有的原因,如:水平位过高
解决办法:
1、返回行与逻辑读比率
一般而言,每获取一行开销5个以下的逻辑读是属于基本比较满意的。
发现问题方法有如下两种:
√ BUFERS/A-ROWS (statistics_level方法)
√ consistent gets/rows processed (autotrace 方法)
解决方法:
解决增加索引后,逻辑读就减少了。
2、评估值准确的重要性:
E-Rows和A-Rows差异巨大,肯定有问题。
解决方法:
收集直方图后就解决了。
3、表的访问次数需敏感:
对于又是NL连接,start访问次数又超大,肯定有问题,因为start很大的话是不会走NL连接的
解决方法:
收集直方图后就解决了。
4、类型转换需认真关注:
出现的类似filter(TO_NUMBER....这种的,就是发生了类型转换。
这种情况用不上索引,需要注意。
解决方法:
遵循的规则,是什么类型的取值就设置什么样的字段!
5、请小心递归调用部分:
递归调用的次数(recursivecalls)
解决方法:
通过10046揪出到底是什么SQL产生这么多递归调用。改写SQL。
6、谨慎的观察排序与否:
排序是很费内存的事。
发现问题方法有如下两种:
sorts (memory) sorts (disk) (autotrace的方法,其中如果出现sorts(disk)有值,说明再磁盘中排序了,情况就糟了。)