楼主: myfriend2010

[FAQ] sql 使CPU使用100%,棘手!

[复制链接]
论坛徽章:
21
在线时间
日期:2007-07-25 04:01:022012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:09:23
131#
发表于 2007-12-14 15:47 | 只看该作者
既然你那么肯定,那麻烦你再做一个测试。把下面的SQL的EXPLAIN OUTPUT放上来看看?

insert into session.V_HML_EAL_tem( group_id ,pre_m_arpu_d , EXIST_CUST_C,
        ADD_CUST_C,LOSS_CUST_C, EXIST_AVG_ARPU,exist_M,exist_CLV,
        ADD_AVG_ARPU,add_M,Add_CLV, LOSS_AVG_ARPU,loss_M,loss_CLV,
        EXIST_SUM_NOW_ARPU,ADD_SUM_NOW_ARPU,LOSS_SUM_NOW_ARPU) (
   select coalesce(a1.group_id,a2.group_id,a3.group_id) as group_id,
           coalesce(a1.pre_m_arpu_d,a2.pre_m_arpu_d,a3.pre_m_arpu_d),
           EXIST_CUST_C,ADD_CUST_C,LOSS_CUST_C, a1.arpu,a1.m,a1.clv, a2.arpu,
           a2.m,a2.clv, a3.arpu,a3.m,a3.clv, a1.EXIST_SUM_NOW_ARPU,
           a2.ADD_SUM_NOW_ARPU,a3.LOSS_SUM_NOW_ARPU
   from (
      select b.cust_group_id as group_id, aa.pre_m_arpu_d,sum(aa.PRE_M_ARPU)
              as arpu,sum(cc.m) as m,sum(cc.CLV) as clv, count(b.cust_id) as
              EXIST_CUST_C, sum(aa.NOW_ARPU) as EXIST_SUM_NOW_ARPU
      from
         (select distinct cust_id
         from session.V_PRE_EXP_GROUP_CUST1 ) a inner join
              ccp.PAR_CUST_CUST_GRP_ASSOC_200710 b on b.cust_id = a.cust_id
              inner join ccp.CUST_CHURN_INFO_200710 aa on
              aa.cust_id=a.cust_id inner join ccp.CUST_CCP_INFO_200710 cc on
              cc.cust_id=a.cust_id
      group by b.cust_group_id,aa.pre_m_arpu_d ) a1 full outer join
      (select b.cust_group_id as group_id,sum(cust.PRE_M_ARPU) as arpu,
              sum(cc.m) as m,sum(cc.CLV) as clv, count(b.cust_id) as
              ADD_CUST_C, cust.pre_m_arpu_d, sum(cust.NOW_ARPU) as
              ADD_SUM_NOW_ARPU
      from ccp.PAR_CUST_CUST_GRP_ASSOC_200710 b inner join
         (select base.cust_id,base.pre_m_arpu_d,base.NOW_ARPU,base.PRE_M_ARPU
         from ccp.CUST_CHURN_INFO_200710 base
         where on_net_time=4) cust on cust.cust_id=b.cust_id inner join
              ccp.CUST_CCP_INFO_200710 cc on cc.cust_id=b.cust_id
      group by b.cust_group_id,cust.pre_m_arpu_d ) a2 on
           a1.group_id=a2.group_id and a1.pre_m_arpu_d= a2.pre_m_arpu_d full
           outer join (
      select a.cust_group_id as group_id,sum(churn.PRE_M_ARPU) as arpu,
              sum(cc.m) as m,sum(cc.CLV) as clv, count(a.cust_id) as
              LOSS_CUST_C, churn.pre_m_arpu_d, sum(churn.NOW_ARPU) as
              LOSS_SUM_NOW_ARPU
      from ccp.PAR_CUST_CUST_GRP_ASSOC_200710 a inner join
         (select b.cust_id as cust_id,b.pre_m_arpu_d,b.PRE_M_ARPU,b.NOW_ARPU
         from ccp.CUST_CHURN_INFO_200710 b
         where b.LEAVE_DATE <= '3000-11-30 00:00:00') churn on
              churn.cust_id=a.cust_id inner join ccp.CUST_CCP_INFO_200710 cc
              on cc.cust_id=a.cust_id
      group by a.cust_group_id,churn.pre_m_arpu_d ) a3 on
           a1.group_id=a3.group_id and a1.pre_m_arpu_d= a3.pre_m_arpu_d )
with ur

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
132#
发表于 2007-12-14 19:23 | 只看该作者
原帖由 myfriend2010 于 2007-12-14 15:12 发表



我可以肯定问题就在临时表那边,如果不使用临时表就正常!而且就是这段代码造成的!这个askgyliu你就相信我吧!

唉,说了无数遍很有可能就是临时表统计信息的问题...你想想使用临时表和内嵌查询的最明显的区别在哪里....

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
133#
 楼主| 发表于 2007-12-14 19:26 | 只看该作者
恩,我知道!


原帖由 wangzhonnew 于 2007-12-14 19:23 发表

唉,说了无数遍很有可能就是临时表统计信息的问题...你想想使用临时表和内嵌查询的最明显的区别在哪里....

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
134#
发表于 2007-12-14 19:32 | 只看该作者
原帖由 myfriend2010 于 2007-12-14 20:26 发表
恩,我知道!



那你有没有加索引,对临时表作runstats然后再看访问计划呢?反正从原先我看到的计划看,db2对临时表的card使用151,应该远远小于真实数值吧

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
135#
 楼主| 发表于 2007-12-14 19:34 | 只看该作者
