oracle database 12.1.0.2 new performance features · oracle database 12.1.0.2 new performance...

34
2014 © Trivadis BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA 2014 © Trivadis 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

Upload: others

Post on 28-Dec-2019

41 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA

2014 © Trivadis

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

Page 2: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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)

[email protected]

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

Page 3: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 4: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

19 November 2014 Oracle Database 12.1.0.2 New Performance Features

Zone Maps

4

Page 5: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 6: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 7: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 8: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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))

Page 9: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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)

Page 10: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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 … )

Page 11: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 12: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 13: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

19 November 2014 Oracle Database 12.1.0.2 New Performance Features

Attribute Clustering

13

Page 14: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 15: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 16: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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)

Page 17: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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)

Page 18: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

19 November 2014 Oracle Database 12.1.0.2 New Performance Features

In-Memory Aggregation

18

Page 19: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 20: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

19 November 2014 Oracle Database 12.1.0.2 New Performance Features

20

Star Transformation vs. Vector Transformation

Selectivity

Ela

psed T

ime

Page 21: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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)

Page 22: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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)

Page 23: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 24: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 25: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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 |

...

Page 26: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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))

Page 27: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

19 November 2014 Oracle Database 12.1.0.2 New Performance Features

Approximate Count Distinct

27

Page 28: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 29: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 30: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

19 November 2014 Oracle Database 12.1.0.2 New Performance Features

30

Test Case – Elapsed Time

0

10

20

30

402 4 8

16

32

64

128

256

512

1024

2048

4096

8192

16384

32768

65536

13

10

72

262144

52

42

88

10

48

57

6

20

97

15

2

4194304

83

88

60

8

16

77

72

16

Ela

psed

Tim

e [

s]

Number of Distinct Values

COUNT(DISTINCT) APPROX_COUNT_DISTINCT()

Page 31: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

19 November 2014 Oracle Database 12.1.0.2 New Performance Features

31

Test Case – PGA Utilization

1

10

100

10002 4 8

16

32

64

128

256

512

1024

2048

4096

8192

16384

32768

65536

13

10

72

26

21

44

52

42

88

10

48

57

6

20

97

15

2

41

94

30

4

83

88

60

8

16

77

72

16

PG

A [

MB

]

Number of Distinct Values

COUNT(DISTINCT) APPROX_COUNT_DISTINCT()

Page 32: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

19 November 2014 Oracle Database 12.1.0.2 New Performance Features

32

Test Case – Precision

-4

-2

0

2

42 4 8

16

32

64

128

256

512

1024

2048

4096

8192

16384

32768

65536

13

10

72

26

21

44

52

42

88

10

48

57

6

20

97

15

2

41

94

30

4

83

88

60

8

16

77

72

16

Err

or

in P

erc

en

t

Number of Distinct Values

Page 33: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

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

Page 34: Oracle Database 12.1.0.2 New Performance Features · Oracle Database 12.1.0.2 New Performance Features 5 Zone Maps . ... - ROLLUP, CUBE and GROUPING SETS are not yet supported

2014 © Trivadis

Questions and answers ...

2014 © Trivadis

BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA

Christian Antognini

Principal Senior Consultant

[email protected]

19 November 2014 Oracle Database 12.1.0.2 New Performance Features

34