SlideShare a Scribd company logo
1 of 40
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

Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014Alex Zaballa
 
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
 
Performance Schema for MySQL troubleshooting
Performance Schema for MySQL troubleshootingPerformance Schema for MySQL troubleshooting
Performance Schema for MySQL troubleshootingSveta Smirnova
 
Oracle sql high performance tuning
Oracle sql high performance tuningOracle sql high performance tuning
Oracle sql high performance tuningGuy Harrison
 
Where did my day go?: OEM 12c Administration #em12c #C15LV @IOUG
Where did my day go?: OEM 12c Administration #em12c #C15LV @IOUGWhere did my day go?: OEM 12c Administration #em12c #C15LV @IOUG
Where did my day go?: OEM 12c Administration #em12c #C15LV @IOUGAlfredo Krieg
 
EMCLI Crash Course - DOAG Germany
EMCLI Crash Course - DOAG GermanyEMCLI Crash Course - DOAG Germany
EMCLI Crash Course - DOAG GermanyGokhan Atil
 
Oracle Enterprise Manager Cloud Control 13c for DBAs
Oracle Enterprise Manager Cloud Control 13c for DBAsOracle Enterprise Manager Cloud Control 13c for DBAs
Oracle Enterprise Manager Cloud Control 13c for DBAsGokhan Atil
 
Exadata SMART Monitoring - OEM 13c
Exadata SMART Monitoring - OEM 13cExadata SMART Monitoring - OEM 13c
Exadata SMART Monitoring - OEM 13cAlfredo Krieg
 
Crack the complexity of oracle applications r12 workload v2
Crack the complexity of oracle applications r12 workload v2Crack the complexity of oracle applications r12 workload v2
Crack the complexity of oracle applications r12 workload v2Ajith Narayanan
 
Database Automation with MySQL Triggers and Event Schedulers
Database Automation with MySQL Triggers and Event SchedulersDatabase Automation with MySQL Triggers and Event Schedulers
Database Automation with MySQL Triggers and Event SchedulersAbdul Rahman Sherzad
 
Essential Linux Commands for DBAs
Essential Linux Commands for DBAsEssential Linux Commands for DBAs
Essential Linux Commands for DBAsGokhan Atil
 
DBA Commands and Concepts That Every Developer Should Know
DBA Commands and Concepts That Every Developer Should KnowDBA Commands and Concepts That Every Developer Should Know
DBA Commands and Concepts That Every Developer Should KnowAlex Zaballa
 
Advanced Shell Scripting for Oracle professionals
Advanced Shell Scripting for Oracle professionalsAdvanced Shell Scripting for Oracle professionals
Advanced Shell Scripting for Oracle professionalsAndrejs Vorobjovs
 
How oracle 12c flexes its muscles against oracle 11g r2 final
How oracle 12c flexes its muscles against oracle 11g r2 finalHow oracle 12c flexes its muscles against oracle 11g r2 final
How oracle 12c flexes its muscles against oracle 11g r2 finalAjith Narayanan
 
OOUG - Oracle Performance Tuning with AAS
OOUG - Oracle Performance Tuning with AASOOUG - Oracle Performance Tuning with AAS
OOUG - Oracle Performance Tuning with AASKyle Hailey
 
GLOC 2014 NEOOUG - Oracle Database 12c New Features
GLOC 2014 NEOOUG - Oracle Database 12c New FeaturesGLOC 2014 NEOOUG - Oracle Database 12c New Features
GLOC 2014 NEOOUG - Oracle Database 12c New FeaturesBiju Thomas
 
Top 10 Oracle SQL tuning tips
Top 10 Oracle SQL tuning tipsTop 10 Oracle SQL tuning tips
Top 10 Oracle SQL tuning tipsNirav Shah
 
Oracle database 12.2 new features
Oracle database 12.2 new featuresOracle database 12.2 new features
Oracle database 12.2 new featuresAlfredo Krieg
 

What's hot (20)

Oracle SQL Tuning
Oracle SQL TuningOracle SQL Tuning
Oracle SQL Tuning
 
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
 
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...
 
Performance Schema for MySQL troubleshooting
Performance Schema for MySQL troubleshootingPerformance Schema for MySQL troubleshooting
Performance Schema for MySQL troubleshooting
 
Using AWR for SQL Analysis
Using AWR for SQL AnalysisUsing AWR for SQL Analysis
Using AWR for SQL Analysis
 
