SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Mais procurados

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
Abdul Rahman Sherzad
 
OOUG - Oracle Performance Tuning with AAS
OOUG - Oracle Performance Tuning with AASOOUG - Oracle Performance Tuning with AAS
OOUG - Oracle Performance Tuning with AAS
Kyle Hailey
 

Mais procurados (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
 

Destaque

OGG Architecture Performance
OGG Architecture PerformanceOGG Architecture Performance
OGG Architecture Performance
Enkitec
 
Fatkulin hotsos 2014
Fatkulin hotsos 2014Fatkulin hotsos 2014
Fatkulin hotsos 2014
Enkitec
 
Due Diligence with Exadata
Due Diligence with ExadataDue Diligence with Exadata
Due Diligence with Exadata
Enkitec
 
APEX Security Primer
APEX Security PrimerAPEX Security Primer
APEX Security Primer
Enkitec
 
Introducing the eDB360 Tool
Introducing the eDB360 ToolIntroducing the eDB360 Tool
Introducing the eDB360 Tool
Carlos 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
 
Introducing the eDB360 Tool
Introducing the eDB360 ToolIntroducing the eDB360 Tool
Introducing the eDB360 Tool
Carlos Sierra
 

Destaque (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
 

Semelhante a In Memory Database In Action by Tanel Poder and Kerry Osborne

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
Kristofferson A
 
Oracle Basics and Architecture
Oracle Basics and ArchitectureOracle Basics and Architecture
Oracle Basics and Architecture
Sidney Chen
 
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
ssuserbad8d3
 
KSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success StoryKSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success Story
Kristofferson A
 

Semelhante a 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
 

Mais de Enkitec

Oracle GoldenGate Architecture Performance
Oracle GoldenGate Architecture PerformanceOracle GoldenGate Architecture Performance
Oracle GoldenGate Architecture Performance
Enkitec
 
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 writer
Enkitec
 
Combining ACS Flexibility with SPM Stability
Combining ACS Flexibility with SPM StabilityCombining ACS Flexibility with SPM Stability
Combining ACS Flexibility with SPM Stability
Enkitec
 
Why You May Not Need Offloading
Why You May Not Need OffloadingWhy You May Not Need Offloading
Why You May Not Need Offloading
Enkitec
 
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
Enkitec
 
Colvin RMAN New Features
Colvin RMAN New FeaturesColvin RMAN New Features
Colvin RMAN New Features
Enkitec
 
Enkitec Exadata Human Factor
Enkitec Exadata Human FactorEnkitec Exadata Human Factor
Enkitec Exadata Human Factor
Enkitec
 
About Multiblock Reads v4
About Multiblock Reads v4About Multiblock Reads v4
About Multiblock Reads v4
Enkitec
 
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
Enkitec
 
Epic Clarity Running on Exadata
Epic Clarity Running on ExadataEpic Clarity Running on Exadata
Epic Clarity Running on Exadata
Enkitec
 
Sql tuning tools of the trade
Sql tuning tools of the tradeSql tuning tools of the trade
Sql tuning tools of the trade
Enkitec
 
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
Enkitec
 

Mais de 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
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 

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