본문 바로가기
스터디북

<11/26> HIGH HIGH

by 파이어볼러 2015. 11. 26.

Query Transformer는 계속해서 공부해야할 분야다


_optimizer_push_pred_cost_based


9i = false rule-based


orcl@SYSTEM> alter table tab1 add(col1 varchar(10),col2 varchar(10),

col3 varchar(10),col4 varchar(10));


orcl@SYSTEM> alter table tab1 add(col5 varchar(10));



orcl@SYSTEM> alter table tab2 add(pk1 varchar(10), pk2 varchar(10));



orcl@SYSTEM> insert into tab1(col5) values ('AAAA');



orcl@SYSTEM> insert into tab1(col5) values ('BBBB');



orcl@SYSTEM> insert into tab1(col5) values ('CCCC');



orcl@SYSTEM> insert into tab1(col5) values ('DDDD');


orcl@SYSTEM> create index idx_05 on tab1(col5);


orcl@SYSTEM> create index tab2_pk1_pk2 on tab2(pk1,pk2);


select LAST_ANALYZED from dba_tables order by last_analyzed;


ndv number of distinct value


고객 번호 PK 비디오테입 FK


ERD의 관계성은 1대N N대N의 관계성을 가지고 있다


모델링에서 부서는 고정적 프로젝트는 유동적 트랜잭션 발생 가능성 높음 따로 정규화 필요


acid 모든 테이블의 속성


지나친 정규화는 성능 x 최적화에 대한 고민

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

파티션 테이블의 장점


I/O 분산효과 동시성 제어


대용량 데이터라는 전제하에 물리적으로 쪼갠다(논리적 속성은 같다)


하나의 세그먼트에 저장됨


가용성 부분적 복구


관리성 부분적 backup 추가 삭제 변경


성능 DML QUERY 성능 향상 DW에서 주로 사용


OLTP에서는? Hot Spot 분산


결과집합산출을 위해 스캔하는 데이터량을 줄일 수 있기 때문에 성능 향상 기대


대용량 heap table 문제


보관 주기 관리의 어려움 


지우는 양 만큼의 언두 및 리두량 발생 및 인덱스에 대한 리빌드 요구


1row access 성능 저하


branch node의 길이가 길어지고 leaf block depth가 깊어진다 더 많은 block access 발생


주기적 월 리포트 작업의 성능저하


손익분기점의 초과로 인한 FULL TABLE SCAN 발생 


파티션 변경


drop partition  언두 리두 소량 발생


인덱스의 파티션화로 인한 depth가 짧아짐


parallel processcion 을 이용한 partition full scan 권장


파티션 테이블에서의 parallel processing 파티션테이블의 parallel 프로세싱시에는


명시해줘야 한다  


11g new feature interval 물리적 조정x 관리의 용이성


T1(a,b,a+b) a+b를 통한 virtual column based partitioning



=====================================


chmod +x *


SELECT COUNT(*)

  2  FROM   products p

  3  WHERE  prod_list_price < 1.15 * (SELECT avg(unit_cost)

  4                                   FROM costs c

  5                                   WHERE c.prod_id = p.prod_id);

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

| Id  | Operation              | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart |

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

|   0 | SELECT STATEMENT       |          |     1 |     9 |  2651   (1)| 00:00:32 |        |

|   1 |  SORT AGGREGATE        |          |     1 |     9 |            |          |        |

|*  2 |   FILTER               |          |       |       |            |          |        |

|   3 |    TABLE ACCESS FULL   | PRODUCTS |    72 |   648 |     3   (0)| 00:00:01 |        |

|   4 |    SORT AGGREGATE      |          |     1 |     9 |            |          |        |

|   5 |     PARTITION RANGE ALL|          |  1140 | 10260 |    74   (2)| 00:00:01 |     1  |

