ITPub博客

首页 > Linux操作系统 > Linux操作系统 > VPD权限惹的祸。。。

VPD权限惹的祸。。。

原创 Linux操作系统 作者:wei-xh 时间:2010-07-14 10:55:13 0 删除 编辑
AWR报告的TOP SQL里截取到的。CPU消耗近30秒。SQL文本如下:
SELECT DISTINCT AB10.BAE004 AS AB10_BAE004,
                AB10.AAB033 AS AB10_AAB033,
                AB10.BAE203 AS AB10_BAE203,
                AB10.BAZ010 AS AB10_BAZ010,
                AB10.BAE265 AS AB10_BAE265,
                AB10.BAE050 AS AB10_BAE050,
                AB10.BAE175 AS AB10_BAE175,
                AB10.AAE009 AS AB10_AAE009,
                AB10.AAE010 AS AB10_AAE010,
                AB10.AAE008 AS AB10_AAE008,
                AB10.AAE020 AS AB10_AAE020,
                AB10.BAE115 AS AB10_BAE115,
                AB10.AAE011 AS AB10_AAE011,
                AB10.AAE036 AS AB10_AAE036,
                AB10.BAB024 AS AB10_BAB024,
                AB10.BAE308 AS AB10_BAE308,
                AB10.BAE309 AS AB10_BAE309,
                AB10.BAE310 AS AB10_BAE310,
                AB10.BAE324 AS AB10_BAE324,
                (CASE
                  WHEN AAE140 IN ('31', '35', '37', '3A', '3B') THEN
                   '31'
                  ELSE
                   AAE140
                END) AS AB09_AAE140
  FROM AB10, AB09
WHERE AB10.BAE203 = AB09.BAE203
   AND AB09.AAB033 = AB10.AAB033
   AND NVL(AB09.AAE100, '0') = '1'
   AND NVL(AB09.BAE159, '0') = '0'
   AND AB10.BAE175 IN ('1', '2')
   AND AB10.BAZ010 = 36915418
   AND AB10.AAB033 = 3

查询所引用AB10,AB09都是表,而非视图。

用SQLPLUS登录执行,速度非常快,仅0.07秒,查看执行计划:
SQL> select * from table(dbms_xplan.display_cursor(null,null,'runstats_last'));

Plan hash value: 2652663149

-------------------------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name                   | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
-------------------------------------------------------------------------------------------------------------------
|   1 |  HASH UNIQUE                   |                        |      1 |      1 |      1 |00:00:00.02 |      72 |
|*  2 |   TABLE ACCESS BY INDEX ROWID  | AB09                   |      1 |      1 |   1788 |00:00:00.02 |      72 |
|   3 |    NESTED LOOPS                |                        |      1 |      5 |   1790 |00:00:00.30 |      15 |
|*  4 |     TABLE ACCESS BY INDEX ROWID| AB10                   |      1 |      3 |      1 |00:00:00.01 |       4 |
|*  5 |      INDEX RANGE SCAN          | IDX_AB10_BAZ010_AAB033 |      1 |      3 |      1 |00:00:00.01 |       3 |
|*  6 |     INDEX RANGE SCAN           | IDX_AB09_BAE203        |      1 |     11 |   1788 |00:00:00.01 |      11 |
-------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter((NVL("AB09"."BAE159",'0')='0' AND NVL("AB09"."AAE100",'0')='1' AND
              "AB09"."AAB033"="AB10"."AAB033"))
   4 - filter(("AB10"."BAE175"='1' OR "AB10"."BAE175"='2'))
   5 - access("AB10"."BAZ010"=36915418)
       filter(TO_NUMBER("AB10"."AAB033")=3)
   6 - access("AB10"."BAE203"="AB09"."BAE203")


而查看这个SQL在AWR报告中的计划,太令人惊讶了,执行计划明显变了,更不可思议的是ID从11到14多出了AB02表的执行计划信息,而查询中根本没有引用这个表。
SQL> select * from table(dbms_xplan.display_awr('b1vkyc3yj7rcs',null,null,'all'));
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------
--------
SQL_ID b1vkyc3yj7rcs
--------------------
SELECT DISTINCT        AB10.BAE004 AS AB10_BAE004,        AB10.AAB033 AS AB10_AAB033,
AB10.BAE203 AS AB10_BAE203,        AB10.BAZ010 AS AB10_BAZ010,        AB10.BAE265 AS AB10_BAE265,
      AB10.BAE050 AS AB10_BAE050,        AB10.BAE175 AS AB10_BAE175,        AB10.AAE009 AS
