MATERIALIZED VIEWS

- WISSENSWERTES UND NEUERUNGEN IN 12C

AUTHOR: JONAS GASSENMEYER

www.syntegris.de

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Mein Haus, mein Auto,…

[email protected]

@gassenmj

Stand 42

© SYNTEGRIS INFORMATION SOLUTIONS GMBH AGENDA . Vorstellung (2 Minuten) . Use Case Pharma Konzern (3 Minuten) •Wissenswertes (vor 12c) .Was ist eine MV, (SQL Hinterlegen und Index drauf) (2 Minuten) .Query Rewrite (1 Minuten) .Atomic_refresh (5 Minuten) .Tablespace (1 Minute) .Fast refresh (incrementell) (5 Minuten) .„es kommt drauf an“ (1 Minuten)

• Out of place refresh . Prebuilt (3 Minuten) . Demo (3 Minuten)

• On Statement MVs . Erklärung (3 Minuten) . Demo (3 Minuten)

• Real time MVs . Erklärung (3 Minuten) . Demo (3 Minuten)

Refresh Statistiken

.Erklärung (3 Minuten) .Demo (3 Minuten) .Bug?

Fazit (3 Minuten)

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Use Case - Aggregation

Table Table Table complex Tables MView fast select Report aggregation

runs when user runs at night requests the report

Materialized View pre-computes result sets

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Use Case -

› Use Case - Replication

Database Local DB MView Link Table Remote DB

Data

Materialized View copies remote data to local DB

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Real World Example?

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Chemical Substances

› Ordering Vials/Tubes/Plates

Differ on each Site → Aggregation From ca. 50 Mio aggregated to ca. 6.5 Mio

› Metadata about Substances

Same on each Site → Replication Ca. 18.5 Mio

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Example – Pharma R&D

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Example – Registration

Registration System

PL/SQL API

Frankfurt (Master)

MV MV MV MV

Boston Tucson Paris Toulouse

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Example – Aggregation of Orderable Substances

Web Interface

Synonyms

Global Ordering

MV MV MV MV

~50 Mio aggregated to ~6.5 Mio

Boston Tucson Paris Toulouse

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Code?

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Simple Syntax

CREATE MATERIALIZED VIEW abc_mv AS SELECT * from abc@remotedb;

DROP MATERIALIZED VIEW abc_mv;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Method

