查看: 2394|回复: 8

以下语句的执行计划有些不大明白,这个语句有优化的空间吗

[复制链接]
论坛徽章:
16
数据库板块每日发贴之星
日期:2007-05-10 01:02:022012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:43:352010广州亚运会纪念徽章:乒乓球
日期:2010-10-14 10:59:16ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25数据库板块每日发贴之星
日期:2010-05-09 01:01:01数据库板块每日发贴之星
日期:2010-03-14 01:01:09数据库板块每日发贴之星
日期:2007-11-13 01:04:45ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2010-6-4 22:23 | 显示全部楼层 |阅读模式
SQL> select * from table(dbms_xplan.display_cursor('cjbymz5kajvyd'));
SQL_ID  cjbymz5kajvyd, child number 0
-------------------------------------
SELECT A.NE_ID V1,
       B.TACHE_NAME V2,
       NVL(A.CUMULI_CNT, 0) V3,
       NVL(A.DISPOSE_SPEED, 0) V4,
       NVL(A.ERR_CNT, 0) V5,
       NVL(A.PERMIN_HANDLE_CNT, 0) V6,
       NVL(A.AVG_TIME, 0) V7,
       TO_CHAR(A.CREATE_DATE, 'YYYY-MM-DD HH24:MI:SS') V8,
       C.VCOUNT V9
  FROM (SELECT NE_ID,
               MAX(CREATE_DATE) CREATE_DATE,
               SUM(CUMULI_CNT) CUMULI_CNT,
               SUM(DISPOSE_SPEED) DISPOSE_SPEED,
               SUM(PERMIN_HANDLE_CNT) PERMIN_HANDLE_CNT,
               SUM(AVG_TIME) AVG_TIME,
               SUM(ERR_CNT) ERR_CNT,
               SUM(AVG_TIME_HIS) AVG_TIME_HIS,
               SUM(DISPOSE_SPEED_HIS) DISPOSE_SPEED_HIS,
               SUM(PERCENTOF_FLOW_10MIN) PERCENTOF_FLOW_10MIN,
               SUM(WAIT_COMPLETE_CNT) WAIT_COMPLETE_CNT,
               SUM(WAIT_COMPLETE_TIME) WAIT_COMPLETE_TIME,
               SUM(COMPLETE_CNT_10MIN) COMPLETE_CNT_10MIN,
               SUM(AVG_COMPLETE_TIME_10MIN) AVG_COMPLETE_TIME_10MIN
          FROM (SELECT MAX(CUMULI_CNT) CUMULI_CNT,
                       MAX(DISPOSE_SPEED) DISPOSE_SPEED,
                       MAX(PERMIN_HANDLE_CNT) PERMIN_HANDLE_CNT,
                       MAX(AVG_TIME) AVG_TIME,
                       MAX(ERR_CNT) ERR_CNT,
                       NE_ID,
                       MAX(AVG_TIME_HIS) AVG_TIME_HIS,
                       MAX(DISPOSE_SPEED_HIS) DISPOSE_SPEED_HIS,
                       MAX(PERCENTOF_FLOW_10MIN) PERCENTOF_FLOW_10MIN,
                       MAX(WAIT_COMPLETE_CNT) WAIT_COMPLETE_CNT,
                       MAX(WAIT_COMPLETE_TIME) WAIT_COMPLETE_TIME,
                       MAX(COMPLETE_CNT_10MIN) COMPLETE_CNT_10MIN,
                       MAX(AVG_COMPLETE_TIME_10MIN) AVG_COMPLETE_TIME_10MIN,
                       REGION_ID,
                       MAX(CREATE_DATE) CREATE_DATE
                  FROM TKING_TEST_TAB
                 GROUP BY NE_ID, REGION_ID)
         GROUP BY NE_ID) A,
       CFG_NE_REF_TACHE B,
       (SELECT NE_ID, SUM(IF_ALARM) VCOUNT
          FROM (SELECT NE_ID,
                       CASE
                         WHEN ERR_CNT = 0 THEN
                          0
                         WHEN PERMIN_HANDLE_CNT /
                              DECODE(PERCENTOF_FLOW_10MIN, NULL, 0.000000001) > 1.5 AND
                              CUMULI_CNT >= 500 THEN
                          1
                         ELSE
                          0
                       END IF_ALARM
                  FROM TABLE(PKP_GA_ALLFLOW_TOOLS.GET_TKING_TEST_TAB(3)))
         GROUP BY NE_ID) C