AB10_AAE009,        AB10.AAE010 AS AB10_AAE010,        AB10.AAE008 AS AB10_AAE008,
AB10.AAE020 AS AB10_AAE020,        AB10.BAE115 AS AB10_BAE115,        AB10.AAE011 AS AB10_AAE011,
      AB10.AAE036 AS AB10_AAE036,        AB10.BAB024 AS AB10_BAB024,         AB10.BAE308 AS
AB10_BAE308,         AB10.BAE309 AS AB10_BAE309,         AB10.BAE310 AS AB10_BAE310,
AB10.BAE324 AS AB10_BAE324,        (CASE WHEN aae140 IN ('31','35','37','3A','3B') THEN '31' ELSE
aae140 END) AS AB09_AAE140     FROM AB10,AB09  WHERE AB10.BAE203 = AB09.BAE203      AND
AB09.AAB033 = AB10.AAB033      AND NVL(AB09.AAE100, '0') = '1'      AND NVL(AB09.BAE159, '0') =
'0'      AND AB10.BAE175 IN ('1','2')       and AB10.baz010=36915418 and ab10.aab033=3
Plan hash value: 3088278305
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                        | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                        |       |       |    15 (100)|       |
|   1 |  HASH UNIQUE                     |                        |     1 |   259 |    15   (7)| 00:00:01 |
|   2 |   FILTER                         |                        |       |       |            |       |
|   3 |    TABLE ACCESS BY INDEX ROWID   | AB09                   |    11 |   418 |     2   (0)| 00:00:01 |
|   4 |     NESTED LOOPS                 |                        |     1 |   259 |    14   (0)| 00:00:01 |
|   5 |      NESTED LOOPS                |                        |     1 |   221 |    12   (0)| 00:00:01 |
|   6 |       TABLE ACCESS BY INDEX ROWID| AB10                   |     1 |   177 |     7   (0)| 00:00:01 |
|   7 |        INDEX RANGE SCAN          | IDX_AB10_BAZ010_AAB033 |     3 |       |     3   (0)| 00:00:01 |
|   8 |       TABLE ACCESS BY INDEX ROWID| AB09                   |     1 |    44 |     5   (0)| 00:00:01 |
|   9 |        INDEX RANGE SCAN          | IDX_AB09_BAE203        |    11 |       |     2   (0)| 00:00:01 |
|  10 |      INDEX RANGE SCAN            | IDX_AB09_BAE203        |    11 |       |     2   (0)| 00:00:01 |
|  11 |    TABLE ACCESS BY INDEX ROWID   | AB02                   |     1 |    29 |     3   (0)| 00:00:01 |
|  12 |     INDEX UNIQUE SCAN            | PK_AB02                |     1 |       |     2   (0)| 00:00:01 |
|  13 |     TABLE ACCESS BY INDEX ROWID  | AB02                   |     1 |    29 |     3   (0)| 00:00:01 |
|  14 |      INDEX UNIQUE SCAN           | PK_AB02                |     1 |       |     2   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$5D81F689
   3 - SEL$5D81F689 / AB09@SEL$4
   6 - SEL$5D81F689 / AB10@SEL$2
   7 - SEL$5D81F689 / AB10@SEL$2
   8 - SEL$5D81F689 / AB09@SEL$7
   9 - SEL$5D81F689 / AB09@SEL$7
  10 - SEL$5D81F689 / AB09@SEL$4
  11 - SEL$CF5359D5 / AB02@SEL$9
  12 - SEL$CF5359D5 / AB02@SEL$9
  13 - SEL$ABDE6DFF / AB02@SEL$6
  14 - SEL$ABDE6DFF / [email=AB02@SEL$6]AB02@SEL$6[/email]



SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for HPUX: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
已用时间:  00: 00: 00.02



后经查实,是VPD权限惹的祸,附件了一个AB02的子查询。
[ 本帖最后由 wei-xh 于 2010-6-29 12:46 编辑 ]

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

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2425342