sql pan baseline

从outline到sql profile到11g的sql plan baseline,执行计划的管理和控制增强了很多,
11g的sql plan baseline可以很方便的创建,删除,修改属性。
outline : http://space.itpub.net/756652/viewspace-544642
sql profile : http://space.itpub.net/756652/viewspace-713990

生产库两个类似的语句消耗cpu资源非常高,查看该SQL有4个执行计划(11g新特性也是有利有弊),其中最差一个就是有个子查询两有索引的大表union,没有push谓词进去。根据sql_id load产生sql plan baseline,第一个语句进来4个,把其中不好的删除或者disable,fix好的执行计划 ;第二个语句只有一个差的执行计划,只能利用提示use_nl产生一个新的语句,然后再把他load到对应的sql handle中,把不好的删除或者disable,fix好的执行计划。问题得到解决。

最差的计划大致如下:
--------------------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name                    | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |                         |    20 | 32840 |  1280   (1)| 00:00:16 |
|   1 |  NESTED LOOPS                      |                         |       |       |            |          |
|   2 |   NESTED LOOPS                     |                         |    20 | 32840 |  1280   (1)| 00:00:16 |
|*  3 |    VIEW                            |                         |    20 | 32360 |  1276   (1)| 00:00:16 |
|*  4 |     COUNT STOPKEY                  |                         |       |       |            |          |
|*  5 |      FILTER                        |                         |       |       |            |          |
|*  6 |       HASH JOIN                    |                         |    20 | 12380 |  1276   (1)| 00:00:16 |
|   7 |        TABLE ACCESS BY INDEX ROWID | XXXXXXXXX_ID_PUNISH     | 21449 |  1780K|   891   (0)| 00:00:11 |
|*  8 |         INDEX RANGE SCAN DESCENDING| XXXXXXXXX_ID_PUNISH_IDX | 39486 |       |    27   (0)| 00:00:01 |
|   9 |        VIEW                        |                         | 66299 |    16M|   384   (1)| 00:00:05 |
|  10 |         UNION-ALL                  |                         |       |       |            |          |
|  11 |          TABLE ACCESS FULL         | XXXXXXXXX_USERINFO      |    71M|  3661M|   411K  (1)| 01:22:15 |
|  12 |          TABLE ACCESS FULL         | XXXXXXXXX_APPENDUSER    |  9665 |   556K|    68   (0)| 00:00:01 |
|* 13 |    INDEX UNIQUE SCAN               | RESULT_UNIQUE_CHECK     |     1 |       |     1   (0)| 00:00:01 |
|  14 |   TABLE ACCESS BY INDEX ROWID      | XXXXXXXXX_PUNISH_RESULT |     1 |    24 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------

最好的计划大致如下:
SYS@AS SYSDBA minor> SELECT *
  2  FROM   TABLE(DBMS_XPLAN.display_sql_plan_baseline(plan_name=>'SQL_PLAN_71xt5pxkcpr1cf6e28209'));
 
--------------------------------------------------------------------------------
Plan name: SQL_PLAN_71xt5pxkcpr1cf6e28209         Plan id: 4142039561
Enabled: YES     Fixed: YES     Accepted: YES     Origin: MANUAL-LOAD
--------------------------------------------------------------------------------

Plan hash value: 2370743769

------------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |                           |    20 | 33820 | 14620   (1)| 00:02:56 |
|   1 |  NESTED LOOPS                        |                           |       |       |            |          |
|   2 |   NESTED LOOPS                       |                           |    20 | 33820 | 14620   (1)| 00:02:56 |
|   3 |    NESTED LOOPS                      |                           |    20 | 33340 | 14616   (1)| 00:02:56 |
|*  4 |     VIEW                             |                           |    20 | 32720 | 14614   (1)| 00:02:56 |
|*  5 |      COUNT STOPKEY                   |                           |       |       |            |          |
|*  6 |       FILTER                         |                           |       |       |            |          |
|   7 |        NESTED LOOPS                  |                           |  7150 |  2464K| 14614   (1)| 00:02:56 |
|   8 |         TABLE ACCESS BY INDEX ROWID  | XXXXXXXXX_ID_PUNISH       |  7149 |   600K|   315   (0)| 00:00:04 |
|*  9 |          INDEX RANGE SCAN DESCENDING | XXXXXXXXX_ID_PUNISH_IDX   | 13160 |       |    27   (0)| 00:00:01 |
|  10 |         VIEW                         |                           |     1 |   267 |     2   (0)| 00:00:01 |
|  11 |          UNION ALL PUSHED PREDICATE  |                           |       |       |            |          |
|  12 |           TABLE ACCESS BY INDEX ROWID| XXXXXXXXX_USERINFO        |     1 |    54 |     1   (0)| 00:00:01 |
|* 13 |            INDEX UNIQUE SCAN         | XXXXXXXXX_USERINFO_IDX8   |     1 |       |     1   (0)| 00:00:01 |
|  14 |           TABLE ACCESS BY INDEX ROWID| XXXXXXXXX_APPENDUSER      |     1 |    59 |     1   (0)| 00:00:01 |
|* 15 |            INDEX UNIQUE SCAN         | XXXXXXXXX_APPENDUSER_IDX5 |     1 |       |     1   (0)| 00:00:01 |
|  16 |     TABLE ACCESS BY INDEX ROWID      | XXXXXXXXX_REPORTINFO      |     1 |    31 |     1   (0)| 00:00:01 |
|* 17 |      INDEX UNIQUE SCAN               | XXXXXXXXX_REPORTINFO_PK   |     1 |       |     1   (0)| 00:00:01 |
|* 18 |    INDEX UNIQUE SCAN                 | RESULT_UNIQUE_CHECK       |     1 |       |     1   (0)| 00:00:01 |
|  19 |   TABLE ACCESS BY INDEX ROWID        | XXXXXXXXX_PUNISH_RESULT   |     1 |    24 |     1   (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------------------

过了两天,又发现第三个语句,第四个语句。。。。。。,原来该语句是由程序动态拼写出来的,其中根据几个输入框内容拼写的,输入框可选,而且该语句还涉及分页,页码不定。所以不能利用baseline了,只能让业务修改下该语句,添加push_pred()提示来控制了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/756652/viewspace-743110/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/756652/viewspace-743110/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值