12
返回列表 发新帖
楼主: yaksha1

[体系架构] 请问谁能帮忙分析一下OLAP系统的 AWR报告

[复制链接]
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
11#
发表于 2022-1-22 19:12 | 只看该作者
sql_id= 28dj9rpq8sz34
INSERT INTO "HF_BI". "EDW_DA_MEMBER_NEW"
  WITH A AS ( SELECT TO_CHAR( JOIN_DATE,
       'yyyy' ) AS JOIN_YEAR,
       TO_CHAR( JOIN_DATE,
       'yyyy-mm' ) AS JOIN_MONTH,
       TRUNC( JOIN_DATE,
       'MM' ) AS MONTH_FIRST,
       TO_CHAR( LAST_DAY( JOIN_DATE ),
       'dd' ) AS DAYS, JOIN_CHANNEL, CHANNEL_NAME, A.MER_ID,
       B.SHOP_CODE AS SHOP_ID, B.SHOP_NAME, F.BIG_AREA_NAME, F.AREA_NAME,
       F.AREA_ID, F.BIGAREA_ID, E.CITY, COUNT( DISTINCT USER_ID ) AS MEMBERS
  FROM "ODS_DA_USER_INFO" A
  LEFT JOIN ODS_DA_SHOP_INFO B
    ON A.SHOP_ID = B.SHOP_ID
  LEFT JOIN ODS_DA_CHANNEL C
    ON A.JOIN_CHANNEL = C.ID
  LEFT JOIN ODS_DA_LEVEL_INFO D
    ON A.LEVEL_ID = D.LEVEL_ID
  LEFT JOIN VIEW_DIM_SHOP_MC E
    ON B.SHOP_CODE = E.SHOP_ID
  LEFT JOIN DIM_AREA F
    ON E.AREA_ID = F.AREA_ID
WHERE TO_CHAR( JOIN_DATE, 'yyyy-mm' )  =  :B1
~~~~~~~~~~~~~~=>建立函数索引没有.
GROUP BY TO_CHAR( JOIN_DATE,
       'yyyy' ),
       TO_CHAR( JOIN_DATE,
       'yyyy-mm' ),
       TO_CHAR( LAST_DAY( JOIN_DATE ),
       'dd' ),
       TRUNC( JOIN_DATE,
       'MM' ), JOIN_CHANNEL, CHANNEL_NAME, A.MER_ID, B.SHOP_CODE, B.SHOP_NAME,
       F.BIG_AREA_NAME, F.AREA_ID, F.BIGAREA_ID, F.AREA_NAME, E.CITY ),
       SS AS ( SELECT DISTINCT SUBSTR( DATE_CODE,
       0, 7 ) AS MONTH_ID,
       SUBSTR( DATE_CODE,
       0, 4 ) AS YEAR_ID,
       TO_DATE( SUBSTR( DATE_CODE,
       0, 4 ) || '-01-01', 'yyyy-mm-dd' ) AS YEAR_DAY,
       LAST_DAY( TO_DATE( SUBSTR( DATE_CODE,
       0, 7 ) || '-01', 'yyyy-mm-dd' ) ) AS MONTH_DAY,
       LAST_DAY( TO_DATE( SUBSTR( DATE_CODE,
       0, 7 ) || '-01',
       'yyyy-mm-dd' ) ) - TO_DATE( SUB STR( DATE_CODE,
       0, 4 ) || '-01-01', 'yyyy-mm-dd' ) AS YEAR_DAYS
  FROM "DIM_DATE"
WHERE DATE_CODE                        >= '2018-01-01'
   AND DATE_CODE                        <= TO_CHAR( CURRENT_DATE, 'yyyy-mm-dd' )
ORDER BY MONTH_ID ),
       B AS ( SELECT A.MER_ID,
       TO_CHAR( JOIN_DATE,
       'yyyy-mm' ) AS JOIN_MONTH,
       TRUNC( JOIN_DATE,
       'MM' ) AS MONTH_FIRST,
       TO_CHAR( LAST_DAY( JOIN_DATE ),
       'dd' ) AS DAYS, COUNT( DISTINCT USER_ID ) AS MEMBERS
  FROM "ODS_DA_USER_INFO" A
  LEFT JOIN ODS_DA_SHOP_INFO B
    ON A.SHOP_ID                        =  B.SHOP_ID
  LEFT JOIN ODS_DA_CHANNEL C
    ON A.JOIN_CHANNEL                   =  C.ID
  LEFT JOIN ODS_DA_LEVEL_INFO D
    ON A.LEVEL_ID                       =  D.LEVEL_ID
  LEFT JOIN VIEW_DIM_SHOP_MC E
    ON B.SHOP_CODE                      =  E.SHOP_ID
  LEFT JOIN DIM_AREA F
    ON E.AREA_ID                        =  F.AREA_ID
WHERE TO_CHAR( JOIN_DATE, 'yyyy-mm' )  =  :B1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GROUP BY A.MER_ID,
       TO_CHAR( JOIN_DATE,
       'yyyy-mm' ),
       TO_CHAR( LAST_DAY( JOIN_DATE ),
       'dd' ),
       TRUNC( JOIN_DATE,
       'MM' ) ),
       TT AS ( SELECT A.MER_ID,
       TO_CHAR( JOIN_DATE,
       'yyyy-mm' ) AS JOIN_MONTH,
       TRUNC( JOIN_DATE,
       'MM' ) AS MONTH_FIRST, JOIN_CHANNEL, CHANNEL_NAME,
       TO_CHAR( LAST_DAY( JOIN_DATE ),
       'dd' ) AS DAYS, COUNT( DISTINCT USER_ID ) AS MEMBERS
  FROM "ODS_DA_USER_INFO" A
  LEFT JOIN ODS_DA_SHOP_INFO B
    ON A.SHOP_ID                        =  B.SHOP_ID
  LEFT JOIN ODS_DA_CHANNEL C
    ON A.JOIN_CHANNEL                   =  C.ID
  LEFT JOIN ODS_DA_LEVEL_INFO D
    ON A.LEVEL_ID                       =  D.LEVEL_ID
  LEFT JOIN VIEW_DIM_SHOP_MC E
    ON B.SHOP_CODE                      =  E.SHOP_ID
  LEFT JOIN DIM_AREA F
    ON E.AREA_ID                        =  F.AREA_ID
WHERE TO_CHAR( JOIN _DATE, 'yyyy-mm' ) =  :B1
GROUP BY A.MER_ID,
       TO_CHAR( JOIN_DATE,
       'yyyy-mm' ),
       TO_CHAR( LAST_DAY( JOIN_DATE ),
       'dd' ), JOIN_CHANNEL, CHANNEL_NAME,
       TRUNC( JOIN_DATE,
       'MM' ) ),
       C AS ( SELECT A.MONTH_ID,
       A.YEAR_ID, A.YEAR_DAYS, B.MER_ID,
       TO_CHAR( JOIN_DATE,
       'yyyy' ) AS JOIN_YEAR, COUNT( DISTINCT USER_ID ) AS MEMBERS
  FROM SS A
  LEFT JOIN "ODS_DA_USER_INFO" B
    ON A.YEAR_ID                        =  TO_CHAR( B.JOIN_DATE, 'yyyy' )
   AND TO_CHAR( JOIN_DATE, 'yyyy-mm' )  <= A.MONTH_ID
WHERE A.MONTH_ID                       =  :B1
GROUP BY A.MONTH_ID, A.YEAR_ID, A.YEAR_DAYS, B.MER_ID,
       TO_CHAR( JOIN_DATE,
       'yyyy' ) ),
       D AS ( SELECT A.MER_ID, COUNT( DISTINCT USER_ID ) AS MEMBERS
  FROM "ODS_DA_USER_INFO" A
GROUP BY MER_ID )
SELECT AA.JOIN_YEAR, AA.JOIN_MONTH, AA.DAYS, AA.JOIN_CHANNEL,
       AA.CHANNEL_NAME, AA.SHOP_ID, AA.SHOP_NAME, AA.CITY, AA.BIG_AREA_NAME,
       AA.AREA_NAME, AA.MEMBERS AS M_MEMBERS, BB.MEMBERS AS LM_MEMBERS,
       CC.MEMBERS AS LY_MEMEBERS, B.MEMBERS AS M_ALL_MEMBERS,
       C.YEAR_DAYS AS YEAR_DAYS, C.MEMBERS AS Y_ALL_MEMBERS,
       CD.MEMBERS AS LY_ALL_MEMBERS, D.MEMBERS AS ALL_MEMBERS,
       TT.MEMBERS AS M_CHANNEL_ALL_MEMBERS, AA.AREA_ID, AA.BIGAREA_ID,
       AA.MER_ID
  FROM A AA
  LEFT JOIN A BB
    ON AA.MONTH_FIRST                   =  ADD_MONTHS( BB.MONTH_FIRST, 1 )
   AND AA.JOIN_CHANNEL                  =  BB.JOIN_CHANNEL
   AND AA.MER_ID                        =  BB.MER_ID
   AND AA.SHOP_ID                       =  BB.SHOP_ID
  LEFT JOIN A CC
    ON AA.MONTH_FIRST                   =  ADD_MONTHS( CC.MONTH_FIRST, 12 )
   AND A A.JOIN_CHANNEL                 =  CC.JOIN_CHANNEL
   AND AA.MER_ID                        =  CC.MER_ID
   AND AA.SHOP_ID                       =  CC.SHOP_ID
  LEFT JOIN B
    ON AA.JOIN_MONTH                    =  B.JOIN_MONTH
   AND AA.MER_ID                        =  B.MER_ID
  LEFT JOIN C
    ON AA.JOIN_YEAR                     =  C.JOIN_YEAR
   AND AA.MER_ID                        =  C.MER_ID
   AND AA.JOIN_MONTH                    =  C.MONTH_ID
  LEFT JOIN C CD
    ON AA.JOIN_MONTH                    =  TO_CHAR(ADD_MONTHS(TO_DATE(CD.MONTH_ID||'-01',
       'yyyy-mm-dd'), 12), 'yyyy-mm')
   AND AA.MER_ID                        =  CD.MER_ID
  LEFT JOIN D
    ON 1                                =  1
   AND AA.MER_ID                        =  D.MER_ID
  LEFT JOIN TT
    ON AA.JOIN_MONTH                    =  TT.JOIN_MONTH
   AND AA.JOIN_CHANNEL                  =  TT.JOIN_CHANNEL
   AND AA.MER_ID                        =  TT.MER_ID