|*  6 |      TABLE ACCESS FULL | COSTS    |  1140 | 10260 |    74   (2)| 00:00:01 |     1  |

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

  2 - filter("PROD_LIST_PRICE"<1.15* (SELECT AVG("UNIT_COST") FROM "COSTS" "C"  WHERE

              "C"."PROD_ID"=:B1))

   6 - filter("C"."PROD_ID"=:B1)



SELECT COUNT(*)

  2  FROM   products p, (SELECT prod_id, AVG(unit_cost) ac FROM costs GROUP BY prod_id) c

  3  WHERE  p.prod_id = c.prod_id AND

  4         p.prod_list_price < 1.15 * c.ac;

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

| Id  | Operation               | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstarp |

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

|   0 | SELECT STATEMENT        |          |     1 |    35 |    80   (5)| 00:00:01 |        |

|   1 |  SORT AGGREGATE         |          |     1 |    35 |            |          |        |

|*  2 |   HASH JOIN             |          |     4 |   140 |    80   (5)| 00:00:01 |        |

|   3 |    TABLE ACCESS FULL    | PRODUCTS |    72 |   648 |     3   (0)| 00:00:01 |        |

|   4 |    VIEW                 |          |    72 |  1872 |    77   (6)| 00:00:01 |        |

|   5 |     HASH GROUP BY       |          |    72 |   648 |    77   (6)| 00:00:01 |        |

|   6 |      PARTITION RANGE ALL|          | 82112 |   721K|    74   (2)| 00:00:01 |     18 |

|   7 |       TABLE ACCESS FULL | COSTS    | 82112 |   721K|    74   (2)| 00:00:01 |     18 |

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

 2 - filter("PROD_LIST_PRICE"<1.15* (SELECT AVG("UNIT_COST") FROM "COSTS" "C" WHERE

              "C"."PROD_ID"=:B1))

   6 - filter("C"."PROD_ID"=:B1)


orcl@HR> select * from table(dbms_xplan.display());


PLAN_TABLE_OUTPUT

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

Plan hash value: 72609621


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

| Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT   |           |    10 |   170 |     3   (0)| 00:00:01 |

|*  1 |  FILTER            |           |       |       |            |          |

|*  2 |   TABLE ACCESS FULL| EMPLOYEES |    10 |   170 |     3   (0)| 00:00:01 |

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


Predicate Information (identified by operation id):

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


   1 - filter(CASE  WHEN ("SALARY">=10000 AND "SALARY"<=15000) THEN

              SYS_AUDIT('HR','EMPLOYEES','EMP_POL1',3) ELSE NULL END  IS NULL)

   2 - filter("SALARY">=10000 AND "SALARY"<=12000)


16 rows selected.


create table drawing (

dwg1 number(3),

dwg2 number(3),

dwg3 number(3) );


insert into drawing values(4,3,4);

insert into drawing values(0,2,35);

insert into drawing values(12,3,2);



VARIABLE dwg1 NUMBER

VARIABLE dwg2 NUMBER

VARIABLE dwg3 NUMBER


SELECT  DWG_QTY

FROM    DRAWING

WHERE   DWG1  ||  DWG2 || DWG3   >  :DWG1 ||  :DWG2  ||  :DWG3

AND     ROWNUM  =  1 ;


alter table drawing add ( dwg_qty varchar2(10));


create index dwg_x1 on drawing(dwg1);

create index dwg_x2 on drawing(dwg2);

create index dwg_x3 on drawing(dwg3);


SELECT  /*+ USE_CONCAT */ DWG_QTY

FROM    DRAWING

WHERE   ((DWG1 = :DWG1  AND  DWG2 = :DWG2  AND  DWG3 > :DWG3)

        OR (DWG1 = :DWG1  AND  DWG2 > :DWG2)

        OR (DWG1 > :DWG1))

AND     ROWNUM  =  1 ;


'스터디북' 카테고리의 다른 글

[11/26] exec print_table  (0) 2015.11.26
[11/26] partition table  (0) 2015.11.26
<11/25> 소중한 사람  (0) 2015.11.25
<11/24> Call Me Baby  (0) 2015.11.24
<11/23> Love  (0) 2015.11.23