原帖由 askgyliu 于 2007-12-14 15:47 发表
既然你那么肯定,那麻烦你再做一个测试。把下面的SQL的EXPLAIN OUTPUT放上来看看?

insert into session.V_HML_EAL_tem( group_id ,pre_m_arpu_d , EXIST_CUST_C,
        ADD_CUST_C,LOSS_CUST_C, EXIST_AVG_ARPU,exist_M,exist_CLV,
        ADD_AVG_ARPU,add_M,Add_CLV, LOSS_AVG_ARPU,loss_M,loss_CLV,
        EXIST_SUM_NOW_ARPU,ADD_SUM_NOW_ARPU,LOSS_SUM_NOW_ARPU) (
   select coalesce(a1.group_id,a2.group_id,a3.group_id) as group_id,
           coalesce(a1.pre_m_arpu_d,a2.pre_m_arpu_d,a3.pre_m_arpu_d),
           EXIST_CUST_C,ADD_CUST_C,LOSS_CUST_C, a1.arpu,a1.m,a1.clv, a2.arpu,
           a2.m,a2.clv, a3.arpu,a3.m,a3.clv, a1.EXIST_SUM_NOW_ARPU,
           a2.ADD_SUM_NOW_ARPU,a3.LOSS_SUM_NOW_ARPU
   from (
      select b.cust_group_id as group_id, aa.pre_m_arpu_d,sum(aa.PRE_M_ARPU)
              as arpu,sum(cc.m) as m,sum(cc.CLV) as clv, count(b.cust_id) as
              EXIST_CUST_C, sum(aa.NOW_ARPU) as EXIST_SUM_NOW_ARPU
      from
         (select distinct cust_id
         from session.V_PRE_EXP_GROUP_CUST1 ) a inner join
              ccp.PAR_CUST_CUST_GRP_ASSOC_200710 b on b.cust_id = a.cust_id
              inner join ccp.CUST_CHURN_INFO_200710 aa on
              aa.cust_id=a.cust_id inner join ccp.CUST_CCP_INFO_200710 cc on
              cc.cust_id=a.cust_id
      group by b.cust_group_id,aa.pre_m_arpu_d ) a1 full outer join
      (select b.cust_group_id as group_id,sum(cust.PRE_M_ARPU) as arpu,
              sum(cc.m) as m,sum(cc.CLV) as clv, count(b.cust_id) as
              ADD_CUST_C, cust.pre_m_arpu_d, sum(cust.NOW_ARPU) as
              ADD_SUM_NOW_ARPU
      from ccp.PAR_CUST_CUST_GRP_ASSOC_200710 b inner join
         (select base.cust_id,base.pre_m_arpu_d,base.NOW_ARPU,base.PRE_M_ARPU
         from ccp.CUST_CHURN_INFO_200710 base
         where on_net_time=4) cust on cust.cust_id=b.cust_id inner join
              ccp.CUST_CCP_INFO_200710 cc on cc.cust_id=b.cust_id
      group by b.cust_group_id,cust.pre_m_arpu_d ) a2 on
           a1.group_id=a2.group_id and a1.pre_m_arpu_d= a2.pre_m_arpu_d full
           outer join (
      select a.cust_group_id as group_id,sum(churn.PRE_M_ARPU) as arpu,
              sum(cc.m) as m,sum(cc.CLV) as clv, count(a.cust_id) as
              LOSS_CUST_C, churn.pre_m_arpu_d, sum(churn.NOW_ARPU) as
              LOSS_SUM_NOW_ARPU
      from ccp.PAR_CUST_CUST_GRP_ASSOC_200710 a inner join
         (select b.cust_id as cust_id,b.pre_m_arpu_d,b.PRE_M_ARPU,b.NOW_ARPU
         from ccp.CUST_CHURN_INFO_200710 b
         where b.LEAVE_DATE  

ok 了

exfmt3.txt

141.17 KB, 下载次数: 3

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
136#
 楼主| 发表于 2007-12-14 19:37 | 只看该作者
马上贴出来

原帖由 wangzhonnew 于 2007-12-14 19:32 发表

那你有没有加索引,对临时表作runstats然后再看访问计划呢?反正从原先我看到的计划看,db2对临时表的card使用151,应该远远小于真实数值吧

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
137#
发表于 2007-12-14 19:39 | 只看该作者
你的那么多tablescan本身就是问题,为啥到现在也不修复呢?

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
138#
 楼主| 发表于 2007-12-14 19:49 | 只看该作者
原帖由 myfriend2010 于 2007-12-14 19:37 发表
马上贴出来





exfmt4为对临时表runstats的数据
exfmt5为注释掉对临时表runstats的数据

exfmt4.txt

148.04 KB, 下载次数: 6

exfmt5.txt

148.01 KB, 下载次数: 3

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
139#
 楼主| 发表于 2007-12-14 19:50 | 只看该作者
恩,我忙过这几天就整


原帖由 wangzhonnew 于 2007-12-14 19:39 发表
你的那么多tablescan本身就是问题,为啥到现在也不修复呢?

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
140#
发表于 2007-12-14 19:57 | 只看该作者
临时表真的只有151行?select count(*)出来看看呢

[ 本帖最后由 wangzhonnew 于 2007-12-14 20:59 编辑 ]

使用道具 举报

回复

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

本版积分规则 发表回复

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