2014 © Trivadis 
BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA 
Oracle Database 12.1.0.2 New Performance Features 
DOAG 2014, Nürnberg (DE) Christian Antognini 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
1
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
2 
@ChrisAntognini 
Senior principal consultant, trainer and partner at Trivadis in Zurich (CH) 
christian.antognini@trivadis.com 
http://antognini.ch 
Focus: get the most out of Oracle Database 
Logical and physical database design 
Query optimizer 
Application performance management 
Author of Troubleshooting Oracle Performance (Apress, 2008/2014) 
OakTable Network, Oracle ACE Director
2014 © Trivadis 
1.Zone Maps 
2.Attribute Clustering 
3.In-Memory Column Store 
4.In-Memory Aggregation 
5.Approximate Count Distinct 
6.Automatic Big Table Caching 
7.Full Database Caching 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
3 
AGENDA
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
Zone Maps 
4
2014 © Trivadis 
A zone map is a redundant access structure associated to a table. 
At most one zone map per table can be created. 
Zone maps are intended to reduce the number of logical/physical I/O during table scans. 
Zone pruning 
Partition pruning 
Requirements to use zone maps: 
Oracle Partitioning option 
Exadata or Supercluster  
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
5 
Zone Maps
2014 © Trivadis 
The target table is divided in zones. 
SYS_OP_ZONE_ID(ROWID,SCALE) 
A zone consists of a specific number of blocks. 
The SCALE attribute controls it 
#푏푙표푐푘푠=2푠푐푎푙푒 
For every zone, the zone map stores the minimum and maximum values of several columns. 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
6 
How Is a Zone Map Built and What Does It Contain? 
Zone 1 – Min 4 / Max 34 
Zone 2 – Min 1 / Max 666 
Zone 3 – Min 56 / Max 145 
Zone 4 – Min 54 / Max 111 
Zone 5 – Min 95 / Max 101
2014 © Trivadis 
A basic zone map stores information about the columns of a single table. 
A zone map is a materialized view with some particular properties. 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
7 
Basic Zone Map 
CREATE MATERIALIZED ZONEMAP p_bzm ON p (id, n1, n2) 
SQL> SELECT object_type, object_name 
2 FROM user_objects 
3 WHERE object_name LIKE '%P_BZM'; 
OBJECT_TYPE OBJECT_NAME 
----------------- ------------- 
MATERIALIZED VIEW P_BZM 
TABLE P_BZM 
INDEX I_ZMAP$_P_BZM
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
8 
Basic Zone Maps – Execution Plan 
SELECT count(*) FROM p WHERE n1 = 42 
-------------------------------------------------------- 
| Id | Operation | Name | 
-------------------------------------------------------- 
| 0 | SELECT STATEMENT | | 
| 1 | SORT AGGREGATE | | 
|* 2 | TABLE ACCESS STORAGE FULL WITH ZONEMAP| P | 
-------------------------------------------------------- 
2 - storage("N1"=42) 
filter((SYS_ZMAP_FILTER('/* ZM_PRUNING */ SELECT "ZONE_ID$", 
CASE WHEN BITAND(zm."ZONE_STATE$",1)=1 THEN 1 ELSE CASE 
WHEN (zm."MIN_2_N1" > :1 OR zm."MAX_2_N1" < :2) THEN 3 
ELSE 2 END END FROM "CHRIS"."P_ZM" zm 
WHERE zm."ZONE_LEVEL$"=0 ORDER BY zm."ZONE_ID$"', 
SYS_OP_ZONE_ID(ROWID),42,42)<3 AND "N1"=42))
2014 © Trivadis 
A join zone map stores information about the columns of several tables. 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
9 
Join Zone Maps 
CREATE MATERIALIZED ZONEMAP p_jzm AS 
SELECT sys_op_zone_id(p.rowid) AS zone_id$, 
min(p.n1) AS min_p_n1, max(p.n1) AS max_p_n1, 
min(p.n2) AS min_p_n2, max(p.n2) AS max_p_n2, 
min(c.n1) AS min_c_n1, max(c.n1) AS max_c_n1, 
min(c.n2) AS min_c_n2, max(c.n2) AS max_c_n2 
FROM p LEFT OUTER JOIN c ON p.id = c.p_id 
GROUP BY sys_op_zone_id(p.rowid)
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
10 
Join Zone Maps – Execution Plan 
SELECT count(*) FROM p JOIN c ON p.id = c.p_id WHERE c.n2 = 42 
--------------------------------------------------------- 
| Id | Operation | Name | 
--------------------------------------------------------- 
| 0 | SELECT STATEMENT | | 
| 1 | SORT AGGREGATE | | 
|* 2 | HASH JOIN | | 
|* 3 | TABLE ACCESS STORAGE FULL | C | 
|* 4 | TABLE ACCESS STORAGE FULL WITH ZONEMAP| P | 
--------------------------------------------------------- 
2 - access("P"."ID"="C"."P_ID") 
3 - storage("C"."N2"=42) 
filter("C"."N2"=42) 
4 - filter(SYS_ZMAP_FILTER('/* ZM_PRUNING */ SELECT "ZONE_ID$", 
CASE WHEN BITAND(zm."ZONE_STATE$",1)=1 THEN 1 ELSE … )
2014 © Trivadis 
Zone maps are redundant access structures that are not always up-to-date. 
Basic zone maps: 
DML  selective invalidation 
Direct-path insert  automatic maintenance 
Join zone maps (created on the parent table): 
DML on parent  selective invalidation 
Direct-path insert on parent  automatic maintenance 
DML or direct-path insert on child  full invalidation 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
11 
Staleness of Zone Maps
2014 © Trivadis 
To refresh a zone map two techniques are available: 
ALTER MATERIALIZED ZONEMAP REBUILD statement 
REFRESH procedure of DBMS_MVIEW package 
Complete as well as fast refreshes are available. 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
12 
Refreshing Zone Maps
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
Attribute Clustering 
13
2014 © Trivadis 
Clustering data that is processed together is an old optimization technique. 
Index and hash clusters 
Heap table reorganization for improving the clustering factor of an important index 
Clustered data makes a number of features more effective 
B-tree index range scans 
Compression 
Exadata/In-Memory storage indexes 
Zone maps pruning 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
14 
Clustering Data
2014 © Trivadis 
Attribute clustering is a new table directive that specifies 
on which column(s) data has to be clustered 
how data is ordered (linear, interleaved) 
when clustering takes place 
Keeping data clustered may be expensive. Therefore, the database engine doesn’t enforce it. 
It only takes place in case of direct-path inserts and data movement operations. 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
15 
Attribute Clustering 
ALTER TABLE t CLUSTERING BY LINEAR ORDER (id) YES ON LOAD
2014 © Trivadis 
It’s also possible to cluster data based on column(s) of another table 
The joined table must have a PK or UK (ORA-65418) 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
16 
Join Attribute Clustering 
CREATE TABLE p (id NUMBER, 
n NUMBER, 
pad VARCHAR2(100), 
CONSTRAINT p_pk PRIMARY KEY (id)) 
CREATE TABLE c (id NUMBER, 
p_id NUMBER, 
p_n NUMBER, 
pad VARCHAR2(100)) 
CLUSTERING c JOIN p ON (c.p_id = p.id) BY LINEAR ORDER (p.n)
2014 © Trivadis 
It is possible to combine attribute clustering with zone maps 
Both clustering and the zone map are based on the same columns 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
17 
Attribute Clustering and Zone Maps 
CREATE TABLE c ( 
id NUMBER, 
p_id NUMBER, 
p_n NUMBER, 
pad VARCHAR2(100) 
) 
CLUSTERING c JOIN p ON (c.p_id = p.id) BY LINEAR ORDER (p.n) 
WITH MATERIALIZED ZONEMAP (c_zm)
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
In-Memory Aggregation 
18
2014 © Trivadis 
To optimize queries against a star schema, the query optimizer should do the following: 
Start evaluating each dimension table that has restrictions on it. 
Assemble a list with the resulting dimension keys. 
Use this list to extract the matching rows from the fact table. 
This approach cannot be implemented with regular joins. 
The query optimizer can join only two data sets at one time. 
Joining two dimension tables leads to a Cartesian product. 
To solve this problem, Oracle Database implements two query transformations: 
Star transformation 
Vector transformation (new in 12.1.0.2 – requires the In-Memory option) 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
19 
The Star Schema Challenge
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
20 
Star Transformation vs. Vector Transformation 
Selectivity 
Elapsed Time
2014 © Trivadis 
In the documentation Oracle refers to it as In-Memory Aggregation 
It isn’t only about aggregation 
It requires the In-Memory option because it takes advantage of some of its features 
INMEMORY_SIZE must be greater than 0 
The query optimizer considers it when 
equijoins are used 
an aggregate function is applied to a column of the fact table 
the query contains a GROUP BY clause 
-ROLLUP, CUBE and GROUPING SETS are not yet supported 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
21 
Vector Transformation (1)
2014 © Trivadis 
It’s a cost-based query transformation 
It can be controlled through the (NO_)VECTOR_TRANSFORM hints 
As with the star transformation, sometimes is not possible to force it 
It introduces new row source operations 
KEY VECTOR CREATE 
KEY VECTOR USE 
VECTOR GROUP BY 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
22 
Vector Transformation (2)
2014 © Trivadis 
1.For every dimension table with a filter on it the following operations take place 
Access table and filter data 
Create key vector 
Aggregate data 
Create temporary table 
2.Access the fact table through a FTS and filter data by applying the key vectors 
On Exadata the filter is not yet offloaded 
3.Aggregate data with either a vector or hash aggregation 
4.Join data from the fact table to temporary tables 
5.Join dimension tables without a filter on them 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
23 
Vector Transformation – Processing Steps
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
24 
Example 
SELECT c.customer_class, sum(o.order_total) 
FROM orders o, customers c, warehouses w 
WHERE o.customer_id = c.customer_id 
AND o.warehouse_id = w.warehouse_id 
AND c.dob BETWEEN :b1 AND :b2 
AND w.warehouse_name BETWEEN :b3 AND :b4 
GROUP BY c.customer_class 
customers 
orders 
warehouses
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
25 
Execution Plan – Access Dimension Tables, Create Key Vectors, and Create Temporary Tables 
------------------------------------------------------------------------- 
| Id | Operation | Name | 
------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT | | 
| 1 | TEMP TABLE TRANSFORMATION | | 
| 2 | LOAD AS SELECT | SYS_TEMP_0FD9DE69C_28565764 | 
| 3 | VECTOR GROUP BY | | 
| 4 | KEY VECTOR CREATE BUFFERED | :KV0000 | 
|* 5 | TABLE ACCESS STORAGE FULL | CUSTOMERS | 
| 6 | LOAD AS SELECT | SYS_TEMP_0FD9DE69D_28565764 | 
| 7 | VECTOR GROUP BY | | 
| 8 | HASH GROUP BY | | 
| 9 | KEY VECTOR CREATE BUFFERED | :KV0001 | 
|* 10 | TABLE ACCESS STORAGE FULL | WAREHOUSES | 
...
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
26 
Execution Plan – Access Fact Table by Applying Key Vectors, and Join Temporary Tables 
... 
| 11 | HASH GROUP BY | | 
|* 12 | HASH JOIN | | 
| 13 | MERGE JOIN CARTESIAN | | 
| 14 | TABLE ACCESS STORAGE FULL | SYS_TEMP_0FD9DE69D_28565764 | 
| 15 | BUFFER SORT | | 
| 16 | TABLE ACCESS STORAGE FULL | SYS_TEMP_0FD9DE69C_28565764 | 
| 17 | VIEW | VW_VT_72AE2D8F | 
| 18 | VECTOR GROUP BY | | 
| 19 | HASH GROUP BY | | 
| 20 | KEY VECTOR USE | :KV0001 | 
| 21 | KEY VECTOR USE | :KV0000 | 
|* 22 | TABLE ACCESS STORAGE FULL| ORDERS | 
------------------------------------------------------------------------- 
... 
22 - filter(SYS_OP_KEY_VECTOR_FILTER("O"."CUSTOMER_ID",:KV0000) AND 
SYS_OP_KEY_VECTOR_FILTER("O"."WAREHOUSE_ID",:KV0001))
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
Approximate Count Distinct 
27
2014 © Trivadis 
Computing the number of distinct values can be resource intensive 
In some situation performance is more important than precision 
Many algorithms that estimate the number of distinct values have been developed 
Oracle implemented one of this algorithms (HyperLogLog) 
In case an estimated number of distinct values is acceptable, you can replace COUNT(DISTINCT expr) with APPROX_COUNT_DISTINCT(expr) 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
28 
APPROX_COUNT_DISTINCT Function
2014 © Trivadis 
100’000’000 rows 
12.7 GB 
24 columns 
Number of distinct values is 2m, where 푚∈ℕ∗푚<25 
Test queries 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
29 
Test Case – Setup 
SELECT count(DISTINCT n_m) FROM t 
SELECT approx_count_distinct(n_m) FROM t
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
30 
Test Case – Elapsed Time 
0 
10 
20 
30 
40 
2 
4 
8 
16 
32 
64 
128 
256 
512 
1024 
2048 
4096 
8192 
16384 
32768 
65536 
131072 
262144 
524288 
1048576 
2097152 
4194304 
8388608 
16777216 
Elapsed Time [s] 
Number of Distinct Values 
COUNT(DISTINCT) 
APPROX_COUNT_DISTINCT()
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
31 
Test Case – PGA Utilization 
1 
10 
100 
1000 
2 
4 
8 
16 
32 
64 
128 
256 
512 
1024 
2048 
4096 
8192 
16384 
32768 
65536 
131072 
262144 
524288 
1048576 
2097152 
4194304 
8388608 
16777216 
PGA [MB] 
Number of Distinct Values 
COUNT(DISTINCT) 
APPROX_COUNT_DISTINCT()
2014 © Trivadis 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
32 
Test Case – Precision 
-4 
-2 
0 
2 
4 
2 
4 
8 
16 
32 
64 
128 
256 
512 
1024 
2048 
4096 
8192 
16384 
32768 
65536 
131072 
262144 
524288 
1048576 
2097152 
4194304 
8388608 
16777216 
Error in Percent 
Number of Distinct Values
2014 © Trivadis 
Core Messages 
Zone Maps 
Interesting concept, but mostly useless because of licensing rule 
Attribute Clustering 
Declarative way to implement old but good technique for “load-once read-many” data 
In-Memory Aggregation 
Very interesting concept, complements the star transformation 
Approximate Count Distinct 
Useful feature, sound implementation 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
33
2014 © Trivadis 
Questions and answers ... 
BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA 
Christian Antognini Principal Senior Consultant 
christian.antognini@trivadis.com 
19 November 2014 
Oracle Database 12.1.0.2 New Performance Features 
34

Oracle Database 12.1.0.2 New Performance Features

  • 1.
    2014 © Trivadis BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA Oracle Database 12.1.0.2 New Performance Features DOAG 2014, Nürnberg (DE) Christian Antognini 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 1
  • 2.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 2 @ChrisAntognini Senior principal consultant, trainer and partner at Trivadis in Zurich (CH) christian.antognini@trivadis.com http://antognini.ch Focus: get the most out of Oracle Database Logical and physical database design Query optimizer Application performance management Author of Troubleshooting Oracle Performance (Apress, 2008/2014) OakTable Network, Oracle ACE Director
  • 3.
    2014 © Trivadis 1.Zone Maps 2.Attribute Clustering 3.In-Memory Column Store 4.In-Memory Aggregation 5.Approximate Count Distinct 6.Automatic Big Table Caching 7.Full Database Caching 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 3 AGENDA
  • 4.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features Zone Maps 4
  • 5.
    2014 © Trivadis A zone map is a redundant access structure associated to a table. At most one zone map per table can be created. Zone maps are intended to reduce the number of logical/physical I/O during table scans. Zone pruning Partition pruning Requirements to use zone maps: Oracle Partitioning option Exadata or Supercluster  19 November 2014 Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps
  • 6.
    2014 © Trivadis The target table is divided in zones. SYS_OP_ZONE_ID(ROWID,SCALE) A zone consists of a specific number of blocks. The SCALE attribute controls it #푏푙표푐푘푠=2푠푐푎푙푒 For every zone, the zone map stores the minimum and maximum values of several columns. 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 6 How Is a Zone Map Built and What Does It Contain? Zone 1 – Min 4 / Max 34 Zone 2 – Min 1 / Max 666 Zone 3 – Min 56 / Max 145 Zone 4 – Min 54 / Max 111 Zone 5 – Min 95 / Max 101
  • 7.
    2014 © Trivadis A basic zone map stores information about the columns of a single table. A zone map is a materialized view with some particular properties. 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 7 Basic Zone Map CREATE MATERIALIZED ZONEMAP p_bzm ON p (id, n1, n2) SQL> SELECT object_type, object_name 2 FROM user_objects 3 WHERE object_name LIKE '%P_BZM'; OBJECT_TYPE OBJECT_NAME ----------------- ------------- MATERIALIZED VIEW P_BZM TABLE P_BZM INDEX I_ZMAP$_P_BZM
  • 8.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 8 Basic Zone Maps – Execution Plan SELECT count(*) FROM p WHERE n1 = 42 -------------------------------------------------------- | Id | Operation | Name | -------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | |* 2 | TABLE ACCESS STORAGE FULL WITH ZONEMAP| P | -------------------------------------------------------- 2 - storage("N1"=42) filter((SYS_ZMAP_FILTER('/* ZM_PRUNING */ SELECT "ZONE_ID$", CASE WHEN BITAND(zm."ZONE_STATE$",1)=1 THEN 1 ELSE CASE WHEN (zm."MIN_2_N1" > :1 OR zm."MAX_2_N1" < :2) THEN 3 ELSE 2 END END FROM "CHRIS"."P_ZM" zm WHERE zm."ZONE_LEVEL$"=0 ORDER BY zm."ZONE_ID$"', SYS_OP_ZONE_ID(ROWID),42,42)<3 AND "N1"=42))
  • 9.
    2014 © Trivadis A join zone map stores information about the columns of several tables. 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 9 Join Zone Maps CREATE MATERIALIZED ZONEMAP p_jzm AS SELECT sys_op_zone_id(p.rowid) AS zone_id$, min(p.n1) AS min_p_n1, max(p.n1) AS max_p_n1, min(p.n2) AS min_p_n2, max(p.n2) AS max_p_n2, min(c.n1) AS min_c_n1, max(c.n1) AS max_c_n1, min(c.n2) AS min_c_n2, max(c.n2) AS max_c_n2 FROM p LEFT OUTER JOIN c ON p.id = c.p_id GROUP BY sys_op_zone_id(p.rowid)
  • 10.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 10 Join Zone Maps – Execution Plan SELECT count(*) FROM p JOIN c ON p.id = c.p_id WHERE c.n2 = 42 --------------------------------------------------------- | Id | Operation | Name | --------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | |* 2 | HASH JOIN | | |* 3 | TABLE ACCESS STORAGE FULL | C | |* 4 | TABLE ACCESS STORAGE FULL WITH ZONEMAP| P | --------------------------------------------------------- 2 - access("P"."ID"="C"."P_ID") 3 - storage("C"."N2"=42) filter("C"."N2"=42) 4 - filter(SYS_ZMAP_FILTER('/* ZM_PRUNING */ SELECT "ZONE_ID$", CASE WHEN BITAND(zm."ZONE_STATE$",1)=1 THEN 1 ELSE … )
  • 11.
    2014 © Trivadis Zone maps are redundant access structures that are not always up-to-date. Basic zone maps: DML  selective invalidation Direct-path insert  automatic maintenance Join zone maps (created on the parent table): DML on parent  selective invalidation Direct-path insert on parent  automatic maintenance DML or direct-path insert on child  full invalidation 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 11 Staleness of Zone Maps
  • 12.
    2014 © Trivadis To refresh a zone map two techniques are available: ALTER MATERIALIZED ZONEMAP REBUILD statement REFRESH procedure of DBMS_MVIEW package Complete as well as fast refreshes are available. 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 12 Refreshing Zone Maps
  • 13.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features Attribute Clustering 13
  • 14.
    2014 © Trivadis Clustering data that is processed together is an old optimization technique. Index and hash clusters Heap table reorganization for improving the clustering factor of an important index Clustered data makes a number of features more effective B-tree index range scans Compression Exadata/In-Memory storage indexes Zone maps pruning 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 14 Clustering Data
  • 15.
    2014 © Trivadis Attribute clustering is a new table directive that specifies on which column(s) data has to be clustered how data is ordered (linear, interleaved) when clustering takes place Keeping data clustered may be expensive. Therefore, the database engine doesn’t enforce it. It only takes place in case of direct-path inserts and data movement operations. 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 15 Attribute Clustering ALTER TABLE t CLUSTERING BY LINEAR ORDER (id) YES ON LOAD
  • 16.
    2014 © Trivadis It’s also possible to cluster data based on column(s) of another table The joined table must have a PK or UK (ORA-65418) 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 16 Join Attribute Clustering CREATE TABLE p (id NUMBER, n NUMBER, pad VARCHAR2(100), CONSTRAINT p_pk PRIMARY KEY (id)) CREATE TABLE c (id NUMBER, p_id NUMBER, p_n NUMBER, pad VARCHAR2(100)) CLUSTERING c JOIN p ON (c.p_id = p.id) BY LINEAR ORDER (p.n)
  • 17.
    2014 © Trivadis It is possible to combine attribute clustering with zone maps Both clustering and the zone map are based on the same columns 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 17 Attribute Clustering and Zone Maps CREATE TABLE c ( id NUMBER, p_id NUMBER, p_n NUMBER, pad VARCHAR2(100) ) CLUSTERING c JOIN p ON (c.p_id = p.id) BY LINEAR ORDER (p.n) WITH MATERIALIZED ZONEMAP (c_zm)
  • 18.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features In-Memory Aggregation 18
  • 19.
    2014 © Trivadis To optimize queries against a star schema, the query optimizer should do the following: Start evaluating each dimension table that has restrictions on it. Assemble a list with the resulting dimension keys. Use this list to extract the matching rows from the fact table. This approach cannot be implemented with regular joins. The query optimizer can join only two data sets at one time. Joining two dimension tables leads to a Cartesian product. To solve this problem, Oracle Database implements two query transformations: Star transformation Vector transformation (new in 12.1.0.2 – requires the In-Memory option) 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 19 The Star Schema Challenge
  • 20.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 20 Star Transformation vs. Vector Transformation Selectivity Elapsed Time
  • 21.
    2014 © Trivadis In the documentation Oracle refers to it as In-Memory Aggregation It isn’t only about aggregation It requires the In-Memory option because it takes advantage of some of its features INMEMORY_SIZE must be greater than 0 The query optimizer considers it when equijoins are used an aggregate function is applied to a column of the fact table the query contains a GROUP BY clause -ROLLUP, CUBE and GROUPING SETS are not yet supported 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 21 Vector Transformation (1)
  • 22.
    2014 © Trivadis It’s a cost-based query transformation It can be controlled through the (NO_)VECTOR_TRANSFORM hints As with the star transformation, sometimes is not possible to force it It introduces new row source operations KEY VECTOR CREATE KEY VECTOR USE VECTOR GROUP BY 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 22 Vector Transformation (2)
  • 23.
    2014 © Trivadis 1.For every dimension table with a filter on it the following operations take place Access table and filter data Create key vector Aggregate data Create temporary table 2.Access the fact table through a FTS and filter data by applying the key vectors On Exadata the filter is not yet offloaded 3.Aggregate data with either a vector or hash aggregation 4.Join data from the fact table to temporary tables 5.Join dimension tables without a filter on them 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 23 Vector Transformation – Processing Steps
  • 24.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 24 Example SELECT c.customer_class, sum(o.order_total) FROM orders o, customers c, warehouses w WHERE o.customer_id = c.customer_id AND o.warehouse_id = w.warehouse_id AND c.dob BETWEEN :b1 AND :b2 AND w.warehouse_name BETWEEN :b3 AND :b4 GROUP BY c.customer_class customers orders warehouses
  • 25.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 25 Execution Plan – Access Dimension Tables, Create Key Vectors, and Create Temporary Tables ------------------------------------------------------------------------- | Id | Operation | Name | ------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | TEMP TABLE TRANSFORMATION | | | 2 | LOAD AS SELECT | SYS_TEMP_0FD9DE69C_28565764 | | 3 | VECTOR GROUP BY | | | 4 | KEY VECTOR CREATE BUFFERED | :KV0000 | |* 5 | TABLE ACCESS STORAGE FULL | CUSTOMERS | | 6 | LOAD AS SELECT | SYS_TEMP_0FD9DE69D_28565764 | | 7 | VECTOR GROUP BY | | | 8 | HASH GROUP BY | | | 9 | KEY VECTOR CREATE BUFFERED | :KV0001 | |* 10 | TABLE ACCESS STORAGE FULL | WAREHOUSES | ...
  • 26.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 26 Execution Plan – Access Fact Table by Applying Key Vectors, and Join Temporary Tables ... | 11 | HASH GROUP BY | | |* 12 | HASH JOIN | | | 13 | MERGE JOIN CARTESIAN | | | 14 | TABLE ACCESS STORAGE FULL | SYS_TEMP_0FD9DE69D_28565764 | | 15 | BUFFER SORT | | | 16 | TABLE ACCESS STORAGE FULL | SYS_TEMP_0FD9DE69C_28565764 | | 17 | VIEW | VW_VT_72AE2D8F | | 18 | VECTOR GROUP BY | | | 19 | HASH GROUP BY | | | 20 | KEY VECTOR USE | :KV0001 | | 21 | KEY VECTOR USE | :KV0000 | |* 22 | TABLE ACCESS STORAGE FULL| ORDERS | ------------------------------------------------------------------------- ... 22 - filter(SYS_OP_KEY_VECTOR_FILTER("O"."CUSTOMER_ID",:KV0000) AND SYS_OP_KEY_VECTOR_FILTER("O"."WAREHOUSE_ID",:KV0001))
  • 27.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features Approximate Count Distinct 27
  • 28.
    2014 © Trivadis Computing the number of distinct values can be resource intensive In some situation performance is more important than precision Many algorithms that estimate the number of distinct values have been developed Oracle implemented one of this algorithms (HyperLogLog) In case an estimated number of distinct values is acceptable, you can replace COUNT(DISTINCT expr) with APPROX_COUNT_DISTINCT(expr) 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 28 APPROX_COUNT_DISTINCT Function
  • 29.
    2014 © Trivadis 100’000’000 rows 12.7 GB 24 columns Number of distinct values is 2m, where 푚∈ℕ∗푚<25 Test queries 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 29 Test Case – Setup SELECT count(DISTINCT n_m) FROM t SELECT approx_count_distinct(n_m) FROM t
  • 30.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 30 Test Case – Elapsed Time 0 10 20 30 40 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 Elapsed Time [s] Number of Distinct Values COUNT(DISTINCT) APPROX_COUNT_DISTINCT()
  • 31.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 31 Test Case – PGA Utilization 1 10 100 1000 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 PGA [MB] Number of Distinct Values COUNT(DISTINCT) APPROX_COUNT_DISTINCT()
  • 32.
    2014 © Trivadis 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 32 Test Case – Precision -4 -2 0 2 4 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 Error in Percent Number of Distinct Values
  • 33.
    2014 © Trivadis Core Messages Zone Maps Interesting concept, but mostly useless because of licensing rule Attribute Clustering Declarative way to implement old but good technique for “load-once read-many” data In-Memory Aggregation Very interesting concept, complements the star transformation Approximate Count Distinct Useful feature, sound implementation 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 33
  • 34.
    2014 © Trivadis Questions and answers ... BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA Christian Antognini Principal Senior Consultant christian.antognini@trivadis.com 19 November 2014 Oracle Database 12.1.0.2 New Performance Features 34