ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [오라클 질문] View를 사용하였을때. index scan이 발생하면서 느려지는 경우
    기술이야기/Ask 엑셈 2009. 11. 12. 15:35
    2009-10-28 08:54:23 에 등록된 질문입니다.  최윤규 님께서 질문해 주셨습니다.

    [오라클 질문] View를 사용하였을때. index scan이 발생하면서 느려지는 경우

    Q :
    안녕하세요.

    view를 통한 select 를 사용시 비정상적인 시간이 소요되는 경우가 궁금하여서
    이렇게 글을 올림니다.

    테이블 정보
    CREATE TABLE "TXPROPERF03" 
       (    "DT" NUMBER(10,0) DEFAULT 0, 
        "MOMID" NUMBER(10,0) DEFAULT 0, 
        "LISTID" NUMBER(16,0) NOT NULL ENABLE, 
        "XVAL0" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL1" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL2" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL3" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL4" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL5" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL6" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL7" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL8" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL9" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL10" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL11" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL12" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL13" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL14" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL15" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL16" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL17" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL18" NUMBER(12,2) DEFAULT 0.0, 
        "XVAL19" NUMBER(12,2) DEFAULT 0.0, 
        "MYMONDAY" NUMBER(10,0) DEFAULT 0, 
        "MYHOURMIN" NUMBER(5,0) DEFAULT 0
       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING
      STORAGE(INITIAL 5242880 NEXT 5242880 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "SSZENND01R" ;
     
      CREATE INDEX "PROPERF03_LDMYIDX" ON "TXPROPERF03" ("LISTID", "MYMONDAY") 
      PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING 
      STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "SSZENND01X" ;
     
      CREATE INDEX "PROPERF03_LIDDT_IDX" ON "TXPROPERF03" ("LISTID", "DT") 
      PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING 
      STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "SSZENND01X" ;
     
      CREATE INDEX "PROPERF03_MDIDX" ON "TXPROPERF03" ("MYMONDAY") 
      PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING 
      STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "SSZENND01X" ;
     
      ALTER TABLE "TXPROPERF03" MODIFY ("LISTID" NOT NULL ENABLE);
     
      GRANT SELECT ON "TXPROPERF03" TO "ISM000";
    

    위 테이블이 1월 부터 12월 까지 12개가 생성 되어 있습니다.

    인덱스도 동일하게 생성되어 있고요

    그리고 위 테이블 12개를 union all로 View를 생성하였습니다.
           SELECT DT-MOD(DT,60) AS DT, XVAL2 AS VAL
           FROM TXPROPERF_VW
           WHERE DT BETWEEN 1256600040 AND 1256603640
            AND LISTID =9000
    


    선택된 건수는 60건 정도 나오고

    위 와 같은 SQL을 실행 하였을때 Explain Plan은
    SELECT STATEMENT, GOAL = CHOOSE      43  2942  114738
     VIEW  ISM000A    43  2942  114738
      UNION-ALL          
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF01  4  1  12
        INDEX RANGE SCAN  ISM000A  PROPERF01_LIDDT_IDX  3  1  
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF02  3  726  28314
        INDEX RANGE SCAN  ISM000A  PROPERF02_LIDDT_IDX  2  522  
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF03  3  261  10179
        INDEX RANGE SCAN  ISM000A  PROPERF03_LIDDT_IDX  2  188  
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF04  3  259  10101
        INDEX RANGE SCAN  ISM000A  PROPERF04_LIDDT_IDX  2  186  
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF05  3  281  10959
        INDEX RANGE SCAN  ISM000A  PROPERF05_LIDDT_IDX  2  202  
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF06  3  356  13884
        INDEX RANGE SCAN  ISM000A  PROPERF06_LIDDT_IDX  2  256  
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF07  3  254  9906
        INDEX RANGE SCAN  ISM000A  PROPERF07_LIDDT_IDX  2  183  
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF08  3  235  9165
        INDEX RANGE SCAN  ISM000A  PROPERF08_LIDDT_IDX  2  169  
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF09  3  276  10764
        INDEX RANGE SCAN  ISM000A  PROPERF09_LIDDT_IDX  2  199  
       TABLE ACCESS BY INDEX ROWID  ISM000A  TXPROPERF10  9  291  11349
        INDEX RANGE SCAN  ISM000A    PROPERF10_LIDDT_IDX    2    209    
       TABLE ACCESS FULL    ISM000A    TXPROPERF11    2    1    39
       TABLE ACCESS BY INDEX ROWID    ISM000A    TXPROPERF12    4    1    15
        INDEX RANGE SCAN    ISM000A    PROPERF12_LIDDT_IDX    3    1    
    

    이었습니다.

    보통은 2초 내외가 나오지만, 비정상 적이라고 느낄때는 20초 정도 걸리고 있습니다.

    월간 테이블은 천만건정도 insert 되어 있습니다.

    검색일자는 하루정도 이며 이경우에는 (unixtime stemp)
    한 테이블에서만 검색이 되기 때문에 view를 사용하여도 같은 시간이 소요 되어야 할껏 같은데, 그렇지 않은것 같습니다.

    비정상 적인 경우에 대해서 어떤 경우에 그럴수 있는지를 알고 싶습니다.

    답변 부탁드립니다.

    A:                                           엑셈 답변 보기
    위 글은 (주) 엑셈 온라인 서비스 ASK EXEM 에서 발췌한 것임을 알려 드립니다.

    댓글 0

© Copyright 2001 ~ 2021 EXEM CO., LTD. All Rights Reserved