WHERE A.NE_ID = C.NE_ID
   AND A.NE_ID = B.NE_ID
Plan hash value: 3349119656
--------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |                       |       |       |    47 (100)|          |
|*  1 |  HASH JOIN                           |                       | 16360 |  2076K|    47   (9)| 00:00:01 |
|*  2 |   HASH JOIN                          |                       |    49 |  5096 |    10  (20)| 00:00:01 |
|   3 |    VIEW                              |                       |    49 |  4263 |     6  (17)| 00:00:01 |
|   4 |     HASH GROUP BY                    |                       |    49 |  8330 |     6  (17)| 00:00:01 |
|   5 |      VIEW                            |                       |  1020 |   169K|     6  (17)| 00:00:01 |
|   6 |       HASH GROUP BY                  |                       |  1020 | 53040 |     6  (17)| 00:00:01 |
|   7 |        TABLE ACCESS FULL             | TKING_TEST_TAB     |  1020 | 53040 |     5   (0)| 00:00:01 |
|   8 |    TABLE ACCESS FULL                 | CFG_NE_REF_TACHE      |   147 |  2499 |     3   (0)| 00:00:01 |
|   9 |   VIEW                               |                       | 16360 |   415K|    37   (6)| 00:00:01 |
|  10 |    HASH GROUP BY                     |                       | 16360 | 32720 |    37   (6)| 00:00:01 |
|  11 |     COLLECTION ITERATOR PICKLER FETCH| GET_TKING_TEST_TAB |       |       |            |          |
--------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("A"."NE_ID"="C"."NE_ID")
   2 - access("A"."NE_ID"="B"."NE_ID")
39 rows selected.
求职 : 数据库管理员
认证徽章
论坛徽章:
32
生肖徽章2007版:狗
日期:2009-07-20 17:10:18茶鸡蛋
日期:2013-05-23 16:34:43茶鸡蛋
日期:2013-07-19 14:39:22ITPUB社区千里马徽章
日期:2013-08-22 09:58:03雪铁龙
日期:2013-08-23 13:04:11林肯
日期:2013-09-04 14:07:20兰博基尼
日期:2013-09-16 13:45:20马上有钱
日期:2014-05-14 14:07:392014年世界杯参赛球队: 波黑
日期:2014-07-03 13:24:39马上有对象
日期:2014-10-30 14:04:32
发表于 2010-6-4 23:56 | 显示全部楼层
TKING_TEST_TAB,CFG_NE_REF_TACHE表当前的数据量是否很大,NE_ID列的可选择性如何(重复值是否很多),NE_ID列上是否有索引。执行计划中TKING_TEST_TAB,CFG_NE_REF_TACHE都是全表扫描,如果基表记录数量很大则性能不是太好。如果要优化可以考虑在NE_ID上建立索引,走索引扫描。

使用道具 举报

回复
招聘 : 数据库管理员
认证徽章
论坛徽章:
20
祖国60周年纪念徽章
日期:2009-10-09 08:28:00数据库板块每日发贴之星
日期:2011-02-20 01:01:01ITPUB季度 技术新星
日期:2011-04-02 10:31:09ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:54:26玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242011新春纪念徽章
日期:2011-02-18 11:43:33
发表于 2010-6-5 09:39 | 显示全部楼层
感觉没有优化的必要了 很慢么?

使用道具 举报