Oracle sql high performance tuning
Oracle sql high performance tuningOracle sql high performance tuning
Oracle sql high performance tuning
 
Where did my day go?: OEM 12c Administration #em12c #C15LV @IOUG
Where did my day go?: OEM 12c Administration #em12c #C15LV @IOUGWhere did my day go?: OEM 12c Administration #em12c #C15LV @IOUG
Where did my day go?: OEM 12c Administration #em12c #C15LV @IOUG
 
EMCLI Crash Course - DOAG Germany
EMCLI Crash Course - DOAG GermanyEMCLI Crash Course - DOAG Germany
EMCLI Crash Course - DOAG Germany
 
Oracle Enterprise Manager Cloud Control 13c for DBAs
Oracle Enterprise Manager Cloud Control 13c for DBAsOracle Enterprise Manager Cloud Control 13c for DBAs
Oracle Enterprise Manager Cloud Control 13c for DBAs
 
Exadata SMART Monitoring - OEM 13c
Exadata SMART Monitoring - OEM 13cExadata SMART Monitoring - OEM 13c
Exadata SMART Monitoring - OEM 13c
 
Crack the complexity of oracle applications r12 workload v2
Crack the complexity of oracle applications r12 workload v2Crack the complexity of oracle applications r12 workload v2
Crack the complexity of oracle applications r12 workload v2
 
Database Automation with MySQL Triggers and Event Schedulers
Database Automation with MySQL Triggers and Event SchedulersDatabase Automation with MySQL Triggers and Event Schedulers
Database Automation with MySQL Triggers and Event Schedulers
 
Essential Linux Commands for DBAs
Essential Linux Commands for DBAsEssential Linux Commands for DBAs
Essential Linux Commands for DBAs
 
DBA Commands and Concepts That Every Developer Should Know
DBA Commands and Concepts That Every Developer Should KnowDBA Commands and Concepts That Every Developer Should Know
DBA Commands and Concepts That Every Developer Should Know
 
Advanced Shell Scripting for Oracle professionals
Advanced Shell Scripting for Oracle professionalsAdvanced Shell Scripting for Oracle professionals
Advanced Shell Scripting for Oracle professionals
 
How oracle 12c flexes its muscles against oracle 11g r2 final
How oracle 12c flexes its muscles against oracle 11g r2 finalHow oracle 12c flexes its muscles against oracle 11g r2 final
How oracle 12c flexes its muscles against oracle 11g r2 final
 
OOUG - Oracle Performance Tuning with AAS
OOUG - Oracle Performance Tuning with AASOOUG - Oracle Performance Tuning with AAS
OOUG - Oracle Performance Tuning with AAS
 
GLOC 2014 NEOOUG - Oracle Database 12c New Features
GLOC 2014 NEOOUG - Oracle Database 12c New FeaturesGLOC 2014 NEOOUG - Oracle Database 12c New Features
GLOC 2014 NEOOUG - Oracle Database 12c New Features
 
Top 10 Oracle SQL tuning tips
Top 10 Oracle SQL tuning tipsTop 10 Oracle SQL tuning tips
Top 10 Oracle SQL tuning tips
 
Oracle database 12.2 new features
Oracle database 12.2 new featuresOracle database 12.2 new features
Oracle database 12.2 new features
 

Viewers also liked

OGG Architecture Performance
OGG Architecture PerformanceOGG Architecture Performance
OGG Architecture PerformanceEnkitec
 
Engineered Systems: Environment-as-a-Service Demonstration
Engineered Systems: Environment-as-a-Service DemonstrationEngineered Systems: Environment-as-a-Service Demonstration
Engineered Systems: Environment-as-a-Service DemonstrationEnkitec
 
Using Angular JS in APEX
Using Angular JS in APEXUsing Angular JS in APEX
Using Angular JS in APEXEnkitec
 
Fatkulin hotsos 2014
Fatkulin hotsos 2014Fatkulin hotsos 2014
Fatkulin hotsos 2014Enkitec
 
Due Diligence with Exadata
Due Diligence with ExadataDue Diligence with Exadata
Due Diligence with ExadataEnkitec
 
APEX Security Primer
APEX Security PrimerAPEX Security Primer
APEX Security PrimerEnkitec
 
Profiling Oracle with GDB
Profiling Oracle with GDBProfiling Oracle with GDB
Profiling Oracle with GDBEnkitec
 
