• 博客访问: 2134159
  • 博文数量: 1596
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-17 14:52
个人简介

暂无介绍

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(1596)

文章存档

2012年(27)

2011年(37)

2009年(6)

2008年(198)

2007年(453)

2006年(640)

2005年(235)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
sql pan baseline 2012-09-11 11:24:14

分类: Linux

从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()提示来控制了。

阅读(920) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册