通过对CURSOR_SHARING三个参数的了解,将此参数设为similar还是比较可靠的,前提是一定要定期收集统计信息及直方图。
不过今天偶然看到用similar的一个问题,会导致expdp导出变慢,原文如下:
http://www.eygle.com/archives/2011/01/cursor_sharing_expdp.html
通过查询这个是一个bug,oracle已在10.2.0.4以及上的版本中修复此bug。
Bug 4513695 - Export Data Pump of large table can be very slow when CURSOR_SHARING=SIMILAR
- 缺陷: Bug:4513695 "Poor performance for SELECT with ROWNUM=1 with literal replacement"
- 症状:大型表 (100+ Gb) 的 Export Data Pump 作业速度可能要比原始 exp 客户端的导出慢很多(例如,前者的导出时间超过 24 小时)
- 版本:10.1.0.x 和 10.2.0.3.0 及更低版本
- 已在以下版本中修正:10.2.0.4.0 及更高版本;对于某些平台,Patch:5481520 提供了针对 10.2.0.3.0 的修正
- 打过补丁的文件:apa.o kko.o kkofkr.o qerco.o
- 变通方案:如果可能,在开始 Export Data Pump 作业之前先设置 CURSOR_SHARING=EXACT
- 原因:将 cursor_sharing 设置为 similar 时,基于成本的优化器(Cost Base Optimizer,CBO)中出现查询优化问题
- 跟踪:Data Pump Worker 跟踪显示“SELECT NVL((SELECT /*+ NESTED_TABLE_GET_REFS */ :"SYS_B_0" FROM ... WHERE ROWNUM = :"SYS_B_1"), :"SYS_B_2") FROM DUAL”的 elapsed fetch 时间值非常高
- 备注:针对此缺陷的修正只能作为 Bug:5481520 “Wrong results with ROWNUM and bind peeking”
的修正予以提供。