Introducing the eDB360 Tool
Introducing the eDB360 ToolIntroducing the eDB360 Tool
Introducing the eDB360 ToolCarlos Sierra
 
SQLT XPLORE: The SQLT XPLAIN hidden child
SQLT XPLORE: The SQLT XPLAIN hidden childSQLT XPLORE: The SQLT XPLAIN hidden child
SQLT XPLORE: The SQLT XPLAIN hidden childCarlos Sierra
 
SQL Tuning made easier with SQLTXPLAIN (SQLT)
SQL Tuning made easier with SQLTXPLAIN (SQLT)SQL Tuning made easier with SQLTXPLAIN (SQLT)
SQL Tuning made easier with SQLTXPLAIN (SQLT)Carlos Sierra
 
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...Carlos Sierra
 
Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability
Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan StabilityUsing SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability
Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan StabilityCarlos Sierra
 
How a Developer can Troubleshoot a SQL performing poorly on a Production DB
How a Developer can Troubleshoot a SQL performing poorly on a Production DBHow a Developer can Troubleshoot a SQL performing poorly on a Production DB
How a Developer can Troubleshoot a SQL performing poorly on a Production DBCarlos Sierra
 
Introducing the eDB360 Tool
Introducing the eDB360 ToolIntroducing the eDB360 Tool
Introducing the eDB360 ToolCarlos Sierra
 
Oracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsOracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsCarlos Sierra
 
Oracle Performance Tools of the Trade
Oracle Performance Tools of the TradeOracle Performance Tools of the Trade
Oracle Performance Tools of the TradeCarlos Sierra
 
Christo kutrovsky oracle rac solving common scalability problems
Christo kutrovsky   oracle rac solving common scalability problemsChristo kutrovsky   oracle rac solving common scalability problems
Christo kutrovsky oracle rac solving common scalability problemsChristo Kutrovsky
 

Viewers also liked (17)

OGG Architecture Performance
OGG Architecture PerformanceOGG Architecture Performance
OGG Architecture Performance
 
Engineered Systems: Environment-as-a-Service Demonstration
Engineered Systems: Environment-as-a-Service DemonstrationEngineered Systems: Environment-as-a-Service Demonstration
Engineered Systems: Environment-as-a-Service Demonstration
 
Using Angular JS in APEX
Using Angular JS in APEXUsing Angular JS in APEX
Using Angular JS in APEX
 
Fatkulin hotsos 2014
Fatkulin hotsos 2014Fatkulin hotsos 2014
Fatkulin hotsos 2014
 
Due Diligence with Exadata
Due Diligence with ExadataDue Diligence with Exadata
Due Diligence with Exadata
 
APEX Security Primer
APEX Security PrimerAPEX Security Primer
APEX Security Primer
 
Profiling Oracle with GDB
Profiling Oracle with GDBProfiling Oracle with GDB
Profiling Oracle with GDB
 
Introducing the eDB360 Tool
Introducing the eDB360 ToolIntroducing the eDB360 Tool
Introducing the eDB360 Tool
 
SQLT XPLORE: The SQLT XPLAIN hidden child
SQLT XPLORE: The SQLT XPLAIN hidden childSQLT XPLORE: The SQLT XPLAIN hidden child
SQLT XPLORE: The SQLT XPLAIN hidden child
 
SQL Tuning made easier with SQLTXPLAIN (SQLT)
SQL Tuning made easier with SQLTXPLAIN (SQLT)SQL Tuning made easier with SQLTXPLAIN (SQLT)
SQL Tuning made easier with SQLTXPLAIN (SQLT)
 
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
 
Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability
Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan StabilityUsing SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability
Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability
 
How a Developer can Troubleshoot a SQL performing poorly on a Production DB
How a Developer can Troubleshoot a SQL performing poorly on a Production DBHow a Developer can Troubleshoot a SQL performing poorly on a Production DB
How a Developer can Troubleshoot a SQL performing poorly on a Production DB
 
Introducing the eDB360 Tool
Introducing the eDB360 ToolIntroducing the eDB360 Tool
Introducing the eDB360 Tool
 
Oracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsOracle Performance Tuning Fundamentals
Oracle Performance Tuning Fundamentals
 
Oracle Performance Tools of the Trade
Oracle Performance Tools of the TradeOracle Performance Tools of the Trade
Oracle Performance Tools of the Trade
 
