db file sequential read事件

1、經過db file sequential read,獲得SQL——話說業務部門說一個小時都沒有結果html

SELECT
           TA.MRID,
           TA.GDID,
           TB.GDNAME,
           TB.CATID,
           TB.BARCODE,
           TA.SUPID||' '||Nvl(TD.SUPNAME,'未知') SUPIDNAME,
           TB.PPID,
           SUM(TA.D_XSSL) XSSL,
           SUM(TA.D_XSJE) XSJE,
           SUM(TA.D_HSJE) HSJE
      FROM SEL_GDIDDAYTOTAL TA,
           ALY_GOODSBASE TB,
           ALY_CATTYPE TC,
           ALY_SUPPLIERBASE TD
     WHERE TA.RQ>=TO_DATE(:v_ksrq,'YYYY-MM-DD') AND
           TA.RQ< TO_DATE(:v_jsrq,'YYYY-MM-DD')+1 AND
           TA.GDID=TB.GDID AND
           TC.CATID=TB.CATID AND
           TC.CATID LIKE '%%' AND
           TC.IS_MANAGERCAT='Y' AND
           TA.SUPID=TD.SUPID
     GROUP BY TA.MRID,
           TA.GDID,
           TB.GDNAME,
           TB.CATID,
           TB.BARCODE,
           TA.SUPID||' '||Nvl(TD.SUPNAME,'未知'),
           TB.PPID

2、查看執行計劃:(開發給的,dba絕對不會用F5)code

SELECT STATEMENT,GOAL = RULE
     SORT GROUP BY
       FILTER
         NESTED LOOPS
           NESTED LOOPS
             NESTED LOOPS
               TABLE ACCESS FULL【ALY_CATTYPE】
               TABLE ACCESS BY INDEX ROWID【ALY_GOODSBASE】
                 INDEX RANGE SCAN【IDX_ALY_GOODSBASE】
             VIEW
               UNION-ALL PARTITION
                 FILTER
                   TABLE ACCESS BY INDEX ROWID【MC_00.SEL_GDIDDAYTOTAL】
                     INDEX RANGE SCAN【MC_01.PK_SEL_GDIDDAYTOTAL】
                 FILTER
                   TABLE ACCESS BY INDEX ROWID【MC_01.SEL_GDIDDAYTOTAL】
                     INDEX RANGE SCAN【MC_01.PK_SEL_GDIDDAYTOTAL】
            ...
                 FILTER
                   TABLE ACCESS BY INDEX ROWID【MC_50.SEL_GDIDDAYTOTAL】
                     INDEX RANGE SCAN【MC_50.PK_SEL_GDIDDAYTOTAL】

表:ALY_GOODSBASE—— 10W條;htm

SEL_GDIDDAYTOTAL這是視圖;blog

基本上可以定位問題了:開發

①同層級的filter;file

②多層NL;filter

③index range scan(單塊讀)db

 

 

典型的SQL語句垃圾致使的。di

 

經過改寫SQL,秒出dba

 

SELECT
          TA.MRID,
          TA.GDID,
          TB.GDNAME,
          TB.CATID,
          TB.BARCODE,
          TA.SUPID||' '||Nvl(TD.SUPNAME,'未知') SUPIDNAME,
          TB.PPID,
          SUM(TA.D_XSSL) XSSL,
          SUM(TA.D_XSJE) XSJE,
          SUM(TA.D_HSJE) HSJE
     FROM (SELECT Mrid,Gdid,Supid,
                  SUM(D_XSSL) D_XSSL,
                  SUM(D_XSJE) D_XSJE,
                  SUM(D_HSJE) D_HSJE
             FROM SEL_GDIDDAYTOTAL
            WHERE RQ BETWEEN TO_DATE(:v_ksrq,'YYYY-MM-DD') AND TO_DATE(:v_jsrq,'YYYY-MM-DD')
            GROUP BY Mrid,Gdid,Supid)  TA,
          ALY_GOODSBASE TB,
          ALY_CATTYPE TC,
          ALY_SUPPLIERBASE TD
    WHERE TA.GDID =TB.GDID AND
          TC.CATID=TB.CATID AND
          TC.IS_MANAGERCAT='Y' AND
          TA.SUPID=TD.SUPID
    GROUP BY TA.MRID,
          TA.GDID,
          TB.GDNAME,
          TB.CATID,
          TB.BARCODE,
          TA.SUPID||' '||Nvl(TD.SUPNAME,'未知'),
          TB.PPID


原文見:http://blog.sina.com.cn/s/blog_546147830100a2df.html

此博主的分析過程符合DBA排查過程,同時博主的SQL改寫能力確實不錯,不過嘛,博主應該是個搞開發的,能這樣去排查問題,確實很牛逼。

相關文章
相關標籤/搜索