在Oracle 9i中,Oracle有时候会选择将B-Tree索引进行BITMAP转换来进行SQL执行,从而导致极其恶劣的执行计划。
在下图中BITMAP CONVERSION FROM / TO ROWIDS 就是进行了位图转换后的执行计划:

在客户的数据库系统中,一旦这个SQL执行了位图转换,其执行时间就会拉长到50秒左右,而且单进程会占用100%的CPU资源,而禁用转换,则CPU资源使用正常,40几个毫秒就可以执行完成。
在下图中BITMAP CONVERSION FROM / TO ROWIDS 就是进行了位图转换后的执行计划:

在客户的数据库系统中,一旦这个SQL执行了位图转换,其执行时间就会拉长到50秒左右,而且单进程会占用100%的CPU资源,而禁用转换,则CPU资源使用正常,40几个毫秒就可以执行完成。
SQL> alter session set "_b_tree_bitmap_plans"=false;
Session altered.
Elapsed: 00:00:00.01
SQL> @sql
COUNT(DISTINCTTAB2.WFID)
------------------------
708
Elapsed: 00:00:00.41
SQL> alter session set "_b_tree_bitmap_plans"=true;
Session altered.
Elapsed: 00:00:00.00
SQL> @sql
COUNT(DISTINCTTAB2.WFID)
------------------------
708
Elapsed: 00:00:52.80
最后选择在全局设置隐含参数 _b_tree_bitmap_plans ,禁用了位图转换。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