Christo kutrovsky oracle rac solving common scalability problems
Christo kutrovsky   oracle rac solving common scalability problemsChristo kutrovsky   oracle rac solving common scalability problems
Christo kutrovsky oracle rac solving common scalability problems
 

Similar to In Memory Database In Action by Tanel Poder and Kerry Osborne

Top 10 tips for Oracle performance
Top 10 tips for Oracle performanceTop 10 tips for Oracle performance
Top 10 tips for Oracle performanceGuy Harrison
 
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
 
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
 
Troubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contentionTroubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contentionTanel Poder
 
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
 

Similar to In Memory Database In Action by Tanel Poder and Kerry Osborne (20)

Top 10 tips for Oracle performance
Top 10 tips for Oracle performanceTop 10 tips for Oracle performance
Top 10 tips for Oracle performance
 
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
 
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
 
Troubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contentionTroubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contention
 
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
 

More from Enkitec

Oracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsOracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsEnkitec
 
SQL Tuning Tools of the Trade
SQL Tuning Tools of the TradeSQL Tuning Tools of the Trade
SQL Tuning Tools of the TradeEnkitec
 
Using SQL Plan Management (SPM) to Balance Plan Flexibility and Plan Stability
Using SQL Plan Management (SPM) to Balance Plan Flexibility and Plan StabilityUsing SQL Plan Management (SPM) to Balance Plan Flexibility and Plan Stability
Using SQL Plan Management (SPM) to Balance Plan Flexibility and Plan StabilityEnkitec
 
Oracle GoldenGate Architecture Performance
Oracle GoldenGate Architecture PerformanceOracle GoldenGate Architecture Performance
Oracle GoldenGate Architecture PerformanceEnkitec
 
How Many Ways Can I Manage Oracle GoldenGate?
How Many Ways Can I Manage Oracle GoldenGate?How Many Ways Can I Manage Oracle GoldenGate?
How Many Ways Can I Manage Oracle GoldenGate?Enkitec
 
Understanding how is that adaptive cursor sharing (acs) produces multiple opt...
Understanding how is that adaptive cursor sharing (acs) produces multiple opt...Understanding how is that adaptive cursor sharing (acs) produces multiple opt...
Understanding how is that adaptive cursor sharing (acs) produces multiple opt...Enkitec
 
Sql tuning made easier with sqltxplain (sqlt)
Sql tuning made easier with sqltxplain (sqlt)Sql tuning made easier with sqltxplain (sqlt)
Sql tuning made easier with sqltxplain (sqlt)Enkitec
 
Profiling the logwriter and database writer
Profiling the logwriter and database writerProfiling the logwriter and database writer
Profiling the logwriter and database writerEnkitec
 
Combining ACS Flexibility with SPM Stability
Combining ACS Flexibility with SPM StabilityCombining ACS Flexibility with SPM Stability
Combining ACS Flexibility with SPM StabilityEnkitec
 
Why You May Not Need Offloading
Why You May Not Need OffloadingWhy You May Not Need Offloading
Why You May Not Need OffloadingEnkitec
 
LOBS, BLOBS, CLOBS: Dealing with Attachments in APEX
LOBS, BLOBS, CLOBS: Dealing with Attachments in APEXLOBS, BLOBS, CLOBS: Dealing with Attachments in APEX
LOBS, BLOBS, CLOBS: Dealing with Attachments in APEXEnkitec
 
Creating a Business Oriented UI in APEX
Creating a Business Oriented UI in APEXCreating a Business Oriented UI in APEX
Creating a Business Oriented UI in APEXEnkitec
 
Colvin RMAN New Features
Colvin RMAN New FeaturesColvin RMAN New Features
Colvin RMAN New FeaturesEnkitec
 
Enkitec Exadata Human Factor
Enkitec Exadata Human FactorEnkitec Exadata Human Factor
Enkitec Exadata Human FactorEnkitec
 
About Multiblock Reads v4
About Multiblock Reads v4About Multiblock Reads v4
About Multiblock Reads v4Enkitec
 
Performance data visualization with r and tableau
Performance data visualization with r and tableauPerformance data visualization with r and tableau
Performance data visualization with r and tableauEnkitec
 
Epic Clarity Running on Exadata
Epic Clarity Running on ExadataEpic Clarity Running on Exadata
Epic Clarity Running on ExadataEnkitec
 
