Vectorized Processing in a Nutshell. (in Korean)
Presented by Hyoungjun Kim, Gruter CTO and Apache Tajo committer, at DeView 2014, Sep. 30 Seoul Korea.
Vectorized Processing in a Nutshell. (in Korean)
Presented by Hyoungjun Kim, Gruter CTO and Apache Tajo committer, at DeView 2014, Sep. 30 Seoul Korea.
14. Query Transformer ??
Select department_id, salary
from employee
Where (department_id = 60 and salary = 4)
or (department_id = 60)
Select department_id, salary
from employee
Where department_id = 60;
15. Warming Up with some stretches
? ACCESS PATH
- Index Stretegy, partition
? JOIN METHOD
- NL JOIN, HASH JOIN, SORT MERGE JOIN, HASH_SJ, HASH_AJ……
? JOIN ORDER
- emp ? dept, dept ? emp
? Transformer (Logical Optimizer)
- Huristic Transformer / Cost Based Query Transformer
? ETC
- null, not null, buffer pinning, OWI, filtering optimization, function,
case, decode, nvl, pagenation, ….
24. DBMS_XPLAN.DISPLAY_CURSOR
? Grant select on v_$session to scott;
? Grant select on v_$sql_plan_statistics_all
to scott;
? Grant select on v_$sql to scott;
?? ??
1. Alter session set statistics_level = all;
2. /*+ gather_plan_statistics */
25. ?? ??
select /*+ gather_plan_statistics */ c4, c5, c6
from subquery_t1 t1
where c6 >= :b1 and c6 <= :b2
and exists ( select /*+ UNNEST */ --??????? NO_UNNEST? ??
'x'
from subquery_t2 t2
where t2.c1 = t1.c4
and t2.c3 >= :b3 and t2.c3 <= :b4);
select * from table(dbms_xplan.display_cursor(null,null,'allstats last advanced'));
57. NESTED LOOP
TAB1 TAB2
INDEX
(KEY2)
KEY1 = KEY2
TABLE ACCESS
BY ROWID
??
??
o
o
o
x
COL1 = ’10’
FLD2
LIKE
‘ABC%’
x
INDEX
(FLD1)
FLD1=‘111'
TABLE
ACCESS BY
ROWID
SELECT *
FROM TAB1 A, TAB2 B
WHERE A.KEY1 =
B.KEY2
AND A.FLD1 = ‘111’
AND A.FLD2 LIKE ‘ABC’
AND B.COL1 = ’10’ ;
SELECT *
FROM TAB1 A, TAB2 B
WHERE A.KEY1 =
B.KEY2
AND A.FLD1 = ‘111’
AND A.FLD2 LIKE ‘ABC’
AND B.COL1 = ’10’ ;
1. FLD1 ??? INDEX? ????
2. KEY2 ??? INDEX? ????
58. SORT MERGE JOIN
TAB1 TAB2
????
KEY1= KEY2
?? ????
.
.
.
.
.
.
.
.
.
.
.
.
S
O
R
T
INDEX
(COL1)
COL1='10'
TABLE
ACCESS
BY ROWID
.
.
.
.
.
.
.
.
.
FLD2
LIKE
‘ABC%’
x
S
O
R
T
FLD1=‘111'
TABLE
ACCESS
BY ROWID
INDEX
(FLD1)
SELECT *
FROM TAB1 A, TAB2 B
WHERE A.KEY1 =
B.KEY2
AND A.FLD1 = ‘111’
AND A.FLD2 LIKE ‘ABC’
AND B.COL1 = ’10’ ;
SELECT *
FROM TAB1 A, TAB2 B
WHERE A.KEY1 =
B.KEY2
AND A.FLD1 = ‘111’
AND A.FLD2 LIKE ‘ABC’
AND B.COL1 = ’10’ ;
1. KEY1 ??? KEY2 ??? INDEX ?? ??? ??? ???
59. HASH JOIN
????
HASH
FUNCTION
PARTITION
TABLE
HASH
TABLE
BITMAP
VECTOR
C31
C21
C41 C51
TAB1
HASH AREA UGA
C11
P P
P P P
SELECT *
FROM TAB1 A, TAB2 B
WHERE A.KEY1 =
B.KEY2
AND A.FLD1 = ‘111’
AND A.FLD2 LIKE ‘ABC’
AND B.COL1 = ’10’ ;
SELECT *
FROM TAB1 A, TAB2 B
WHERE A.KEY1 =
B.KEY2
AND A.FLD1 = ‘111’
AND A.FLD2 LIKE ‘ABC’
AND B.COL1 = ’10’ ;
HASH
FUNCTION
TAB2
?????(BUILD INPUT)? PGA ???? HASH TABLE? ?? ? ?? ??
?? SCAN??? PGA?? ?? ???? ???? ????.
60. ?? ?? ??
?????? ?? ??? ??? ???? ???? ??
NESTED LOOPS
NESTED LOOPS
TABLE ACCESS (BY INDEX ROWID) OF ‘SDAMASTER.SAM_ORG’
INDEX (UNIQUE SCAN) OF ‘SDAMASTER.PK1.SAM_ORG’
TABLE ACCESS (BY INDEX ROWID) OF ‘SDAMASTER.SAM_STF’
INDEX (RANGE SCAN) OF ‘SDAMASTER.INS_INS_PL’
TABLE ACCESS (BY INDEX ROWID) OF ‘SDAMASTER.INS_INS_PL’
INDEX (SKIP SCAN) OF ‘SDAMASTER.I02_INS_INS_PL’
? NESTED LOOP ?? ??
61. ???? ??
? SORT MERGE ?? ??
TABLE ACCESS FULL OF ‘??’
SORT (JOIN)
VIEW
SORT (UNIQUE)
TABLE ACCESS BY ROWID OF ‘??’
INDEX RANGE SCAN OF ‘??_??_IDX’
? HASH ?? ??
HASH JOIN
TABLE ACCESS (BY INDEX ROWID) OF ORDER
SORT (JOIN)
INDEX(RANGE SCAN) OF ORDDATE_INDEX (NON-UNIQUE)
TABLE ACCESS (FULL) OF DEPT
? ??? ??? ??? ??? ?? ??? ??
? ?? ???? ??? ??? ???? ????? ??? 2??? ??
62. ???? ??
????? ?? ?? ???? ?? ??? ???? ??? ???? ??
ROWS EXECUTION PLAN .
0 SELECT STATEMENT
1181 SORT (GROUP BY)
1181 NESTED LOOPS
1514 VIEW
256854 SORT (GROUP BY)
256854 HASH JOIN (OUTER)
256854 VIEW
256854 UNION-ALL
256852 NESTED LOOPS
0 INLIST ITERATOR (CONCATENATED)
256856 TABLE ACCESS (BY INDEX ROWID) OF ‘DPACCB’
256908 INDEX (RANGE SCAN) OF ‘DPACCB_IDX1’ (NON-UNIQUE)
24915032 TABLE ACCESS (BY INDEX ROWID) OF ‘BR_INFO’
40840104 INDEX (RANGE SCAN) OF ‘BR_INFO_IDX2’ (NON-UNIQUE)
0 INLIST ITERATOR (CONCATENATED)
422116 TABLE ACCESS (BY INDEX ROWID) OF ‘DPACCB’
422118 INDEX (RANGE SCAN) OF ‘DPACCB_IDX2’ (NON-UNIQUE)
15 VIEW
15 SORT (GROUP BY)
15 TABLE ACCESS (BY INDEX ROWID) OF ‘DPDDBS’
16080201 INDEX (RANGE SCAN) OF ‘DPDDBS_IDX1’ (NON-UNIQUE)
1688 TABLE ACCESS (BY INDEX ROWID) OF ‘DPGDPF’
3202 INDEX (RANGE SCAN) OF ‘PK_DPGDPF’ (UNIQUE)
64. SEMI JOIN
TAB1 TAB2
INDEX
(KEY2)
KEY1 = KEY2
TABLE ACCESS
BY ROWID
??
??
o
o
o
x
COL1 = ’10’
FLD2
LIKE
‘ABC%’
x
INDEX
(FLD1)
FLD1=‘111'
TABLE
ACCESS BY
ROWID
SELECT *
FROM TAB1 A, TAB2 B
WHERE A.KEY1 =
B.KEY2
AND A.FLD1 = ‘111’
AND A.FLD2 LIKE ‘ABC’
AND B.COL1 = ’10’ ;
“???”
??Table? Row? ??Table
? Row? Match??? ??
?? Join? ??? ???
???? ?? Row? ???
? ? ??? ??? ????
???.
Semi Join? Exists ? In
Operation? ???? ???
?? ??? Join ????.
69. ?? ??? ??
??? ????? ?????? ??? ??? ????
IX_DEPARTMENTS_PK ??? ??? Index Fast Full Scan? ?? ?? ?
?? ??? ???? ????.
INDEX FULL SCAN : single block I/O
INDEX FAST FULL SCAN : multi block I/O
EMPLOYEES ??? TABLE FULL? ?? ? department_id???? Sorting
88. INDEX ??? ???
SELECT *
FROM TAB1
WHERE A = '10'
AND B = '941005'
AND C = '123'
AB C
INDEX1 INDEX2
INDEX1
? ??
AB = '10'||'941005'
C = '123'
ABD C
INDEX1 INDEX2
D column
??
ABD LIKE '10'||'941005'||'%'
C = '123' INDEX2
? ??
90. SUMMARY
? Cardinality and Clustering determine
whether the “Big Job” or “Small Job”
strategy should be preferred
? If the optimizer gets these estimates rigtht,
the resulting execution plan will be
efficient within the boundaries of the given
access paths
? Know your data and business questions
? Help your optimizer. (Oracle doesn’t know
the data the way you know it.)