SQL.PLSQL
2011-12-16
BITMAP CONVERSION 执行计划导致CPU 100%
在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 ,禁用了位图转换。
历史上的今天
- 2016-12-16 Oracle 数据库12.2新特性 - Big Data and Data Warehousing
- 2013-12-16 Oracle SQL Developer 4.0发布-AWR报告等新功能
- 2008-12-16 终于解决了MSN - Live Messenger 性能问题
- 2006-12-16 据说这是一个幸运的年份...
- 2005-12-16 人生自是有情痴
- 2005-12-16 Day Day Up
- 2004-12-16 使用触发器实现数据库级守护,防止DDL操作
- 2004-12-16 如何获得跟踪文件名称
- 2004-12-16 使用dbms_rowid包获得rowid的详细信息
- 2004-12-16 Oracle进程内存结构-如何察看Oracle进程消耗的内存
- 2004-12-16 使用Oracle Wrap工具加密你的代码
- 2004-12-16 如何获得当前数据库的SCN值