SlideShare a Scribd company logo
1 of 40
Download to read offline
www.enkitec.com 
1 
Oracle 
Database 
In-­‐Memory 
Op4on 
in 
Ac4on 
Tanel 
Põder 
& 
Kerry 
Osborne 
Accenture 
Enkitec 
Group 
h4p://www.enkitec.com
www.enkitec.com 
2 
Intro: 
About 
• Tanel 
Põder 
• Consultant, 
Trainer, 
Troubleshooter 
• Oracle 
Database 
Performance 
geek 
• Exadata 
Performance 
geek 
• In-­‐Memory 
Columnar 
Cache 
perf. 
geek 
;-­‐) 
• h4p://blog.tanelpoder.com 
• Professor 
Osborne 
• Nice 
Guy 
and 
All 
Around 
Prince 
of 
a 
Fellow 
J 
• Worked 
on 
Oracle 
since 
v2 
• Also 
a 
performance 
geek 
• h4p://kerryosborne.oracle-­‐guy.com 
Expert 
Oracle 
Exadata 
book 
(with 
Kerry 
Osborne 
and 
Randy 
Johnson 
of 
Enkitec)
www.enkitec.com 
3 
Intro: 
Goals 
• Walkthrough 
of 
a 
few 
example 
queries 
that 
benefit 
from 
In-­‐Memory 
and 
Oracle 
12.1.0.2 
features 
• First 
disable 
most 
of 
the 
performance 
features 
and 
then 
re-­‐ 
enable 
one 
by 
one 
(and 
show 
performance 
metrics)
www.enkitec.com 
4 
Intro: 
What 
do 
databases 
do? 
1. Retrieve 
data 
2. Process 
data 
3. Return 
results
www.enkitec.com 
5 
Tradional 
Database 
I/O 
flow 
• Retrieve 
files 
Database 
Server 
Aggregate 
Filter 
Join 
Storage 
files 
Data 
Blocks 
Read 
blocks 
from 
disks 
-­‐> 
Process 
-­‐> 
Return 
Send 
all 
read 
data 
to 
host 
Filter, 
join, 
aggregate 
in 
DB 
server
www.enkitec.com 
6 
Exadata 
I/O 
flow 
• Retrieve 
files 
Database 
Server 
Aggregate 
Join 
Storage 
files 
Rows 
Filter 
Read 
blocks 
from 
disks 
-­‐> 
Process 
-­‐> 
Return 
Throw 
away 
non-­‐needed 
rows/cols 
F 
Send 
only 
needed 
rows 
back 
Final 
filter, 
join, 
aggregaon 
in 
DB 
server
-­‐> 
Process 
-­‐> 
Return 
C Join 
C 
www.enkitec.com 
7 
In-­‐Memory 
Column 
Store 
I/O 
flow 
Database 
Server 
Aggregate 
Filter 
• Retrieve 
Disk 
storage 
not 
in 
data 
retrieval 
crical 
path 
at 
all 
Fast 
RAM 
access. 
No 
disk 
latency 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
Avoid 
RAM 
access 
with 
In-­‐Memory 
"storage" 
indexes 
Oracle 
12c 
also 
brings 
data 
processing 
improvements 
(SIMD, 
vector 
joins, 
vector 
aggregaon, 
approximate 
disnct)
www.enkitec.com 
8 
Data 
Retrieval
www.enkitec.com 
9 
A 
simple 
Data 
Retrieval 
test! 
• Retrieve 
1% 
rows 
out 
of 
a 
8 
GB 
table: 
SELECT 
COUNT(*) 
, SUM(order_total) 
FROM 
orders 
WHERE 
warehouse_id BETWEEN 500 AND 510 
The 
Warehouse 
IDs 
range 
between 
1 
and 
999 
Test 
data 
generated 
by 
SwingBench 
tool
www.enkitec.com 
10 
Data 
Retrieval 
Test! 
• Simulate 
a 
tradional 
Oracle 
database 
configuraon: 
• The 
test 
hardware 
is 
sll 
modern 
Exadata 
with 
flash 
enabled! 
SQL> ALTER SESSION SET cell_offload_processing = FALSE; 
Session altered. 
SQL> ALTER SESSION SET "_serial_direct_read" = NEVER; 
Session altered. 
SQL> ALTER SESSION SET inmemory_query = DISABLE; 
Session altered. 
I 
will 
re-­‐enable 
the 
sehngs 
in 
following 
tests
www.enkitec.com 
11 
Data 
Retrieval: 
Index 
Range 
Scan 
INDEX hint. Index lookups happen via buffer cache
www.enkitec.com 
12 
Data 
Retrieval: 
Full 
Table 
Scan 
-­‐ 
Buffered 
ALTER SESSION SET "_serial_direct_read"=NEVER;
www.enkitec.com 
13 
Data 
Retrieval: 
Full 
Table 
Scan 
– 
Direct 
Path 
Reads 
ALTER SESSION SET "_serial_direct_read"=ALWAYS;
www.enkitec.com 
14 
Data 
Retrieval: 
Full 
Table 
Scan 
– 
Smart 
Scan 
ALTER SESSION SET cell_offload_processing = TRUE
www.enkitec.com 
15 
Data 
Retrieval: 
Full 
Table 
Scan 
– 
In-­‐Memory 
Scan 
ALTER SESSION SET inmemory_query = ENABLE
www.enkitec.com 
16 
Data 
Retrieval: 
Test 
Results 
(from 
V$SQL) 
• Remember, 
this 
is 
a 
very 
simple 
query 
operaon 
• But 
complex 
queries 
are 
just 
a 
bunch 
of 
simple 
query 
ops 
in 
a 
loop 
;-­‐) 
TESTNAME PLAN_HASH ELA_MS CPU_MS LIOS BLK_READ 
------------------------- ---------- -------- -------- --------- --------- 
test1: index range scan * 16715356 265203 37438 782858 511231 
test2: full buffered */ C 630573765 132075 48944 1013913 849316 
test3: full direct path * 630573765 15567 11808 1013873 1013850 
test4: full smart scan */ 630573765 2102 729 1013873 1013850 
test5: full inmemory scan 630573765 155 155 14 0 
Eliminang 
the 
data 
retrieval 
IO 
component 
gave 
1711x 
speed 
improvement 
CPU 
usage 
also 
dropped 
241x 
Note 
that 
tests 
1-­‐4 
all 
did 
physical 
IO 
as 
data 
working 
set 
didn't 
fit 
into 
cache
www.enkitec.com 
17 
Comparing 
"in 
memory" 
with 
In-­‐Memory 
Cache 
all 
table 
blocks 
in 
buffer 
cache?
www.enkitec.com 
18 
Data 
Retrieval: 
Full 
Table 
Scan 
– 
Buffer 
Cache 
Scan 
ALTER TABLE orders CACHE; ... SET inmemory_query = DISABLE
www.enkitec.com 
19 
Data 
Retrieval: 
Test 
Results 
(Buffer 
Cache) 
• Remember, 
this 
is 
a 
very 
simple 
query 
operaon 
• But 
complex 
queries 
are 
just 
a 
bunch 
of 
simple 
query 
ops 
in 
a 
loop 
;-­‐) 
TESTNAME PLAN_HASH ELA_MS CPU_MS LIOS BLK_READ 
------------------------- ---------- -------- -------- --------- --------- 
test1: index range scan * 16715356 265203 37438 782858 511231 
test2: full buffered */ C 630573765 132075 48944 1013913 849316 
test3: full direct path * 630573765 15567 11808 1013873 1013850 
test4: full smart scan */ 630573765 2102 729 1013873 1013850 
test5: full inmemory scan 630573765 155 155 14 0 
test6: full buffer cache 630573765 7850 7831 1014741 0 
50x 
difference 
in 
logical 
reads 
vs 
buffer 
cache 
vs 
IM 
processing 
Your 
mileage 
will 
vary 
depending 
on 
hardware, 
dataset, 
filter 
% 
and 
predicates
www.enkitec.com 
20 
"Secret 
Sauce" 
• Columnar 
organizaon 
• Compression 
• Column 
data 
ghtly 
packed 
together 
• Less 
memory 
traffic! 
• Yes, 
RAM 
is 
the 
new 
disk 
(slow 
SIMD 
would 
be 
useless 
if 
you 
waited 
on 
main 
memory 
all 
the 
compared 
to 
CPU 
4me 
speed!) 
• Load 
only 
those 
memory 
lines 
where 
required 
columns 
reside 
• Decompression 
on-­‐the-­‐fly 
(probably) 
benefits 
from 
CPU 
L2/L3 
cache 
• SIMD 
• Reduce 
ght 
loops 
and 
branches 
in 
machine 
code 
• Get 
the 
CPU 
to 
simultaneously 
process 
mulple 
values 
in 
a 
vector
www.enkitec.com 
21 
SIMD 
benefit 
(not 
Oracle-­‐specific) 
• Modern 
Intel 
CPUs 
have 
16-­‐32 
SIMD 
registers 
• Each 
register 
holds 
128, 
256 
or 
soon 
512 
bits: 
• SSE/AVX, 
AVX2, 
AVX-­‐512 
• A 
single 
register 
can 
hold 
many 
smaller-­‐length 
values 
packed 
into 
it 
(depending 
on 
datatypes) 
1. Vector 
load 
2. Vector 
comparison 
• Filter 
predicates! 
3. Masked 
Vector 
addion 
(etc) 
4. Masked 
Vector 
store 
to 
RAM 
Masking 
allows 
you 
to 
choose 
which 
packed 
values 
in 
register 
to 
process 
or 
ignore 
(no 
need 
to 
copy 
stuff 
around)
www.enkitec.com 
22 
SIMD 
benefit 
(not 
Oracle-­‐specific) 
• Reduce 
the 
number 
of 
loops 
at 
low-­‐level 
data 
operaons 
• 2-­‐16x 
on 
Intel 
CPUs, 
depending 
on 
HW 
& 
internal 
data 
types 
used 
• For 
example, 
when 
looping 
over 
1000 
values: 
1000 
loop 
itera4ons 
125 
loop 
itera4ons
www.enkitec.com 
23 
Data 
Processing
www.enkitec.com 
24 
Data 
Processing 
• Joins 
• Aggregaons 
/ 
Group 
By 
• Sorng 
• etc… 
• A 
common 
problem: 
TEMP 
IO!
www.enkitec.com 
25 
Example 
1: 
A 
Small 
Aggregaon 
SELECT /*+ MONITOR 
NO_VECTOR_TRANSFORM 
NO_PX_JOIN_FILTER(@"SEL$1" "S"@"SEL$1") */ 
ch.channel_desc 
, SUM(s.quantity_sold) 
FROM 
ssh.sales s 
, ssh.customers cu 
, ssh.channels ch 
WHERE 
s.cust_id = cu.cust_id 
AND s.channel_id = ch.channel_id 
AND cu.cust_postal_code LIKE 'MMM%' 
GROUP BY 
ch.channel_desc 
Disabling 
all 
the 
fancy 
new 
stuff 
:-­‐) 
This 
selects 
a 
few 
customers 
(postal 
codes 
from 
AAA 
000 
to 
ZZZ 
999)
No 
Bloom 
Filter 
Pushdown, 
No 
Vector 
Transformaon 
www.enkitec.com 
26 
=========================================================================================== 
| Id | Operation | Name | Rows |Activity | Activity Detail | 
| | | |(Actual) | (%) | (# samples) | 
=========================================================================================== 
| 0 | SELECT STATEMENT | | 5 | | | 
| 1 | HASH GROUP BY | | 5 | | | 
| 2 | HASH JOIN | | 64 | | | 
| 3 | HASH JOIN | | 64 | 83.33 | Cpu (15) | 
| 4 | PARTITION RANGE ALL | | 9 | | | 
| 5 | TABLE ACCESS INMEMORY FULL | CUSTOMERS | 9 | | | 
| 6 | PARTITION RANGE ALL | | 211M | | | 
| 7 | TABLE ACCESS INMEMORY FULL | SALES | 211M | 11.11 | in memory (1) | 
| | | | | | Cpu (1) | 
| 8 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | 
=========================================================================================== 
2 - access("S"."CHANNEL_ID"="CH"."CHANNEL_ID") 
3 - access("S"."CUST_ID"="CU"."CUST_ID") 
5 - inmemory("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') 
filter("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') 
Total 
17 
seconds, 
most 
at 
HASH 
JOIN 
(#3) 
211 
Million 
rows 
sent 
to 
hash 
join 
from 
SALES
www.enkitec.com 
27 
With 
Bloom 
Filter 
Pushdown, 
No 
Vector 
Transform 
============================================================================================= 
| Id | Operation | Name | Rows | Activity | Activity Detail | 
| | | |(Actual) | (%) | (# samples) | 
============================================================================================= 
| 0 | SELECT STATEMENT | | 5 | | | 
| 1 | HASH GROUP BY | | 5 | | | 
| 2 | HASH JOIN | | 64 | | | 
| 3 | HASH JOIN | | 64 | | | 
| 4 | JOIN FILTER CREATE | :BF0000 | 9 | | | 
| 5 | PARTITION RANGE ALL | | 9 | | | 
| 6 | TABLE ACCESS INMEMORY FULL | CUSTOMERS | 9 | | | 
| 7 | JOIN FILTER USE | :BF0000 | 24753 | | | 
| 8 | PARTITION RANGE ALL | | 24753 | | | 
| 9 | TABLE ACCESS INMEMORY FULL | SALES | 24753 | 100.00 | in memory (3) | 
| 10 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | 
============================================================================================= 
2 - access("S"."CHANNEL_ID"="CH"."CHANNEL_ID") 
3 - access("S"."CUST_ID"="CU"."CUST_ID") 
6 - inmemory("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') 
filter("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') 
9 - inmemory(SYS_OP_BLOOM_FILTER(:BF0000,"S"."CUST_ID")) 
filter(SYS_OP_BLOOM_FILTER(:BF0000,"S"."CUST_ID")) 
Only 
3 
seconds 
of 
CPU 
usage 
noced 
(all 
in 
vectorized 
code) 
Only 
24753 
rows 
returned 
from 
SALES
www.enkitec.com 
28 
With 
Vector 
Transformaon 
===================================================================================================== 
| Id | Operation | Name | Rows |Activity | Activity Detail | 
| | | |(Actual) | (%) | (# samples) | 
===================================================================================================== 
| 0 | SELECT STATEMENT | | 5 | | | 
| 1 | TEMP TABLE TRANSFORMATION | | 5 | | | 
| 2 | LOAD AS SELECT | | 2 | | | 
| 3 | VECTOR GROUP BY | | 1 | | | 
| 4 | HASH GROUP BY | | 0 | | | 
| 5 | KEY VECTOR CREATE BUFFERED | :KV0000 | 9 | | | 
| 6 | PARTITION RANGE ALL | | 9 | | | 
| 7 | TABLE ACCESS INMEMORY FULL | CUSTOMERS | 9 | | | 
| 8 | LOAD AS SELECT | | 2 | | | 
| 9 | VECTOR GROUP BY | | 5 | | | 
| 10 | KEY VECTOR CREATE BUFFERED | :KV0001 | 5 | | | 
| 11 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | 
| 12 | HASH GROUP BY | | 5 | | | 
| 13 | HASH JOIN | | 5 | | | 
| 14 | MERGE JOIN CARTESIAN | | 5 | | | 
| 15 | TABLE ACCESS FULL | SYS_TEMP_0FD...| 1 | | | 
| 16 | BUFFER SORT | | 5 | | | 
| 17 | TABLE ACCESS FULL | SYS_TEMP_0FD...| 5 | | | 
| 18 | VIEW | VW_VT_0737CF93 | 5 | | | 
| 19 | VECTOR GROUP BY | | 5 | | | 
| 20 | HASH GROUP BY | | 0 | | | 
| 21 | KEY VECTOR USE | :KV0001 | 64 | | | 
| 22 | KEY VECTOR USE | :KV0000 | 64 | | | 
| 23 | PARTITION RANGE ALL | | 64 | | | 
| 24 | TABLE ACCESS INMEMORY FULL | SALES | 64 | 100.00 | in memory (2) | 
===================================================================================================== 
VECTOR 
GROUP 
BY 
(#19) 
reduces 
results 
to 
5 
aggregated 
rows 
Only 
64 
rows 
returned 
from 
SALES 
azer 
filtering 
by 
2 
dimensions
www.enkitec.com 
29 
With 
Vector 
Transformaon 
(…continued…) 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
7 - inmemory("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') 
filter("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') 
13 - access("ITEM_9"=INTERNAL_FUNCTION("C0") AND "ITEM_10"="C2" 
AND "ITEM_7"=INTERNAL_FUNCTION("C0") AND "ITEM_8"="C2") 
24 - inmemory((SYS_OP_KEY_VECTOR_FILTER("S"."CUST_ID",:KV0000) AND 
SYS_OP_KEY_VECTOR_FILTER("S"."CHANNEL_ID",:KV0001))) 
filter((SYS_OP_KEY_VECTOR_FILTER("S"."CUST_ID",:KV0000) AND 
SYS_OP_KEY_VECTOR_FILTER("S"."CHANNEL_ID",:KV0001))) 
- dynamic statistics used: dynamic sampling (level=2) 
- 1 Sql Plan Directive used for this statement 
- vector transformation used for this statement
www.enkitec.com 
30 
Example 
2: 
A 
bigger 
aggregaon 
SELECT /*+ MONITOR 
NO_VECTOR_TRANSFORM 
NO_PX_JOIN_FILTER(@"SEL$1" "S"@"SEL$1") */ 
ch.channel_desc 
, p.promo_subcategory 
, SUM(s.quantity_sold) 
FROM 
ssh.sales s 
, ssh.channels ch 
, ssh.promotions p 
WHERE 
s.channel_id = ch.channel_id 
AND s.promo_id = p.promo_id 
AND p.promo_category = 'TV' 
GROUP BY 
ch.channel_desc 
, p.promo_subcategory 
This 
query 
sums 
many 
more 
rows 
in 
SALES 
based 
on 
2 
dimension 
scans
No 
Bloom 
Filter 
Pushdown, 
No 
Vector 
Transformaon 
============================================================================================== 
| Id | Operation | Name | Rows |Activity | Activity Detail | 
| | | |(Actual) | (%) | (# samples) | 
============================================================================================== 
| 0 | SELECT STATEMENT | | 15 | | | 
| 1 | HASH GROUP BY | | 15 | | | 
| 2 | HASH JOIN | | 15 | | | 
| 3 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | 
| 4 | VIEW | VW_GBC_10 | 15 | | | 
| 5 | HASH GROUP BY | | 15 | 35.00 | Cpu (7) | 
| 6 | HASH JOIN | | 48M | 50.00 | Cpu (10) | 
| 7 | TABLE ACCESS INMEMORY FULL | PROMOTIONS | 115 | | | 
| 8 | PARTITION RANGE ALL | | 211M | | | 
| 9 | TABLE ACCESS INMEMORY FULL | SALES | 211M | 15.00 | in memory (3) | 
============================================================================================== 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
www.enkitec.com 
31 
2 - access("ITEM_1"="CH"."CHANNEL_ID") 
6 - access("S"."PROMO_ID"="P"."PROMO_ID") 
7 - inmemory("P"."PROMO_CATEGORY"='TV') 
filter("P"."PROMO_CATEGORY"='TV') 
Total 
20 
seconds 
runme 
(most 
in 
HASH 
JOIN 
and 
HASH 
GROUP 
BY) 
211M 
rows 
from 
SALES, 
48M 
rows 
survive 
the 
joins
www.enkitec.com 
32 
With 
Bloom 
Filter 
Pushdown, 
No 
Vector 
Transform 
=============================================================================================== 
| Id | Operation | Name | Rows |Activity | Activity Detail | 
| | | |(Actual) | (%) | (# samples) | 
=============================================================================================== 
| 0 | SELECT STATEMENT | | 15 | | | 
| 1 | HASH GROUP BY | | 15 | | | 
| 2 | HASH JOIN | | 15 | | | 
| 3 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | 
| 4 | VIEW | VW_GBC_10 | 15 | | | 
| 5 | HASH GROUP BY | | 15 | 71.43 | Cpu (10) | 
| 6 | HASH JOIN | | 48M | 28.57 | Cpu (4) | 
| 7 | JOIN FILTER CREATE | :BF0000 | 115 | | | 
| 8 | TABLE ACCESS INMEMORY FULL | PROMOTIONS | 115 | | | 
| 9 | JOIN FILTER USE | :BF0000 | 49M | | | 
| 10 | PARTITION RANGE ALL | | 49M | | | 
| 11 | TABLE ACCESS INMEMORY FULL | SALES | 49M | | | 
=============================================================================================== 
2 - access("ITEM_1"="CH"."CHANNEL_ID") 
6 - access("S"."PROMO_ID"="P"."PROMO_ID") 
8 - inmemory("P"."PROMO_CATEGORY"='TV') 
filter("P"."PROMO_CATEGORY"='TV') 
11 - inmemory(SYS_OP_BLOOM_FILTER(:BF0000,"S"."PROMO_ID")) 
filter(SYS_OP_BLOOM_FILTER(:BF0000,"S"."PROMO_ID")) 
49M 
rows 
returned 
from 
SALES 
azer 
bloom 
filtering
www.enkitec.com 
33 
With 
Vector 
Transformaon 
==================================================================================================== 
| Id | Operation | Name | Rows |Activity |Activity Detail| 
| | | |(Actual) | (%) | (# samples) | 
==================================================================================================== 
| 0 | SELECT STATEMENT | | 15 | | | 
| 1 | TEMP TABLE TRANSFORMATION | | 15 | | | 
| 2 | LOAD AS SELECT | | 2 | | | 
| 3 | VECTOR GROUP BY | | 5 | | | 
| 4 | KEY VECTOR CREATE BUFFERED | :KV0000 | 5 | | | 
| 5 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | 
| 6 | LOAD AS SELECT | | 2 | Vector 
| group 
by 
| 
| 7 | VECTOR GROUP BY | | 3 | pushed 
| deeper 
| 
| 8 | KEY VECTOR CREATE BUFFERED | :KV0001 | 115 | | | 
| 9 | TABLE ACCESS INMEMORY FULL | PROMOTIONS | 115 | through 
| the 
HASH 
| 
| 10 | HASH GROUP BY | | 15 | | JOINs 
| 
| 11 | HASH JOIN | | 15 | | | 
| 12 | HASH JOIN | | 15 | | | 
| 13 | TABLE ACCESS FULL | SYS_TEMP_0FD...| 5 | | | 
| 14 | VIEW | VW_VT_0737CF | 15 | | | 
| 15 | VECTOR GROUP BY | | 15 | 20.00 | Cpu (1) | 
| 16 | HASH GROUP BY | | 0 | | | 
| 17 | KEY VECTOR USE | :KV0000 | 48M | | | 
| 18 | KEY VECTOR USE | :KV0001 | 48M | | | 
| 19 | PARTITION RANGE ALL | | 48M | | | 
| 20 | TABLE ACCESS INMEMORY FULL | SALES | 48M | 60.00 | in memory (3) | 
| 21 | TABLE ACCESS FULL | SYS_TEMP_0FD...| 3 | | | 
====================================================================================================
www.enkitec.com 
34 
With 
Vector 
Transformaon 
(…continued…) 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
9 - inmemory("P"."PROMO_CATEGORY"='TV') 
filter("P"."PROMO_CATEGORY"='TV') 
11 - access("ITEM_10"=INTERNAL_FUNCTION("C0") AND "ITEM_11"="C2") 
12 - access("ITEM_8"=INTERNAL_FUNCTION("C0") AND "ITEM_9"="C2") 
20 - inmemory((SYS_OP_KEY_VECTOR_FILTER("S"."PROMO_ID",:KV0001) AND 
SYS_OP_KEY_VECTOR_FILTER("S"."CHANNEL_ID",:KV0000))) 
filter((SYS_OP_KEY_VECTOR_FILTER("S"."PROMO_ID",:KV0001) AND 
SYS_OP_KEY_VECTOR_FILTER("S"."CHANNEL_ID",:KV0000))) 
- dynamic statistics used: dynamic sampling (level=2) 
- 1 Sql Plan Directive used for this statement 
- vector transformation used for this statement
www.enkitec.com 
35 
A 
query 
bo4lenecked 
by 
data 
processing, 
not 
retrieval 
• A 
query 
bo4lenecked 
by 
data 
processing, 
not 
retrieval 
• Hash 
joins 
and 
a 
GROUP 
BY 
spilling 
to 
TEMP
www.enkitec.com 
36 
Reducing 
PGA 
memory 
usage 
and 
TEMP 
IO? 
• Classic 
SQL 
opmizaon 
techniques: 
• Filter 
early 
-­‐> 
Sort 
and 
Join 
less 
rows 
• Group 
to 
fewer 
buckets 
• Paron 
wise 
joins 
(or 
"chunkify" 
workload) 
• Changing 
join 
orders 
• Kill 
it 
with 
Hardware: 
• Increase 
PGA_AGGREGATE_TARGET 
• Increase 
PX 
degree 
• You'll 
use 
more 
CPU 
… 
and 
more 
memory! 
• Not 
all 
operaons 
are 
simply 
addive 
• They 
can't 
spread 
memory 
usage 
into 
"parons" 
with 
more 
slaves! 
• DISTINCT 
!
www.enkitec.com 
37 
Approximate 
Count 
Disnct 
(12.1.0.2) 
-- traditional (and precise) way: 
SELECT COUNT(DISTINCT cust_id) 
FROM ssh.sales 
WHERE amount_sold > 1; 
-- new (approximate) way: 
SELECT APPROX_COUNT_DISTINCT(cust_id) 
FROM ssh.sales 
WHERE amount_sold > 1; 
• It 
looks 
like 
this 
feature 
ulizes 
the 
HyperLogLog 
algorithm: 
h4p://externaltable.blogspot.com/2014/08/scaling-­‐up-­‐cardinality-­‐ 
esmates-­‐in.html
www.enkitec.com 
38 
COUNT 
(DISTINCT 
column)
www.enkitec.com 
39 
APPROX_COUNT_DISTINCT(column)
www.enkitec.com 
40 
Thanks! 
Tanel 
Põder 
& 
Kerry 
Osborne 
Accenture 
Enkitec 
Group 
h4p://www.enkitec.com 
h4p://kerryosborne.oracle-­‐guy.com 
h4p://blog.tanelpoder.com

More Related Content

What's hot

Oracle Exadata Performance: Latest Improvements and Less Known Features
Oracle Exadata Performance: Latest Improvements and Less Known FeaturesOracle Exadata Performance: Latest Improvements and Less Known Features
Oracle Exadata Performance: Latest Improvements and Less Known FeaturesTanel Poder
 
Advanced Oracle Troubleshooting
Advanced Oracle TroubleshootingAdvanced Oracle Troubleshooting
Advanced Oracle TroubleshootingHector Martinez
 
SQL Monitoring in Oracle Database 12c
SQL Monitoring in Oracle Database 12cSQL Monitoring in Oracle Database 12c
SQL Monitoring in Oracle Database 12cTanel Poder
 
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel PoderTroubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel PoderTanel Poder
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2Tanel Poder
 
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...Kristofferson A
 
Moving Data Between Exadata and Hadoop
Moving Data Between Exadata and HadoopMoving Data Between Exadata and Hadoop
Moving Data Between Exadata and HadoopEnkitec
 
Mark Farnam : Minimizing the Concurrency Footprint of Transactions
Mark Farnam  : Minimizing the Concurrency Footprint of TransactionsMark Farnam  : Minimizing the Concurrency Footprint of Transactions
Mark Farnam : Minimizing the Concurrency Footprint of TransactionsKyle Hailey
 
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Alex Zaballa
 
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)Laurent Leturgez
 
PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PGConf APAC
 
Oracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention TroubleshootingOracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention TroubleshootingTanel Poder
 
Christo kutrovsky oracle, memory & linux
Christo kutrovsky   oracle, memory & linuxChristo kutrovsky   oracle, memory & linux
Christo kutrovsky oracle, memory & linuxKyle Hailey
 
Sql server 2016 it just runs faster sql bits 2017 edition
Sql server 2016 it just runs faster   sql bits 2017 editionSql server 2016 it just runs faster   sql bits 2017 edition
Sql server 2016 it just runs faster sql bits 2017 editionBob Ward
 
SQL Server In-Memory OLTP: What Every SQL Professional Should Know
SQL Server In-Memory OLTP: What Every SQL Professional Should KnowSQL Server In-Memory OLTP: What Every SQL Professional Should Know
SQL Server In-Memory OLTP: What Every SQL Professional Should KnowBob Ward
 
Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017Bob Ward
 
End-to-end Troubleshooting Checklist for Microsoft SQL Server
End-to-end Troubleshooting Checklist for Microsoft SQL ServerEnd-to-end Troubleshooting Checklist for Microsoft SQL Server
End-to-end Troubleshooting Checklist for Microsoft SQL ServerKevin Kline
 
Oracle Open World Thursday 230 ashmasters
Oracle Open World Thursday 230 ashmastersOracle Open World Thursday 230 ashmasters
Oracle Open World Thursday 230 ashmastersKyle Hailey
 
Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2PgTraining
 

What's hot (20)

Oracle Exadata Performance: Latest Improvements and Less Known Features
Oracle Exadata Performance: Latest Improvements and Less Known FeaturesOracle Exadata Performance: Latest Improvements and Less Known Features
Oracle Exadata Performance: Latest Improvements and Less Known Features
 
Advanced Oracle Troubleshooting
Advanced Oracle TroubleshootingAdvanced Oracle Troubleshooting
Advanced Oracle Troubleshooting
 
SQL Monitoring in Oracle Database 12c
SQL Monitoring in Oracle Database 12cSQL Monitoring in Oracle Database 12c
SQL Monitoring in Oracle Database 12c
 
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel PoderTroubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
 
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
 
Moving Data Between Exadata and Hadoop
Moving Data Between Exadata and HadoopMoving Data Between Exadata and Hadoop
Moving Data Between Exadata and Hadoop
 
Mark Farnam : Minimizing the Concurrency Footprint of Transactions
Mark Farnam  : Minimizing the Concurrency Footprint of TransactionsMark Farnam  : Minimizing the Concurrency Footprint of Transactions
Mark Farnam : Minimizing the Concurrency Footprint of Transactions
 
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
 
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
 
PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs
 
Avoid boring work_v2
Avoid boring work_v2Avoid boring work_v2
Avoid boring work_v2
 
Oracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention TroubleshootingOracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention Troubleshooting
 
Christo kutrovsky oracle, memory & linux
Christo kutrovsky   oracle, memory & linuxChristo kutrovsky   oracle, memory & linux
Christo kutrovsky oracle, memory & linux
 
Sql server 2016 it just runs faster sql bits 2017 edition
Sql server 2016 it just runs faster   sql bits 2017 editionSql server 2016 it just runs faster   sql bits 2017 edition
Sql server 2016 it just runs faster sql bits 2017 edition
 
SQL Server In-Memory OLTP: What Every SQL Professional Should Know
SQL Server In-Memory OLTP: What Every SQL Professional Should KnowSQL Server In-Memory OLTP: What Every SQL Professional Should Know
SQL Server In-Memory OLTP: What Every SQL Professional Should Know
 
Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017
 
End-to-end Troubleshooting Checklist for Microsoft SQL Server
End-to-end Troubleshooting Checklist for Microsoft SQL ServerEnd-to-end Troubleshooting Checklist for Microsoft SQL Server
End-to-end Troubleshooting Checklist for Microsoft SQL Server
 
Oracle Open World Thursday 230 ashmasters
Oracle Open World Thursday 230 ashmastersOracle Open World Thursday 230 ashmasters
Oracle Open World Thursday 230 ashmasters
 
Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2
 

Viewers also liked

SQL in the Hybrid World
SQL in the Hybrid WorldSQL in the Hybrid World
SQL in the Hybrid WorldTanel Poder
 
Adding real time reporting to your database oracle db in memory
Adding real time reporting to your database oracle db in memoryAdding real time reporting to your database oracle db in memory
Adding real time reporting to your database oracle db in memoryZohar Elkayam
 
Oracle LOB Internals and Performance Tuning
Oracle LOB Internals and Performance TuningOracle LOB Internals and Performance Tuning
Oracle LOB Internals and Performance TuningTanel Poder
 
Connecting Hadoop and Oracle
Connecting Hadoop and OracleConnecting Hadoop and Oracle
Connecting Hadoop and OracleTanel Poder
 
Oracle 12c r1 installation on solaris 11.1
Oracle 12c r1 installation on solaris 11.1Oracle 12c r1 installation on solaris 11.1
Oracle 12c r1 installation on solaris 11.1Laurent Leturgez
 
Oracle Database Advanced Querying (2016)
Oracle Database Advanced Querying (2016)Oracle Database Advanced Querying (2016)
Oracle Database Advanced Querying (2016)Zohar Elkayam
 
Oracle 12c in memory en action
Oracle 12c in memory en actionOracle 12c in memory en action
Oracle 12c in memory en actionLaurent Leturgez
 
OOW2016: Exploring Advanced SQL Techniques Using Analytic Functions
OOW2016: Exploring Advanced SQL Techniques Using Analytic FunctionsOOW2016: Exploring Advanced SQL Techniques Using Analytic Functions
OOW2016: Exploring Advanced SQL Techniques Using Analytic FunctionsZohar Elkayam
 
Advanced PL/SQL Optimizing for Better Performance 2016
Advanced PL/SQL Optimizing for Better Performance 2016Advanced PL/SQL Optimizing for Better Performance 2016
Advanced PL/SQL Optimizing for Better Performance 2016Zohar Elkayam
 
HBase Status Report - Hadoop Summit Europe 2014
HBase Status Report - Hadoop Summit Europe 2014HBase Status Report - Hadoop Summit Europe 2014
HBase Status Report - Hadoop Summit Europe 2014larsgeorge
 
A Second Look at Oracle RAC 12c
A Second Look at Oracle RAC 12cA Second Look at Oracle RAC 12c
A Second Look at Oracle RAC 12cLeighton Nelson
 
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv larsgeorge
 

Viewers also liked (13)

SQL in the Hybrid World
SQL in the Hybrid WorldSQL in the Hybrid World
SQL in the Hybrid World
 
Adding real time reporting to your database oracle db in memory
Adding real time reporting to your database oracle db in memoryAdding real time reporting to your database oracle db in memory
Adding real time reporting to your database oracle db in memory
 
Oracle LOB Internals and Performance Tuning
Oracle LOB Internals and Performance TuningOracle LOB Internals and Performance Tuning
Oracle LOB Internals and Performance Tuning
 
Connecting Hadoop and Oracle
Connecting Hadoop and OracleConnecting Hadoop and Oracle
Connecting Hadoop and Oracle
 
Hanganalyze presentation
Hanganalyze presentationHanganalyze presentation
Hanganalyze presentation
 
Oracle 12c r1 installation on solaris 11.1
Oracle 12c r1 installation on solaris 11.1Oracle 12c r1 installation on solaris 11.1
Oracle 12c r1 installation on solaris 11.1
 
Oracle Database Advanced Querying (2016)
Oracle Database Advanced Querying (2016)Oracle Database Advanced Querying (2016)
Oracle Database Advanced Querying (2016)
 
Oracle 12c in memory en action
Oracle 12c in memory en actionOracle 12c in memory en action
Oracle 12c in memory en action
 
OOW2016: Exploring Advanced SQL Techniques Using Analytic Functions
OOW2016: Exploring Advanced SQL Techniques Using Analytic FunctionsOOW2016: Exploring Advanced SQL Techniques Using Analytic Functions
OOW2016: Exploring Advanced SQL Techniques Using Analytic Functions
 
Advanced PL/SQL Optimizing for Better Performance 2016
Advanced PL/SQL Optimizing for Better Performance 2016Advanced PL/SQL Optimizing for Better Performance 2016
Advanced PL/SQL Optimizing for Better Performance 2016
 
HBase Status Report - Hadoop Summit Europe 2014
HBase Status Report - Hadoop Summit Europe 2014HBase Status Report - Hadoop Summit Europe 2014
HBase Status Report - Hadoop Summit Europe 2014
 
A Second Look at Oracle RAC 12c
A Second Look at Oracle RAC 12cA Second Look at Oracle RAC 12c
A Second Look at Oracle RAC 12c
 
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
 

Similar to Oracle Database In-Memory Option in Action

Top 10 tips for Oracle performance
Top 10 tips for Oracle performanceTop 10 tips for Oracle performance
Top 10 tips for Oracle performanceGuy Harrison
 
Performance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RACPerformance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RACKristofferson A
 
Oracle Basics and Architecture
Oracle Basics and ArchitectureOracle Basics and Architecture
Oracle Basics and ArchitectureSidney Chen
 
Benchmarking Solr Performance at Scale
Benchmarking Solr Performance at ScaleBenchmarking Solr Performance at Scale
Benchmarking Solr Performance at Scalethelabdude
 
Real World Performance - Data Warehouses
Real World Performance - Data WarehousesReal World Performance - Data Warehouses
Real World Performance - Data WarehousesConnor McDonald
 
Macy's: Changing Engines in Mid-Flight
Macy's: Changing Engines in Mid-FlightMacy's: Changing Engines in Mid-Flight
Macy's: Changing Engines in Mid-FlightDataStax Academy
 
Analyzing SQL Traces generated by EVENT 10046.pptx
Analyzing SQL Traces generated by EVENT 10046.pptxAnalyzing SQL Traces generated by EVENT 10046.pptx
Analyzing SQL Traces generated by EVENT 10046.pptxssuserbad8d3
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performanceEngine Yard
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016Brendan Gregg
 
Optimizing applications and database performance
Optimizing applications and database performanceOptimizing applications and database performance
Optimizing applications and database performanceInam Bukhary
 
KSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success StoryKSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success StoryKristofferson A
 
QCon 2015 Broken Performance Tools
QCon 2015 Broken Performance ToolsQCon 2015 Broken Performance Tools
QCon 2015 Broken Performance ToolsBrendan Gregg
 
Analyzing and Interpreting AWR
Analyzing and Interpreting AWRAnalyzing and Interpreting AWR
Analyzing and Interpreting AWRpasalapudi
 
How should I monitor my idaa
How should I monitor my idaaHow should I monitor my idaa
How should I monitor my idaaCuneyt Goksu
 
Aioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_featuresAioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_featuresAiougVizagChapter
 
Query Optimization with MySQL 5.6: Old and New Tricks
Query Optimization with MySQL 5.6: Old and New TricksQuery Optimization with MySQL 5.6: Old and New Tricks
Query Optimization with MySQL 5.6: Old and New TricksMYXPLAIN
 
DBA Commands and Concepts That Every Developer Should Know - Part 2
DBA Commands and Concepts That Every Developer Should Know - Part 2DBA Commands and Concepts That Every Developer Should Know - Part 2
DBA Commands and Concepts That Every Developer Should Know - Part 2Alex Zaballa
 
DBA Commands and Concepts That Every Developer Should Know - Part 2
DBA Commands and Concepts That Every Developer Should Know - Part 2DBA Commands and Concepts That Every Developer Should Know - Part 2
DBA Commands and Concepts That Every Developer Should Know - Part 2Alex Zaballa
 

Similar to Oracle Database In-Memory Option in Action (20)

Top 10 tips for Oracle performance
Top 10 tips for Oracle performanceTop 10 tips for Oracle performance
Top 10 tips for Oracle performance
 
Performance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RACPerformance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RAC
 
Oracle Basics and Architecture
Oracle Basics and ArchitectureOracle Basics and Architecture
Oracle Basics and Architecture
 
Benchmarking Solr Performance at Scale
Benchmarking Solr Performance at ScaleBenchmarking Solr Performance at Scale
Benchmarking Solr Performance at Scale
 
Quick Wins
Quick WinsQuick Wins
Quick Wins
 
Real World Performance - Data Warehouses
Real World Performance - Data WarehousesReal World Performance - Data Warehouses
Real World Performance - Data Warehouses
 
Rmoug ashmaster
Rmoug ashmasterRmoug ashmaster
Rmoug ashmaster
 
Macy's: Changing Engines in Mid-Flight
Macy's: Changing Engines in Mid-FlightMacy's: Changing Engines in Mid-Flight
Macy's: Changing Engines in Mid-Flight
 
Analyzing SQL Traces generated by EVENT 10046.pptx
Analyzing SQL Traces generated by EVENT 10046.pptxAnalyzing SQL Traces generated by EVENT 10046.pptx
Analyzing SQL Traces generated by EVENT 10046.pptx
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016
 
Optimizing applications and database performance
Optimizing applications and database performanceOptimizing applications and database performance
Optimizing applications and database performance
 
KSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success StoryKSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success Story
 
QCon 2015 Broken Performance Tools
QCon 2015 Broken Performance ToolsQCon 2015 Broken Performance Tools
QCon 2015 Broken Performance Tools
 
Analyzing and Interpreting AWR
Analyzing and Interpreting AWRAnalyzing and Interpreting AWR
Analyzing and Interpreting AWR
 
How should I monitor my idaa
How should I monitor my idaaHow should I monitor my idaa
How should I monitor my idaa
 
Aioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_featuresAioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_features
 
Query Optimization with MySQL 5.6: Old and New Tricks
Query Optimization with MySQL 5.6: Old and New TricksQuery Optimization with MySQL 5.6: Old and New Tricks
Query Optimization with MySQL 5.6: Old and New Tricks
 
DBA Commands and Concepts That Every Developer Should Know - Part 2
DBA Commands and Concepts That Every Developer Should Know - Part 2DBA Commands and Concepts That Every Developer Should Know - Part 2
DBA Commands and Concepts That Every Developer Should Know - Part 2
 
DBA Commands and Concepts That Every Developer Should Know - Part 2
DBA Commands and Concepts That Every Developer Should Know - Part 2DBA Commands and Concepts That Every Developer Should Know - Part 2
DBA Commands and Concepts That Every Developer Should Know - Part 2
 

Recently uploaded

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 

Recently uploaded (20)

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 

Oracle Database In-Memory Option in Action

  • 1. www.enkitec.com 1 Oracle Database In-­‐Memory Op4on in Ac4on Tanel Põder & Kerry Osborne Accenture Enkitec Group h4p://www.enkitec.com
  • 2. www.enkitec.com 2 Intro: About • Tanel Põder • Consultant, Trainer, Troubleshooter • Oracle Database Performance geek • Exadata Performance geek • In-­‐Memory Columnar Cache perf. geek ;-­‐) • h4p://blog.tanelpoder.com • Professor Osborne • Nice Guy and All Around Prince of a Fellow J • Worked on Oracle since v2 • Also a performance geek • h4p://kerryosborne.oracle-­‐guy.com Expert Oracle Exadata book (with Kerry Osborne and Randy Johnson of Enkitec)
  • 3. www.enkitec.com 3 Intro: Goals • Walkthrough of a few example queries that benefit from In-­‐Memory and Oracle 12.1.0.2 features • First disable most of the performance features and then re-­‐ enable one by one (and show performance metrics)
  • 4. www.enkitec.com 4 Intro: What do databases do? 1. Retrieve data 2. Process data 3. Return results
  • 5. www.enkitec.com 5 Tradional Database I/O flow • Retrieve files Database Server Aggregate Filter Join Storage files Data Blocks Read blocks from disks -­‐> Process -­‐> Return Send all read data to host Filter, join, aggregate in DB server
  • 6. www.enkitec.com 6 Exadata I/O flow • Retrieve files Database Server Aggregate Join Storage files Rows Filter Read blocks from disks -­‐> Process -­‐> Return Throw away non-­‐needed rows/cols F Send only needed rows back Final filter, join, aggregaon in DB server
  • 7. -­‐> Process -­‐> Return C Join C www.enkitec.com 7 In-­‐Memory Column Store I/O flow Database Server Aggregate Filter • Retrieve Disk storage not in data retrieval crical path at all Fast RAM access. No disk latency C C C C C C C C C C C C C C Avoid RAM access with In-­‐Memory "storage" indexes Oracle 12c also brings data processing improvements (SIMD, vector joins, vector aggregaon, approximate disnct)
  • 9. www.enkitec.com 9 A simple Data Retrieval test! • Retrieve 1% rows out of a 8 GB table: SELECT COUNT(*) , SUM(order_total) FROM orders WHERE warehouse_id BETWEEN 500 AND 510 The Warehouse IDs range between 1 and 999 Test data generated by SwingBench tool
  • 10. www.enkitec.com 10 Data Retrieval Test! • Simulate a tradional Oracle database configuraon: • The test hardware is sll modern Exadata with flash enabled! SQL> ALTER SESSION SET cell_offload_processing = FALSE; Session altered. SQL> ALTER SESSION SET "_serial_direct_read" = NEVER; Session altered. SQL> ALTER SESSION SET inmemory_query = DISABLE; Session altered. I will re-­‐enable the sehngs in following tests
  • 11. www.enkitec.com 11 Data Retrieval: Index Range Scan INDEX hint. Index lookups happen via buffer cache
  • 12. www.enkitec.com 12 Data Retrieval: Full Table Scan -­‐ Buffered ALTER SESSION SET "_serial_direct_read"=NEVER;
  • 13. www.enkitec.com 13 Data Retrieval: Full Table Scan – Direct Path Reads ALTER SESSION SET "_serial_direct_read"=ALWAYS;
  • 14. www.enkitec.com 14 Data Retrieval: Full Table Scan – Smart Scan ALTER SESSION SET cell_offload_processing = TRUE
  • 15. www.enkitec.com 15 Data Retrieval: Full Table Scan – In-­‐Memory Scan ALTER SESSION SET inmemory_query = ENABLE
  • 16. www.enkitec.com 16 Data Retrieval: Test Results (from V$SQL) • Remember, this is a very simple query operaon • But complex queries are just a bunch of simple query ops in a loop ;-­‐) TESTNAME PLAN_HASH ELA_MS CPU_MS LIOS BLK_READ ------------------------- ---------- -------- -------- --------- --------- test1: index range scan * 16715356 265203 37438 782858 511231 test2: full buffered */ C 630573765 132075 48944 1013913 849316 test3: full direct path * 630573765 15567 11808 1013873 1013850 test4: full smart scan */ 630573765 2102 729 1013873 1013850 test5: full inmemory scan 630573765 155 155 14 0 Eliminang the data retrieval IO component gave 1711x speed improvement CPU usage also dropped 241x Note that tests 1-­‐4 all did physical IO as data working set didn't fit into cache
  • 17. www.enkitec.com 17 Comparing "in memory" with In-­‐Memory Cache all table blocks in buffer cache?
  • 18. www.enkitec.com 18 Data Retrieval: Full Table Scan – Buffer Cache Scan ALTER TABLE orders CACHE; ... SET inmemory_query = DISABLE
  • 19. www.enkitec.com 19 Data Retrieval: Test Results (Buffer Cache) • Remember, this is a very simple query operaon • But complex queries are just a bunch of simple query ops in a loop ;-­‐) TESTNAME PLAN_HASH ELA_MS CPU_MS LIOS BLK_READ ------------------------- ---------- -------- -------- --------- --------- test1: index range scan * 16715356 265203 37438 782858 511231 test2: full buffered */ C 630573765 132075 48944 1013913 849316 test3: full direct path * 630573765 15567 11808 1013873 1013850 test4: full smart scan */ 630573765 2102 729 1013873 1013850 test5: full inmemory scan 630573765 155 155 14 0 test6: full buffer cache 630573765 7850 7831 1014741 0 50x difference in logical reads vs buffer cache vs IM processing Your mileage will vary depending on hardware, dataset, filter % and predicates
  • 20. www.enkitec.com 20 "Secret Sauce" • Columnar organizaon • Compression • Column data ghtly packed together • Less memory traffic! • Yes, RAM is the new disk (slow SIMD would be useless if you waited on main memory all the compared to CPU 4me speed!) • Load only those memory lines where required columns reside • Decompression on-­‐the-­‐fly (probably) benefits from CPU L2/L3 cache • SIMD • Reduce ght loops and branches in machine code • Get the CPU to simultaneously process mulple values in a vector
  • 21. www.enkitec.com 21 SIMD benefit (not Oracle-­‐specific) • Modern Intel CPUs have 16-­‐32 SIMD registers • Each register holds 128, 256 or soon 512 bits: • SSE/AVX, AVX2, AVX-­‐512 • A single register can hold many smaller-­‐length values packed into it (depending on datatypes) 1. Vector load 2. Vector comparison • Filter predicates! 3. Masked Vector addion (etc) 4. Masked Vector store to RAM Masking allows you to choose which packed values in register to process or ignore (no need to copy stuff around)
  • 22. www.enkitec.com 22 SIMD benefit (not Oracle-­‐specific) • Reduce the number of loops at low-­‐level data operaons • 2-­‐16x on Intel CPUs, depending on HW & internal data types used • For example, when looping over 1000 values: 1000 loop itera4ons 125 loop itera4ons
  • 24. www.enkitec.com 24 Data Processing • Joins • Aggregaons / Group By • Sorng • etc… • A common problem: TEMP IO!
  • 25. www.enkitec.com 25 Example 1: A Small Aggregaon SELECT /*+ MONITOR NO_VECTOR_TRANSFORM NO_PX_JOIN_FILTER(@"SEL$1" "S"@"SEL$1") */ ch.channel_desc , SUM(s.quantity_sold) FROM ssh.sales s , ssh.customers cu , ssh.channels ch WHERE s.cust_id = cu.cust_id AND s.channel_id = ch.channel_id AND cu.cust_postal_code LIKE 'MMM%' GROUP BY ch.channel_desc Disabling all the fancy new stuff :-­‐) This selects a few customers (postal codes from AAA 000 to ZZZ 999)
  • 26. No Bloom Filter Pushdown, No Vector Transformaon www.enkitec.com 26 =========================================================================================== | Id | Operation | Name | Rows |Activity | Activity Detail | | | | |(Actual) | (%) | (# samples) | =========================================================================================== | 0 | SELECT STATEMENT | | 5 | | | | 1 | HASH GROUP BY | | 5 | | | | 2 | HASH JOIN | | 64 | | | | 3 | HASH JOIN | | 64 | 83.33 | Cpu (15) | | 4 | PARTITION RANGE ALL | | 9 | | | | 5 | TABLE ACCESS INMEMORY FULL | CUSTOMERS | 9 | | | | 6 | PARTITION RANGE ALL | | 211M | | | | 7 | TABLE ACCESS INMEMORY FULL | SALES | 211M | 11.11 | in memory (1) | | | | | | | Cpu (1) | | 8 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | =========================================================================================== 2 - access("S"."CHANNEL_ID"="CH"."CHANNEL_ID") 3 - access("S"."CUST_ID"="CU"."CUST_ID") 5 - inmemory("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') filter("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') Total 17 seconds, most at HASH JOIN (#3) 211 Million rows sent to hash join from SALES
  • 27. www.enkitec.com 27 With Bloom Filter Pushdown, No Vector Transform ============================================================================================= | Id | Operation | Name | Rows | Activity | Activity Detail | | | | |(Actual) | (%) | (# samples) | ============================================================================================= | 0 | SELECT STATEMENT | | 5 | | | | 1 | HASH GROUP BY | | 5 | | | | 2 | HASH JOIN | | 64 | | | | 3 | HASH JOIN | | 64 | | | | 4 | JOIN FILTER CREATE | :BF0000 | 9 | | | | 5 | PARTITION RANGE ALL | | 9 | | | | 6 | TABLE ACCESS INMEMORY FULL | CUSTOMERS | 9 | | | | 7 | JOIN FILTER USE | :BF0000 | 24753 | | | | 8 | PARTITION RANGE ALL | | 24753 | | | | 9 | TABLE ACCESS INMEMORY FULL | SALES | 24753 | 100.00 | in memory (3) | | 10 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | ============================================================================================= 2 - access("S"."CHANNEL_ID"="CH"."CHANNEL_ID") 3 - access("S"."CUST_ID"="CU"."CUST_ID") 6 - inmemory("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') filter("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') 9 - inmemory(SYS_OP_BLOOM_FILTER(:BF0000,"S"."CUST_ID")) filter(SYS_OP_BLOOM_FILTER(:BF0000,"S"."CUST_ID")) Only 3 seconds of CPU usage noced (all in vectorized code) Only 24753 rows returned from SALES
  • 28. www.enkitec.com 28 With Vector Transformaon ===================================================================================================== | Id | Operation | Name | Rows |Activity | Activity Detail | | | | |(Actual) | (%) | (# samples) | ===================================================================================================== | 0 | SELECT STATEMENT | | 5 | | | | 1 | TEMP TABLE TRANSFORMATION | | 5 | | | | 2 | LOAD AS SELECT | | 2 | | | | 3 | VECTOR GROUP BY | | 1 | | | | 4 | HASH GROUP BY | | 0 | | | | 5 | KEY VECTOR CREATE BUFFERED | :KV0000 | 9 | | | | 6 | PARTITION RANGE ALL | | 9 | | | | 7 | TABLE ACCESS INMEMORY FULL | CUSTOMERS | 9 | | | | 8 | LOAD AS SELECT | | 2 | | | | 9 | VECTOR GROUP BY | | 5 | | | | 10 | KEY VECTOR CREATE BUFFERED | :KV0001 | 5 | | | | 11 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | | 12 | HASH GROUP BY | | 5 | | | | 13 | HASH JOIN | | 5 | | | | 14 | MERGE JOIN CARTESIAN | | 5 | | | | 15 | TABLE ACCESS FULL | SYS_TEMP_0FD...| 1 | | | | 16 | BUFFER SORT | | 5 | | | | 17 | TABLE ACCESS FULL | SYS_TEMP_0FD...| 5 | | | | 18 | VIEW | VW_VT_0737CF93 | 5 | | | | 19 | VECTOR GROUP BY | | 5 | | | | 20 | HASH GROUP BY | | 0 | | | | 21 | KEY VECTOR USE | :KV0001 | 64 | | | | 22 | KEY VECTOR USE | :KV0000 | 64 | | | | 23 | PARTITION RANGE ALL | | 64 | | | | 24 | TABLE ACCESS INMEMORY FULL | SALES | 64 | 100.00 | in memory (2) | ===================================================================================================== VECTOR GROUP BY (#19) reduces results to 5 aggregated rows Only 64 rows returned from SALES azer filtering by 2 dimensions
  • 29. www.enkitec.com 29 With Vector Transformaon (…continued…) Predicate Information (identified by operation id): --------------------------------------------------- 7 - inmemory("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') filter("CU"."CUST_POSTAL_CODE" LIKE 'MMM%') 13 - access("ITEM_9"=INTERNAL_FUNCTION("C0") AND "ITEM_10"="C2" AND "ITEM_7"=INTERNAL_FUNCTION("C0") AND "ITEM_8"="C2") 24 - inmemory((SYS_OP_KEY_VECTOR_FILTER("S"."CUST_ID",:KV0000) AND SYS_OP_KEY_VECTOR_FILTER("S"."CHANNEL_ID",:KV0001))) filter((SYS_OP_KEY_VECTOR_FILTER("S"."CUST_ID",:KV0000) AND SYS_OP_KEY_VECTOR_FILTER("S"."CHANNEL_ID",:KV0001))) - dynamic statistics used: dynamic sampling (level=2) - 1 Sql Plan Directive used for this statement - vector transformation used for this statement
  • 30. www.enkitec.com 30 Example 2: A bigger aggregaon SELECT /*+ MONITOR NO_VECTOR_TRANSFORM NO_PX_JOIN_FILTER(@"SEL$1" "S"@"SEL$1") */ ch.channel_desc , p.promo_subcategory , SUM(s.quantity_sold) FROM ssh.sales s , ssh.channels ch , ssh.promotions p WHERE s.channel_id = ch.channel_id AND s.promo_id = p.promo_id AND p.promo_category = 'TV' GROUP BY ch.channel_desc , p.promo_subcategory This query sums many more rows in SALES based on 2 dimension scans
  • 31. No Bloom Filter Pushdown, No Vector Transformaon ============================================================================================== | Id | Operation | Name | Rows |Activity | Activity Detail | | | | |(Actual) | (%) | (# samples) | ============================================================================================== | 0 | SELECT STATEMENT | | 15 | | | | 1 | HASH GROUP BY | | 15 | | | | 2 | HASH JOIN | | 15 | | | | 3 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | | 4 | VIEW | VW_GBC_10 | 15 | | | | 5 | HASH GROUP BY | | 15 | 35.00 | Cpu (7) | | 6 | HASH JOIN | | 48M | 50.00 | Cpu (10) | | 7 | TABLE ACCESS INMEMORY FULL | PROMOTIONS | 115 | | | | 8 | PARTITION RANGE ALL | | 211M | | | | 9 | TABLE ACCESS INMEMORY FULL | SALES | 211M | 15.00 | in memory (3) | ============================================================================================== Predicate Information (identified by operation id): --------------------------------------------------- www.enkitec.com 31 2 - access("ITEM_1"="CH"."CHANNEL_ID") 6 - access("S"."PROMO_ID"="P"."PROMO_ID") 7 - inmemory("P"."PROMO_CATEGORY"='TV') filter("P"."PROMO_CATEGORY"='TV') Total 20 seconds runme (most in HASH JOIN and HASH GROUP BY) 211M rows from SALES, 48M rows survive the joins
  • 32. www.enkitec.com 32 With Bloom Filter Pushdown, No Vector Transform =============================================================================================== | Id | Operation | Name | Rows |Activity | Activity Detail | | | | |(Actual) | (%) | (# samples) | =============================================================================================== | 0 | SELECT STATEMENT | | 15 | | | | 1 | HASH GROUP BY | | 15 | | | | 2 | HASH JOIN | | 15 | | | | 3 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | | 4 | VIEW | VW_GBC_10 | 15 | | | | 5 | HASH GROUP BY | | 15 | 71.43 | Cpu (10) | | 6 | HASH JOIN | | 48M | 28.57 | Cpu (4) | | 7 | JOIN FILTER CREATE | :BF0000 | 115 | | | | 8 | TABLE ACCESS INMEMORY FULL | PROMOTIONS | 115 | | | | 9 | JOIN FILTER USE | :BF0000 | 49M | | | | 10 | PARTITION RANGE ALL | | 49M | | | | 11 | TABLE ACCESS INMEMORY FULL | SALES | 49M | | | =============================================================================================== 2 - access("ITEM_1"="CH"."CHANNEL_ID") 6 - access("S"."PROMO_ID"="P"."PROMO_ID") 8 - inmemory("P"."PROMO_CATEGORY"='TV') filter("P"."PROMO_CATEGORY"='TV') 11 - inmemory(SYS_OP_BLOOM_FILTER(:BF0000,"S"."PROMO_ID")) filter(SYS_OP_BLOOM_FILTER(:BF0000,"S"."PROMO_ID")) 49M rows returned from SALES azer bloom filtering
  • 33. www.enkitec.com 33 With Vector Transformaon ==================================================================================================== | Id | Operation | Name | Rows |Activity |Activity Detail| | | | |(Actual) | (%) | (# samples) | ==================================================================================================== | 0 | SELECT STATEMENT | | 15 | | | | 1 | TEMP TABLE TRANSFORMATION | | 15 | | | | 2 | LOAD AS SELECT | | 2 | | | | 3 | VECTOR GROUP BY | | 5 | | | | 4 | KEY VECTOR CREATE BUFFERED | :KV0000 | 5 | | | | 5 | TABLE ACCESS INMEMORY FULL | CHANNELS | 5 | | | | 6 | LOAD AS SELECT | | 2 | Vector | group by | | 7 | VECTOR GROUP BY | | 3 | pushed | deeper | | 8 | KEY VECTOR CREATE BUFFERED | :KV0001 | 115 | | | | 9 | TABLE ACCESS INMEMORY FULL | PROMOTIONS | 115 | through | the HASH | | 10 | HASH GROUP BY | | 15 | | JOINs | | 11 | HASH JOIN | | 15 | | | | 12 | HASH JOIN | | 15 | | | | 13 | TABLE ACCESS FULL | SYS_TEMP_0FD...| 5 | | | | 14 | VIEW | VW_VT_0737CF | 15 | | | | 15 | VECTOR GROUP BY | | 15 | 20.00 | Cpu (1) | | 16 | HASH GROUP BY | | 0 | | | | 17 | KEY VECTOR USE | :KV0000 | 48M | | | | 18 | KEY VECTOR USE | :KV0001 | 48M | | | | 19 | PARTITION RANGE ALL | | 48M | | | | 20 | TABLE ACCESS INMEMORY FULL | SALES | 48M | 60.00 | in memory (3) | | 21 | TABLE ACCESS FULL | SYS_TEMP_0FD...| 3 | | | ====================================================================================================
  • 34. www.enkitec.com 34 With Vector Transformaon (…continued…) Predicate Information (identified by operation id): --------------------------------------------------- 9 - inmemory("P"."PROMO_CATEGORY"='TV') filter("P"."PROMO_CATEGORY"='TV') 11 - access("ITEM_10"=INTERNAL_FUNCTION("C0") AND "ITEM_11"="C2") 12 - access("ITEM_8"=INTERNAL_FUNCTION("C0") AND "ITEM_9"="C2") 20 - inmemory((SYS_OP_KEY_VECTOR_FILTER("S"."PROMO_ID",:KV0001) AND SYS_OP_KEY_VECTOR_FILTER("S"."CHANNEL_ID",:KV0000))) filter((SYS_OP_KEY_VECTOR_FILTER("S"."PROMO_ID",:KV0001) AND SYS_OP_KEY_VECTOR_FILTER("S"."CHANNEL_ID",:KV0000))) - dynamic statistics used: dynamic sampling (level=2) - 1 Sql Plan Directive used for this statement - vector transformation used for this statement
  • 35. www.enkitec.com 35 A query bo4lenecked by data processing, not retrieval • A query bo4lenecked by data processing, not retrieval • Hash joins and a GROUP BY spilling to TEMP
  • 36. www.enkitec.com 36 Reducing PGA memory usage and TEMP IO? • Classic SQL opmizaon techniques: • Filter early -­‐> Sort and Join less rows • Group to fewer buckets • Paron wise joins (or "chunkify" workload) • Changing join orders • Kill it with Hardware: • Increase PGA_AGGREGATE_TARGET • Increase PX degree • You'll use more CPU … and more memory! • Not all operaons are simply addive • They can't spread memory usage into "parons" with more slaves! • DISTINCT !
  • 37. www.enkitec.com 37 Approximate Count Disnct (12.1.0.2) -- traditional (and precise) way: SELECT COUNT(DISTINCT cust_id) FROM ssh.sales WHERE amount_sold > 1; -- new (approximate) way: SELECT APPROX_COUNT_DISTINCT(cust_id) FROM ssh.sales WHERE amount_sold > 1; • It looks like this feature ulizes the HyperLogLog algorithm: h4p://externaltable.blogspot.com/2014/08/scaling-­‐up-­‐cardinality-­‐ esmates-­‐in.html
  • 38. www.enkitec.com 38 COUNT (DISTINCT column)
  • 40. www.enkitec.com 40 Thanks! Tanel Põder & Kerry Osborne Accenture Enkitec Group h4p://www.enkitec.com h4p://kerryosborne.oracle-­‐guy.com h4p://blog.tanelpoder.com