Upload
griffin-weatherly
View
222
Download
5
Embed Size (px)
Citation preview
1Jonathan LewisEOUG Jun 2000
Execution Plans
Explain Plan - part 2
Parallel - Partitions - Problems
2Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel - Partitions - Problems
• Execution Plans - reprise
• Interpreting Parallel Queries
• Interpreting Partition table queries
• New mysteries
3Jonathan LewisEOUG Jun 2000
Execution Plans
Execution Plans - reprise
select ep1.v1, count(ep2.v2)
from ep2, ep1
where ep2.v1 = 'Tyne Tees'
and ep1.n1 = ep2.n1
group by ep1.v1
order by count(ep2.v2) desc ;
4Jonathan LewisEOUG Jun 2000
Execution Plans
Execution Plans - reprise
SELECT STATEMENT (choose)
SORT (order by)
SORT (group by)
HASH JOIN
TABLE ACCESS (analyzed) EP1 (full)
TABLE ACCESS (analyzed) EP2 (full)
5Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
Slave P003 Slave P004 Slave P005
Slave P000 Slave P001 Slave P002
Co-ordinator
6Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
SORT (order by) PARA_2_SERIAL :Q819004
SORT (group by) PARA_2_PARA :Q819003
HASH JOIN PARA_2_PARA :Q819002
TABLE ACCESS EP2(full) P_2_P :Q819000
TABLE ACCESS EP1(full) P_2_P :Q819001
7Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
Co-ordinator
Slave P003 Slave P004 Slave P005
Slave P000 Slave P001 Slave P002
Slave P003 Slave P004 Slave P005
Slave P000 Slave P001 Slave P002
Select x 2
Hash
Group
Order
Q0, Q1
Q2
Q3
Q4
8Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
:Q819000 SELECT /*+ NO_EXPAND ROWID(A1) */
A1."N1" C0,A1."V2" C1
FROM "EP2" A1
WHERE ROWID BETWEEN :B1 AND :B2
AND A1."V1"='Tyne Tees'
:Q819001 SELECT /*+ NO_EXPAND ROWID(A1) */
A1."N1" C0,A1."V1" C1
FROM "EP1" A1
WHERE ROWID BETWEEN :B1 AND :B2
9Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
:Q819004 SELECT A1.C0 C0,A1.C1 C1 FROM :Q819003 A1 ORDER BY A1.C0 DESC
:Q819003 SELECT COUNT(A1.C1) C0,A1.C0 C1 FROM :Q819002 A1 GROUP BY A1.C0
:Q819002 SELECT/*+ ORDERED NO_EXPAND USE_HASH(A2) */ A2.C1 C0,A1.C1 C1 FROM :Q819000 A1, :Q819001 A2 WHERE A2.C0=A1.C0
10Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
select
tq_id, server_type, process,
num_rows, bytes, waits
from
v$pq_tqstat
order by
tq_id,
server_type desc;
11Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
ID SERVER_TYP PROCESS ROWS BYTES WAITS 0 Producer P005 67 1135 10 P004 67 1127 10 P003 66 1109 10 Consumer P002 80 1343 4 P000 58 982 4 P001 62 1046 4
1 Producer P005 78 16287 14 P004 66 13788 12 P003 56 11703 10 Consumer P002 80 16703 10 P000 57 11909 8 P001 63 13166 9
12Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
Co-ordinator
Slave P003 Slave P004 Slave P005
Slave P000 Slave P001 Slave P002
Slave P003 Slave P004 Slave P005
Slave P000 Slave P001 Slave P002
Select x 2
Hash
Group
Order
Q0, Q1
Q2
Q3
Q4
13Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
SORT (order by) PARA_2_SERIAL :Q819002
SORT (group by) PARA_2_PARA :Q819001
NESTED LOOPS PARA_2_PARA :Q819000
TABLE ACCESS EP2(full) P_WITH_Parent
TABLE ACCESS EP1(by index rowid) P_W_P
INDEX UNIQUE EP1_PK (unique) P_W_P
14Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel Execution
SELECT /*+ ORDERED NO_EXPAND
USE_NL(A2) INDEX(A2 "EP1_PK") */
A2."V1" C0, A1.C1 C1
FROM ( SELECT /*+ NO_EXPAND ROWID(A3) */
A3."N1" C0,A3."V2" C1
FROM "EP2" A3
WHERE ROWID BETWEEN :B1 AND :B2
AND A3."V1"='Tyne Tees'
) A1,
"EP1" A2
WHERE A2."N1" = A1.C0
15Jonathan LewisEOUG Jun 2000
Execution Plans
PQ Summary
• Node, Other, Other_tag
• V$PQ_TQSTAT
• Messages can be the main cost
16Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel - Partitions - Problems
Partitioned tables
17Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
create table ep1 (n1, v1, v2)
partition by range (n1) (
partition p1 values less than (50),
partition p2 values less than (100),
partition p3 values less than (150)
)
as
select . . .
18Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
select max(v1)
from ep1
where n1 = 45
SORT (AGGREGATE)
TABLE ACCESS (BY LOCAL INDEX ROWID) OF EP1
INDEX (UNIQUE SCAN) OF 'EP1_PK' (UNIQUE)
19Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
select max(v1)
from ep1
where n1 between 45 and 60;
SORT (AGGREGATE)
PARTITION RANGE (ITERATOR)
TABLE ACCESS (FULL) OF 'EP1'
20Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
create table ref_n1 (r1 number, c1 varchar2(10));
select c1, max(n1)
from ref_n1, ep1
where ref_n1.c1 like 'S%'
and ep1.n1 = ref_n1.r1
group by
ref_n1.c1;
21Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
SORT (GROUP BY)
NESTED LOOPS
TABLE ACCESS (FULL) OF 'REF_N1'
PARTITION RANGE (ITERATOR)
INDEX (UNIQUE SCAN) OF 'EP1_PK' (UNIQUE)
22Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
SORT (AGGREGATE)
TABLE ACCESS (BY LOCAL INDEX ROWID) OF EP1
INDEX (UNIQUE SCAN) OF 'EP1_PK' (UNIQUE)
SORT (aggregate)
TABLE ACCESS (ana) JPL1 EP1 (by local index rowid)
Pt id: 2 Pt Range: 1 - 1
INDEX (ana) UNIQUE JPL1 EP1_PK (range scan)
Pt id: 2 Pt Range: 1 - 1
23Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
SORT (AGGREGATE)
PARTITION RANGE (ITERATOR)
TABLE ACCESS (FULL) OF 'EP1'
SORT (AGGREGATE)
PARTITION RANGE (ITERATOR)
Pt id: 2 Pt Range: 1 - 2
TABLE ACCESS (FULL) OF 'EP1'
Pt id: 2 Pt Range: 1 - 2
24Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
SORT (group by)
NESTED LOOPS
TABLE ACCESS REF_N1 (full)
PARTITION RANGE (iterator)
Pt id: 4 Pt Range: KEY - KEY
INDEX (analyzed) UNIQUE EP1_PK (unique scan)
Pt id: 4 Pt Range: KEY - KEY
25Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
select max(v1)
from ep1
where n1 = to_number(:b1)
26Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
SORT (aggregate)
PARTITION RANGE (single)
Pt id: 2 Pt Range: KEY - KEY
TABLE ACCESS (ana) JPL1 EP1 (by local index rowid)
Pt id: 2 Pt Range: KEY - KEY
INDEX (analyzed) UNIQUE JPL1 EP1_PK (range scan)
Pt id: 2 Pt Range: KEY - KEY
27Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
select ep1.v1, count(ep2.v2)
from ep2, ep1
where ep2.v1 = 'Tyne Tees'
and ep2.n1 between 80 and 120
and ep1.n1 = ep2.n1
group by
ep1.v1
28Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Table
SORT (GROUP BY) PARTITION RANGE (ITERATOR) HASH JOIN TABLE ACCESS (FULL) OF 'EP1' TABLE ACCESS (FULL) OF 'EP2'
SORT (GROUP BY) HASH JOIN PARTITION RANGE (ITERATOR) TABLE ACCESS (FULL) OF 'EP1' PARTITION RANGE (ITERATOR) TABLE ACCESS (FULL) OF 'EP2'
29Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
create table ep1 (n1, v1, v2)
partition by range (n1) (
partition p1 values less than (50),
partition p2 values less than (100),
partition p3 values less than (150),
partition p4 values less than (250)
)
as
select . . .
30Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
create table ep2 (n1, n2, v1, v2)
partition by range (n1) (
partition p1 values less than (51),
partition p2 values less than (101),
partition p3 values less than (151),
partition p4 values less than (251)
)
as
select . . .
31Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
SORT (group by) PARTITION RANGE(iterator) Ptid: 2 Pt Rng: 2-3 HASH JOIN TABLE ACCESS EP1(full)Ptid: 2 Pt Rng: 2-3 TABLE ACCESS EP2(full)Ptid: 2 Pt Rng: 2-3
SORT(group by) HASH JOIN PARTITION RANGE(iterator)Ptid: 3 Pt Rng: 2-3 TABLE ACCESS EP1(full)Ptid: 3 Pt Rng: 2-3 PARTITION RANGE(iterator)Ptid: 5 Pt Rng: 2-3 TABLE ACCESS EP2(full)Ptid: 5 Pt Rng: 2-3
32Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
SELECT /*+ ORDERED NO_EXPAND USE_HASH(A2) SWAP_JOIN_INPUTS(A2)
*/ A2.C1 C0,A1.C1C1
FROM (SELECT /*+ NO_EXPAND FULL(A3) */ A3."N1" C0,A3."V2" C1
FROM "EP2" PARTITION(:B1) A3 WHERE A3."V1"='Tyne Tees' AND A3."N1">=80 AND A3."N1"<=120) A1,(SELECT /*+ NO_EXPAND FULL(A4) */
A4."N1" C0,A4."V1" C1 FROM "EP1" PARTITION(:B1)A4 WHERE A4."N1">=80 AND A4."N1"<=120) A2
WHERE A2.C0=A1.C0
33Jonathan LewisEOUG Jun 2000
Execution Plans
Partitioned Tables
SELECT /*+ ORDERED NO_EXPAND USE_HASH(A2) SWAP_JOIN_INPUTS(A2) */
A2.C1 C0,A1.C1 C1 FROM (SELECT /*+ NO_EXPAND FULL(A3) */
A3."N1" C0,A3."V2" C1 FROM "EP2" PARTITION_SET(1) A3 WHERE A3."V1"='Tyne Tees' AND A3."N1">=80 AND A3."N1"<=120) A1,:Q849000 A2
WHERE A2.C0=A1.C0
SELECT /*+ NO_EXPAND ROWID(A1) */ A1."N1" C0,A1."V1" C1
FROM "EP1" PARTITION(:B1) A1 WHERE ROWID BETWEEN :B2 AND :B3 AND A1."N1">=80 AND A1."N1"<=120
34Jonathan LewisEOUG Jun 2000
Execution Plans
Partition Summary
• Partition ID
• Partition Start / Partition Stop
• KEY - KEY vs strictly numbered
• Iterator / Single
35Jonathan LewisEOUG Jun 2000
Execution Plans
Parallel - Partitions - Problems
Problems
36Jonathan LewisEOUG Jun 2000
Execution Plans
Problems
select sum(sales_value) from rls_demo;
SORT (AGGREGATE)
TABLE ACCESS (FULL) OF 'RLS_DEMO'
37Jonathan LewisEOUG Jun 2000
Execution Plans
Problems
SORT (AGGREGATE)
NESTED LOOPS
VIEW
SORT (UNIQUE)
TABLE ACCESS (FULL) OF 'RLS_CONTROL'
TABLE ACCESS (FULL) OF 'RLS_DEMO'
38Jonathan LewisEOUG Jun 2000
Execution Plans
Problems
'owner in (
select t.owner
from rls_control t
where manager =
sys_context(''rls_demo'',''role'')
)'
39Jonathan LewisEOUG Jun 2000
Execution Plans
Problems
create type jpl_item as object (n1 number, v1 varchar2(32));
/
create type jpl_tab_type as table of jpl_item;
/
create table demo_nest (
id number,
nest jpl_tab_type
)
nested table nest store as t_nested;
40Jonathan LewisEOUG Jun 2000
Execution Plans
Problems
select
sum(n.n1)
from
demo_nest t,
table(t.nest) n
where
n.v1 = 'asdf';
41Jonathan LewisEOUG Jun 2000
Execution Plans
Problems
SORT (AGGREGATE)
TABLE ACCESS (BY INDEX ROWID) OF 'T_NESTED'
INDEX (RANGE SCAN) OF 'TN_V1' (NON-UNIQUE)
Where has the parent table DEMO_NEST gone ?
42Jonathan LewisEOUG Jun 2000
Execution Plans
Problems
select it1.location, it1.sales,
(
select sum(sales)
from inline_test ita
where ita.area = it1.area
and ita.location_type = it1.location_type
) area_sales
from inline_test it1
where it1.location_type != 'WAREHOUSE';
43Jonathan LewisEOUG Jun 2000
Execution Plans
Problems
SELECT STATEMENT Optimizer=CHOOSE
TABLE ACCESS (FULL) OF 'INLINE_TEST'
Where is the in-line table ?
44Jonathan LewisEOUG Jun 2000
Execution Plans
Problem Summary
alter session
set events
‘10046 trace name context forever, level 12’
45Jonathan LewisEOUG Jun 2000
Execution Plans
Conclusion
? ? ? ?