1.Data skew cbo默认是按照平均的方式来评估card,当数据倾斜的时候,默认的评估 方式存在问题,因此oracle引入了直方图来解决这个问题 2.bind peeking oracle 9i中引入bind peeking,对于等值查询,如果查询字段存在直方图的情况下, 当第一次解析的时候,oracle将会做bind peeking,oracle用具体绑定变量的值代入 生成执行计划,就像没使用绑定变量一样,但是以后的执行计划都是重用第一次的, 因此当data skew的时候,bind peeking就会存在问题,因此bind peeking带来的坏处 比好处多,11g引入自适应游标共享来解决这个问题. bind peeking控制参数_optim_peek_user_binds 3.column low/high values 列的最大值和最小值当收集统计信息的时候设置method_opt=>for columns .. size 1 的时候收集,列的最大值用于评估范围查询情况的cost 和cardinality,当查询的范围超过 最大值或者最小值的时候容易导致cardinality为1,因此不准确的最大值和最小值容易 导致oracle选择错误的执行计划. 解决方法: a.及时的收集统计信息 b.手工调整最大值和最小值 c.使用动态采样(对于超大表一般没什么作用) 4.data correlation oracle在评估多列谓词的时候,默认是按照谓词独立来评估的,比如(a=1 and b=2),在计算选择 性的时候是按照(selectility(a)*selectility(b)),在11g以前oracle的统计信息里只会包含一个字段 的信息,无法识别组合列的信息,因此存在列存在相关性的时候,oracle无法准确的评估cardinality的值,容易导致错误的执行计划,解决方法: a.hint b.动态采样level设置为4以上 c.11g收集组合列的统计信息 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8984272/viewspace-619906/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8984272/viewspace-619906/