ORDER BY AA.JOIN_YEAR, AA.JOIN_MONTH

使用道具 举报

回复
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
12#
发表于 2022-1-22 19:15 | 只看该作者
--/类似的问题,建立函数索引没有.
INSERT INTO EDW_EAT_ORDER_CB( EAT_AUTOID,
       EAT_ID, EAT_CHECKID, EAT_ROOMID, EAT_PHASEID, EAT_DESKNAME, EAT_DESKNUM,
       EAT_MANNUM, EAT_BTIME, EAT_ETIME, EAT_CZY, EAT_WAITERNAME, EAT_FWFRATIO,
       EAT_STATE, EAT_PREAUTOID, UNION_AUTOID, CSTM_AUTOID, EAT_BZ, RPT_DATE,
       DOOR_AUTOID, YX, CHECKSTRING, EAT_SALES, EAT_TYPEID, EAT_ZKAUTOID,
       DATA_FROM, EAT_MONEY, EAT_FACTMONEY, ORDER_FOOD_NUM, DOOR_CODE, ISVIP,
       SALETYPE, FROMTYPE )
SELECT A . "EAT_AUTOID", A . "EAT_ID", A . "EAT_CHECKID",
       A . "EAT_ROOMID", A . "EAT_PHASEID", A . "EAT_DESKNAME",
       A . "EAT_DESKNUM", A . "EAT_MANNUM", A . "EAT_BTIME", A . "EAT_ETIME",
       A . "EAT_CZY", A . "EAT_WAITERNAME", A . "EAT_FWFRATIO", A . "EAT_STATE",
       A . "EAT_PREAUTOID", A . "UNION_AUTOID", A . "CSTM_AUTOID", A . "EAT_BZ",
       A . "RPT_DATE", A . "DOOR_AUTOID", A . "YX", A . "CHECKSTRING",
       A . "EAT_SALES", A . "EAT_TYPEID", A . "EAT_ZKAUTOID", A . "DATA_FROM",
       B.EAT_MONEY, B.EAT_FACTMONEY, T2.ORDER_FOOD_NUM, C.DOOR_CODE, T .ISVIP,
       CASE
       WHEN EAT_CZY LIKE '%外卖%' THEN '外卖'
       WHEN EAT_CZY LIKE '%其它渠道%' THEN '外卖'
       ELSE '堂食'
       END AS SALETYPE,
       CASE
       WHEN EAT_CZY LIKE '%美团外卖%' THE N '美团'
       WHEN EAT_CZY LIKE '%其它渠道%' THEN '美团'
       WHEN EAT_CZY LIKE '%饿了么外卖%' THEN '饿了么'
       WHEN EAT_CZY LIKE '%外卖自营%' THEN '自营'
       ELSE '堂食'
       END AS FROMTYPE
  FROM "HF_BI". "ODS_EAT_INFO" A
  LEFT JOIN ( SELECT EAT_AUTOID,
       SUM (EAT_SALEMONEY) AS EAT_MONEY, SUM (EAT_FACTMONEY) AS EAT_FACTMONEY
  FROM "HF_BI". "ODS_EAT_CONSUME"
GROUP BY EAT_AUTOID ) B
    ON A .EAT_AUTOID = B.EAT_AUTOID
  LEFT JOIN ( SELECT DISTINCT EAT_CHECKID,
       1 AS ISVIP FROM "HF_BI". "ODS_EAT_MONEY" WHERE BAS_MONEYID IN ( '2018042700001461',
       '2018042700001463', '2020092400000001', '2020092400000002',
       '2020092400000003', '2021063000000001', '2018052400001167' )
GROUP BY EAT_CHECKID ) T
    ON A .EAT_CHECKID                                                     =  T .EAT_CHECKID
  LEFT JOIN ODS_G6CENTREDOOR_INFO C
    ON TRIM (A .DOOR_AUTOID)                                              =  TRIM (C.DOOR_AUTOID)
  LEFT JOIN ( SELECT EAT_AUTOID,
       SUM ( CAST ( NVL (T1.EAT_NUMBER, 0) AS NUMBER ) ) AS ORDER_FOOD_NUM
  FROM HF_BI.ODS_EAT_CONSUME T1
RIGHT JOIN ( SELECT DISTINCT PRODUCTCODE,
       PRODUCTNAME, TYPE_CODE,
       TYPE_NAME FROM "HF_BI". "DIM_PRO_DETAIL" WHERE TRIM (BIG_TYPE_NAME) IN ('主食',
       '炒饭', '财气版', '标配版', '套餐') ) T2
    ON T1.EAT_XFCODE                                                      =  T2.PRODUCTCODE
INNER JOIN ( SELECT * FROM "HF_BI". "BI_G6CENTREEAT_XFBM" WHERE EAT_TCYN =  '0' ) T3
    ON T1.EAT_XFCODE                                                      =  T3.EAT_XFCODE
WHERE T1.YX                                                              =  1
GROUP BY T1.EAT_AUTOID ) T2
    ON A .EAT_AUTOID                                                      =  T2.EAT_ AUTOID