CREATE MATERIALIZED VIEW schema.mv_name TABLESPACE TBS_NOLOG BUILD DEFERRED USING INDEX REFRESH COMPLETE ON DEMAND DISABLE QUERY REWRITE AS (SELECT /*+ driving_site (r1)*/ col1 ,col2 ,… FROM schema.table1@db_link alias_remote_table r1, schema.table2@db_link alias_remote_table r2 WHERE …;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Tipp!

› Driving site Hint places costs on local/remote site

› Consider to use Oracles JOIN Syntax!

CREATE MATERIALIZED VIEW schema.mv_name AS (SELECT /*+ driving_site (alias_remote_table)*/ col1 ,col2 ,… FROM schema.table1@db_link alias_remote_table1, schema.table2@db_link alias_table2 WHERE alias_table2. = alias_remote_table1.join col3 = ‘xy‘;

http://docs.oracle.com/database/122/SQLRF/Comments.htm#GUID-DDABFD2E-FE80-4A2D-99D2-87E61EFA2182

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Tipp! ?

› Nolog Tablespace

› Backup/Redo might not be needed

› In case of Recovery: complete refresh against master table

CREATE MATERIALIZED VIEW schema.mv_name TABLESPACE TBS_NOLOG AS (SELECT col1 ,col2 ,… FROM schema.table1@db_link WHERE …;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Parameters

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Methods ------complete fast atomic

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Methods

CREATE MATERIALIZED VIEW schema.mv_name TABLESPACE TBS_NOLOG BUILD DEFERRED USING INDEX REFRESH COMPLETE ON DEMAND DISABLE QUERY REWRITE AS (SELECT /*+ driving_site (r1)*/ col1 ,col2 ,… FROM schema.table1@db_link alias_remote_table r1, schema.table2@db_link alias_remote_table r2 WHERE …;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Methods - Complete Refresh

Table Complete refresh MView

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Methods - Fast Refresh

Incremental refresh Table MView MV Incremental refresh LOG

Incremental refresh

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Fast Refresh - Details

› AFTER TRIGGER logs changes in master table

› additional Table MLOG$_master_name

› master instance must provide extra space for those logs

› Special:

fast refresh direct path operations on masters

unregister MVs which are not used anymore!

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Materialized View Logs

› PRIMARY KEY LOGIC CREATE MATERIALIZED VIEW LOG ON master_table › ROWID PHYSICAL WITH PRIMARY KEY,ROWID INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW mv_name REFRESH WITH ROWID AS SELECT * FROM table@db_link;

› IMPACT: Reorganization and truncating of the master table is difficult FAST REFRESH will TURN into a COMPLETE REFRESH

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Methods

CREATE MATERIALIZED VIEW schema.mv_name TABLESPACE TBS_NOLOG ON PREBUILD TABLE USING INDEX REFRESH COMPLETE ON DEMAND DISABLE QUERY REWRITE AS (SELECT /*+ driving_site (r1)*/ col1 ,col2 ,… FROM schema.table1@db_link alias_remote_table r1, schema.table2@db_link alias_remote_table r2 WHERE …;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Scheduled Refreshes

BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => ‘JOB_REFRESH_MAT_VIEWS_MASTER', job_type => 'STORED_PROCEDURE', job_action => 'REFRESH_MAT_VIEWS_MASTER’, repeat_interval => 'FREQ=MINUTELY;INTERVAL=10’, comments => 'fast refresh for MV'); END; / dbms_mview.refresh('MV', 'C’, atomic_refresh => FALSE );

Is not possible in MVs Definition!

© SYNTEGRIS INFORMATION SOLUTIONS GMBH ATOMIC REFRESH = TRUE

› Special Options DELETE › MV is readable all the time

› Index maintenance during delete and INSERT insert SELECT › Default since 10g

› REDO and UNDO COMMIT

MView

© SYNTEGRIS INFORMATION SOLUTIONS GMBH ATOMIC REFRESH = FALSE

TRUNCATE › truncate faster than delete (high water mark)

INSERT › minimal Index maintenance /*+append*/ SELECT › append hint used during insert (direct path load)

COMMIT › MView empty during refresh (MV readable?)

› No UNDO (truncate) and less REDO MView (append)

© SYNTEGRIS INFORMATION SOLUTIONS GMBH DEMO!

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Time ------on demand on commit on statement (12c)

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Time - On DEMAND

manual execution or regular job

dbms_mview.refresh

Table MView

Refresh

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Time - On COMMIT

commit

Table MView

Refresh

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Statement-Level Refresh (12c)

CREATE MATERIALIZED VIEW schema.mv_name TABLESPACE TBS_NOLOG BUILD DEFERRED USING INDEX REFRESH FAST ON STATEMENT DISABLE QUERY REWRITE AS (SELECT /*+ driving_site (r1)*/ col1 ,col2 ,… FROM schema.table1@db_link alias_remote_table r1, schema.table2@db_link alias_remote_table r2 WHERE …;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Statement-Level Refresh

Any DML before commit Table join MView Table Refresh

© SYNTEGRIS INFORMATION SOLUTIONS GMBH DEMO!

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Build and Change ------build deferred prebuild table out of place (12c)

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Build Deferred

CREATE MATERIALIZED VIEW schema.mv_name TABLESPACE TBS_NOLOG BUILD DEFERRED USING INDEX REFRESH COMPLETE ON DEMAND DISABLE QUERY REWRITE AS (SELECT /*+ driving_site (r1)*/ col1 ,col2 ,… FROM schema.table1@db_link alias_remote_table r1, schema.table2@db_link alias_remote_table r2 WHERE …;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Build Deferred

create MV build deferred MV empty

Table

MV complete refresh with Data

DEFAULT = BUILD IMMEDIATE

© SYNTEGRIS INFORMATION SOLUTIONS GMBH On prebuild Table

CREATE MATERIALIZED VIEW schema.mv_name TABLESPACE TBS_NOLOG ON PREBUILD TABLE USING INDEX REFRESH COMPLETE ON DEMAND DISABLE QUERY REWRITE AS (SELECT /*+ driving_site (r1)*/ col1 ,col2 ,… FROM schema.table1@db_link alias_remote_table r1, schema.table2@db_link alias_remote_table r2 WHERE …;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH On prebuild Table

create table as select prebuild table create MV Table

Refresh MView

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Out-of-Place Refresh

dbms_mview.refresh( 'MV’ , method => ‘?’ , atomic_refresh => false , out_of_place => true );

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Out-of-Place Refresh

RV$xxx Refresh table

Table New Segment

MView SQL

© SYNTEGRIS INFORMATION SOLUTIONS GMBH DEMO!

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Performance ------Query Rewrite Real Time (12c)

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Query Rewrite

CREATE MATERIALIZED VIEW schema.mv_name TABLESPACE TBS_NOLOG ON PREBUILD TABLE USING INDEX REFRESH COMPLETE ON DEMAND ENABLE QUERY REWRITE AS (SELECT /*+ driving_site (r1)*/ col1 ,col2 ,… FROM schema.table1@db_link alias_remote_table r1, schema.table2@db_link alias_remote_table r2 WHERE …;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Query Rewrite

Select

CBO Tables rewrites the query to use MV Select the MV

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Statement-Level Refresh

CREATE MATERIALIZED VIEW schema.mv_name TABLESPACE TBS_NOLOG BUILD DEFERRED USING INDEX REFRESH FAST ON DEMAND ENABLE QUERY REWRITE ENABLE ON QUERY COMPUTATION AS (SELECT /*+ driving_site (r1)*/ col1 ,col2 ,… FROM schema.table1@db_link alias_remote_table r1, schema.table2@db_link alias_remote_table r2 WHERE …;

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Real-Time Materialized Views

Select

CBO Table rewrites the Select query to use MV MV the MV and Incremental LOG reads Delta from refresh MV Logs

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Further Reading / Code Examples

› Chris Saxon: https://blogs.oracle.com/sql/12-things- developers-will-love-about-oracle-database-12c-release- 2#real-time-mv

› Uwe Hesse: https://uhesse.com/2017/01/05/real-time- materialized-views-in-oracle-12c/

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Measures

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Refresh Statistics History –

› SELECT * FROM DBA_MVREF_STATS; SELECT * FROM DBA_MVREF_STATS_SYS_DEFAULTS;

› SELECT * FROM DBA_MVREF_RUN_STATS; SELECT * FROM DBA_MVREF_STATS_PARAMS;

› SELECT * FROM DBA_MVREF_CHANGE_STATS;

› SELECT * FROM DBA_MVREF_STMT_STATS;

Theory Reality

© SYNTEGRIS INFORMATION SOLUTIONS GMBH DEMO!

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Conclusion

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Fazit

› Improvements (already before von 12c)

› Usability – easy syntax, not much coding required!

› Performance Improvements (espacially 12.2)

› Still some question marks (Bugs?)

› Everybody should use Materialized Views (independent from Your DB Version!). But know when and how.

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Overview

Feature 12c? Judge

------

Statement-Level Refresh 12.2

Refresh Statistics History 12.2

Atomic Refresh x

Out-of-Place Refresh 12.1

Real-Time Materialized Views 12.2

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Disadvantages Advantages ------

› Data redundancy › reduce network loads

› Additional storage capacity › Mass deployment : templates

› (non-) currentness of data › Site – specific customization (e.g. timing of refresh) › Administrative overhead/ additional Work › Disconnected computing: network connection only during refresh › Strange caching behavior (drop and recreate) › Performance feature

› Multiple options, easy configuration

© SYNTEGRIS INFORMATION SOLUTIONS GMBH Questions?

© SYNTEGRIS INFORMATION SOLUTIONS GMBH SYNTEGRIS INFORMATION SOLUTIONS GMBH HERMANNSTRASSE 54-56 63263 NEU-ISENBURG

FON (06102) 29 86 68 FAX (06102) 55 88 06 [email protected] SYNTEGRIS.DE

© SYNTEGRIS INFORMATION SOLUTIONS GMBH