回复
论坛徽章:
16
数据库板块每日发贴之星
日期:2007-05-10 01:02:022012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:43:352010广州亚运会纪念徽章:乒乓球
日期:2010-10-14 10:59:16ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25数据库板块每日发贴之星
日期:2010-05-09 01:01:01数据库板块每日发贴之星
日期:2010-03-14 01:01:09数据库板块每日发贴之星
日期:2007-11-13 01:04:45ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
 楼主| 发表于 2010-6-5 10:03 | 显示全部楼层
执行时间是20秒左右,确实偏慢!数据量超级小!
但是看执行计划又没问题

SQL> select count(*) from TKING_TEST_TAB;

  COUNT(*)
----------
      1020

SQL> select count(*) from CFG_NE_REF_TACHE;

  COUNT(*)
----------
       147

引用的地方是一个管道函数
function GET_GATHER_ORDER_FLOW(pCount in number)
    return HB_TY_GATHER_ORDER_FLOW_TAB
    pipelined is
    rec_cumoli     HB_TY_GATHER_ORDER_FLOW;

使用道具 举报

回复
论坛徽章:
16
数据库板块每日发贴之星
日期:2007-05-10 01:02:022012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:43:352010广州亚运会纪念徽章:乒乓球
日期:2010-10-14 10:59:16ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25数据库板块每日发贴之星
日期:2010-05-09 01:01:01数据库板块每日发贴之星
日期:2010-03-14 01:01:09数据库板块每日发贴之星
日期:2007-11-13 01:04:45ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
 楼主| 发表于 2010-6-5 10:05 | 显示全部楼层
我知道原因了,慢全部是在
SELECT NE_ID,
                       CASE
                         WHEN ERR_CNT = 0 THEN
                          0
                         WHEN PERMIN_HANDLE_CNT /
                              DECODE(PERCENTOF_FLOW_10MIN, NULL, 0.000000001) > 1.5 AND
                              CUMULI_CNT >= 500 THEN
                          1
                         ELSE
                          0
                       END IF_ALARM
                  FROM TABLE(PKP_GA_ALLFLOW_TOOLS.GET_GATHER_ORDER_FLOW(3))
这里,整体执行20秒,这个占了18秒。

从另一个角度分析,看执行计划,从代价来看,这里的COST是37,也占了大部分的比例!

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
32
生肖徽章2007版:狗
日期:2009-07-20 17:10:18茶鸡蛋
日期:2013-05-23 16:34:43茶鸡蛋
日期:2013-07-19 14:39:22ITPUB社区千里马徽章
日期:2013-08-22 09:58:03雪铁龙
日期:2013-08-23 13:04:11林肯
日期:2013-09-04 14:07:20兰博基尼
日期:2013-09-16 13:45:20马上有钱
日期:2014-05-14 14:07:392014年世界杯参赛球队: 波黑
日期:2014-07-03 13:24:39马上有对象
日期:2014-10-30 14:04:32
发表于 2010-6-5 22:57 | 显示全部楼层
WHEN PERMIN_HANDLE_CNT /
                              DECODE(PERCENTOF_FLOW_10MIN, NULL, 0.000000001) > 1.5 AND
                              CUMULI_CNT >= 500
WHEN后面的表达式有点复杂,楼主看能不能把这部分优化一下

使用道具 举报

回复
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2010-6-5 23:06 | 显示全部楼层

回复 #5 fjliangrq 的帖子

做个10046,就都明白了

使用道具 举报

回复
论坛徽章:
311
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2010-6-5 23:20 | 显示全部楼层
你这语句的 FROM 部分有几个视图, 先测试这几个视图的效率如何, 再比较整体的效率.

使用道具 举报

回复
论坛徽章:
400
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2010-6-6 06:27 | 显示全部楼层
非用PKP_GA_ALLFLOW_TOOLS.GET_GATHER_ORDER_FLOW(3))?不能只用SQL?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表