WHERE 1                                                                  =  1
   AND TO_CHAR(RPT _DATE, 'YYYY-MM-DD')                                   >= TO_CHAR(SYSDATE-9, 'yyyy-mm-dd')
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   AND A .YX                                                              =  1

使用道具 举报

回复
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
13#
发表于 2022-1-22 19:17 | 只看该作者
基本都类似to_char之类的没有索引.

使用道具 举报

回复
论坛徽章:
78
ITPUB15周年纪念
日期:2020-08-28 17:23:53双鱼座
日期:2016-03-19 19:38:31秀才
日期:2016-02-18 09:31:52秀才
日期:2016-01-25 15:02:04双子座
日期:2016-01-19 20:35:54秀才
日期:2016-01-13 12:14:26秀才
日期:2015-12-25 15:31:10秀才
日期:2015-12-18 09:28:57秀才
日期:2015-12-14 14:56:09秀才
日期:2015-12-14 14:51:16
14#
发表于 2022-1-25 10:21 | 只看该作者
db file scattered read ,你们OLAP居然都是用buffer cache读?

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-10-28 06:00:13
15#
 楼主| 发表于 2022-1-25 14:35 | 只看该作者
wolfop 发表于 2022-1-25 10:21
db file scattered read ,你们OLAP居然都是用buffer cache读?