Sql tuning tools of the trade
Sql tuning tools of the tradeSql tuning tools of the trade
Sql tuning tools of the tradeEnkitec
 
SQLT XPLORE - The SQLT XPLAIN Hidden Child
SQLT XPLORE -  The SQLT XPLAIN Hidden ChildSQLT XPLORE -  The SQLT XPLAIN Hidden Child
SQLT XPLORE - The SQLT XPLAIN Hidden ChildEnkitec
 

More from Enkitec (19)

Oracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsOracle Performance Tuning Fundamentals
Oracle Performance Tuning Fundamentals
 
SQL Tuning Tools of the Trade
SQL Tuning Tools of the TradeSQL Tuning Tools of the Trade
SQL Tuning Tools of the Trade
 
Using SQL Plan Management (SPM) to Balance Plan Flexibility and Plan Stability
Using SQL Plan Management (SPM) to Balance Plan Flexibility and Plan StabilityUsing SQL Plan Management (SPM) to Balance Plan Flexibility and Plan Stability
Using SQL Plan Management (SPM) to Balance Plan Flexibility and Plan Stability
 
Oracle GoldenGate Architecture Performance
Oracle GoldenGate Architecture PerformanceOracle GoldenGate Architecture Performance
Oracle GoldenGate Architecture Performance
 
How Many Ways Can I Manage Oracle GoldenGate?
How Many Ways Can I Manage Oracle GoldenGate?How Many Ways Can I Manage Oracle GoldenGate?
How Many Ways Can I Manage Oracle GoldenGate?
 
Understanding how is that adaptive cursor sharing (acs) produces multiple opt...
Understanding how is that adaptive cursor sharing (acs) produces multiple opt...Understanding how is that adaptive cursor sharing (acs) produces multiple opt...
Understanding how is that adaptive cursor sharing (acs) produces multiple opt...
 
Sql tuning made easier with sqltxplain (sqlt)
Sql tuning made easier with sqltxplain (sqlt)Sql tuning made easier with sqltxplain (sqlt)
Sql tuning made easier with sqltxplain (sqlt)
 
Profiling the logwriter and database writer
Profiling the logwriter and database writerProfiling the logwriter and database writer
Profiling the logwriter and database writer
 
Combining ACS Flexibility with SPM Stability
Combining ACS Flexibility with SPM StabilityCombining ACS Flexibility with SPM Stability
Combining ACS Flexibility with SPM Stability
 
Why You May Not Need Offloading
Why You May Not Need OffloadingWhy You May Not Need Offloading
Why You May Not Need Offloading
 
LOBS, BLOBS, CLOBS: Dealing with Attachments in APEX
LOBS, BLOBS, CLOBS: Dealing with Attachments in APEXLOBS, BLOBS, CLOBS: Dealing with Attachments in APEX
LOBS, BLOBS, CLOBS: Dealing with Attachments in APEX
 
Creating a Business Oriented UI in APEX
Creating a Business Oriented UI in APEXCreating a Business Oriented UI in APEX
Creating a Business Oriented UI in APEX
 
Colvin RMAN New Features
Colvin RMAN New FeaturesColvin RMAN New Features
Colvin RMAN New Features
 
Enkitec Exadata Human Factor
Enkitec Exadata Human FactorEnkitec Exadata Human Factor
Enkitec Exadata Human Factor
 
About Multiblock Reads v4
About Multiblock Reads v4About Multiblock Reads v4
About Multiblock Reads v4
 
Performance data visualization with r and tableau
Performance data visualization with r and tableauPerformance data visualization with r and tableau
Performance data visualization with r and tableau
 
Epic Clarity Running on Exadata
Epic Clarity Running on ExadataEpic Clarity Running on Exadata
Epic Clarity Running on Exadata
 
Sql tuning tools of the trade
Sql tuning tools of the tradeSql tuning tools of the trade
Sql tuning tools of the trade
 
SQLT XPLORE - The SQLT XPLAIN Hidden Child
SQLT XPLORE -  The SQLT XPLAIN Hidden ChildSQLT XPLORE -  The SQLT XPLAIN Hidden Child
SQLT XPLORE - The SQLT XPLAIN Hidden Child
 

Recently uploaded

A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Recently uploaded (20)

A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

In Memory Database In Action by Tanel Poder and Kerry Osborne

  • 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