level 1
iq01
楼主
请教问题:
oracle版本10.2.0.4
应用程序进行某个操作时,数据库中会对两个表做关联查询,其中一个表是临时表,由于统计信息不准确,在查询的时候,被当做只有1条数据(实际百万条),而做了nested loop的驱动表。导致无法查询出结果。
通过:select * from table(dbms_xplan.display_cursor('',null)); 查看执行计划,未进行动态采样。
动态采样参数:optimizer_index_cost_adj 40
optimizer_dynamic_sampling 4
我对此临时表进行了清理统计信息,并锁定统计信息的操作。
再次重复应用程序的操作,然后查看,仍然未进行动态采样。
值得注意的是:未进行动态采样的sql是通过应用程序连接到数据库执行的。
通过把同样的语句摘出来在plsql中执行,然后查看,这样是数据库是做了动态采样的。
25 - dynamic sampling used for this statement
应用程序执行的sql的执行计划没有“dynamic sampling used for this statement”
2017年06月12日 14点06分
1
oracle版本10.2.0.4
应用程序进行某个操作时,数据库中会对两个表做关联查询,其中一个表是临时表,由于统计信息不准确,在查询的时候,被当做只有1条数据(实际百万条),而做了nested loop的驱动表。导致无法查询出结果。
通过:select * from table(dbms_xplan.display_cursor('',null)); 查看执行计划,未进行动态采样。
动态采样参数:optimizer_index_cost_adj 40
optimizer_dynamic_sampling 4
我对此临时表进行了清理统计信息,并锁定统计信息的操作。
再次重复应用程序的操作,然后查看,仍然未进行动态采样。
值得注意的是:未进行动态采样的sql是通过应用程序连接到数据库执行的。
通过把同样的语句摘出来在plsql中执行,然后查看,这样是数据库是做了动态采样的。
25 - dynamic sampling used for this statement
应用程序执行的sql的执行计划没有“dynamic sampling used for this statement”