那该怎么调整呢?

使用道具 举报

回复
论坛徽章:
78
ITPUB15周年纪念
日期:2020-08-28 17:23:53双鱼座
日期:2016-03-19 19:38:31秀才
日期:2016-02-18 09:31:52秀才
日期:2016-01-25 15:02:04双子座
日期:2016-01-19 20:35:54秀才
日期:2016-01-13 12:14:26秀才
日期:2015-12-25 15:31:10秀才
日期:2015-12-18 09:28:57秀才
日期:2015-12-14 14:56:09秀才
日期:2015-12-14 14:51:16
16#
发表于 2022-1-26 09:25 | 只看该作者
yaksha1 发表于 2022-1-25 14:35
那该怎么调整呢?

你需要回去看OLAP的基础,对于OLAP/DW负载,很多情况下索引是没用的,更多应该使用全表、全分区扫描,利用并行执行的能力,采用direct path read方式。所以不是简单调整参数,从应用设计,数据库表逻辑设计等等要调整。

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
15
2013年新春福章
日期:2013-02-25 14:51:242014年世界杯参赛球队: 韩国
日期:2014-07-03 13:53:02玉兔
日期:2014-03-04 16:47:17马上有对象
日期:2014-02-18 16:44:082014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:09雪佛兰
日期:2013-11-22 09:55:36一汽
日期:2013-10-24 09:26:42ITPUB社区12周年站庆徽章
日期:2013-10-08 15:00:34奥迪
日期:2013-09-12 15:57:04
17#
发表于 2022-1-28 17:16 | 只看该作者
优化任何一个系统,首先制定一个目标
1.优化目标
例如,下面3项任何一项都可以认为是目标
1.1 cpu从80%优化至20%
1.2 memory从99%优化至70%
1.3 影响业务模块的sql从逻辑读100w优化至1w

2.抓峰值分析问题
2.1 cpu持续高峰期,抓系统awr,addm,ash(特别是awr快照无法覆盖的部分,例如小于1小时时)。若是单进程高cpu使用率,那就找问题sql(spid-pid-sid-sql)
2.2 memory持续高峰期,抓系统awr,addm,ash(特别是awr快照无法覆盖的部分,例如小于1小时时)。若是单进程高memory使用率,那就找问题sql(spid-pid-sid-sql)
3.3 问题sql,从执行计划入手:统计信息(大多时候是统计信息过久),索引是否失效,sql编写是否存在问题(是否过久的hint使用,是否过多的并行,where过滤条件是否过久不适合数据增长)等等。当然也可以使用sqlt工具分析。

3.建议
一个AWR无法把一个OLAP系统分析准确并给出相应的有效建议。所以,长期分析并根据业务需求进行优化吧。

使用道具 举报

回复
论坛徽章:
0
18#
发表于 2022-5-25 12:07 | 只看该作者
增加dbwr个数,调整 SQL索引。

使用道具 举报

回复

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

本版积分规则 发表回复

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