SQL Performance Tuning mit Analytic Functions - ein Projektbericht

Ähnliche Dokumente
DOAG Analytische Funktionen in SQL für Einsteiger

Oracle Analytic Functions

Oracle Analytic SQL. o Anderer Name: Window functions o Ab 8i o Einfache Ansätze für komplexe Problemstellungen. o Anwendung:

Speed up your Query Strategien zur Optimierung von SQL-Queries. Juni 2012 Ulrike Brenner

APEX optimiert UI/UX am Beispiel der Oracle EBS und OBIEE

<Insert Picture Here> Datenschätze heben: Data Mining Carsten Czarski Leitender Systemberater Business Unit Database ORACLE Deutschland GmbH

Datenbankprogrammierung

Übung PL/SQL Trigger Lösungen

Analytische Funktionen in SQL für Einsteiger

Die Datenmanipulationssprache SQL

Update für Entwickler

Informationen zur Oracle DB SE2

Index Rebuild. DOAG Konferenz , Nürnberg. Martin Hoermann

Advanced Availability Transfer Transfer absences from HR to PPM

Oracle 9i Einführung Performance Tuning

Username and password privileges. Rechteverwaltung. Controlling User Access. Arten von Rechten Vergabe und Entzug von Rechten DBS1 2004

Speed up your Query - Strategien zur Optimierung von SQL-Queries

Oracle OLAP 11g: Performance für das Oracle Data Warehouse

Symbio system requirements. Version 5.1

Analysemöglichkeiten mit SQL:

Explain verstehen. Hans-Jürgen Schönig.

Workflows in APEX mit Camunda

5000 User+, Erfahrungen im Produktivbetrieb einer Saas-DB. DOAG 2011 Konferenz + Ausstellung Bernhard Vogel & Frank Szilinski, esentri

<Insert Picture Here> 8. Business Intelligence & Data Warehouse Konferenz

NEWSLETTER. FileDirector Version 2.5 Novelties. Filing system designer. Filing system in WinClient

Oracle 12c: Neuerungen in PL/SQL. Roman Pyro DOAG 2014 Konferenz

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Erfahrungen aus dem Betatest Oracle Database 11g

+++ Bitte nutzen Sie die integrierte Audio-Funktion von WebEx (Menü Audio -> Integrated Voice Conference -> Start auswählen), um uns zu hören!!!.

SQL aus der Praxis Neue Funktionen für Bäume und Beispiele für Analytic functions

Oracle Database 12c In-Memory Option 7/18/2014. Eckart Mader Oracle Deutschland B.V. & Co. KG. Karlsruhe, den

WCF RIA Services Datengetriebene Apps. Thomas Claudius Huber Senior Consultant Trivadis AG

Kleine Helferlein. Jens Behring its-people. Copyright its-people

PostgreSQL in großen Installationen

Employment and Salary Verification in the Internet (PA-PA-US)

Oracle Old Features. Vortrag für die DOAG-Konferenz Uwe M. Küchler, Valentia GmbH

Vergessene (?) SQL- und PL/SQL- Funktionen

IT-Symposium

SQL Optimizer und SQL Performance

THEMA: GUT VORBEREITET IST HALB ZERTIFIZIERT ANTWORTEN ZUR SAS VISUAL ANALYTICS-ZERTIFIZIERUNG" THOMAS WENDE

NoSQL mit Postgres 15. Juni 2015

Seit 25 Jahren ist PBS ein führender Anbieter von Ergänzungslösungen für die SAP-Datenarchivierung und das Information Lifecycle Management.

Softwareanforderungen für Microsoft Dynamics CRM Server 2015

GESCHÄFTSSTELLENERÖFFNUNG HAMBURG, 25. APRIL 2013

IDS Lizenzierung für IDS und HDR. Primärserver IDS Lizenz HDR Lizenz

Oracle Database 12c Was Sie immer schon über Indexe wissen wollten

Tuning des Weblogic /Oracle Fusion Middleware 11g. Jan-Peter Timmermann Principal Consultant PITSS

Sichere Testdaten mit Oracle Enterprise Manager

First. Kapitel 4Functions. Deterministische und nicht-deterministische Funktionen

Index Rebuild. DOAG Konferenz , Nürnberg DOAG Konferenz , Nürnberg Martin Hoermann Martin Hoermann

Neue Features Oracle Database 12.2 Wann denn endlich?

DOAG Konferenz Was Sie bei modernen Datenbank-Systemen anders machen müssen!

SAP Identity Management 8.0. Product Availability Matrix Customer

Querying Data with Transact-SQL MOC 20761

SQL Cockpit & SAP HANA Prüfen Sie Ihre SQL Abfragen auf HANA-Tauglichkeit

FEM Isoparametric Concept

ORM & OLAP. Object-oriented Enterprise Application Programming Model for In-Memory Databases. Sebastian Oergel

p^db=`oj===pìééçêíáåñçêã~íáçå=

Optimiertes Laden in die F-Fakten-Tabelle des SAP BW

Level 2 German, 2016

Ingenics Project Portal

Rollen im Participant Portal

SQL and PL/SQL unleashed. Neuheiten bei Oracle 11g und Oracle 12c im Bereich SQL und PL/SQL

Designing Business Intelligence Solutions with Microsoft SQL Server MOC 20467

Nested Table Types als Ergänzung zu Pivot XML. Thomas Strub 22. November 2012 DOAG Konferenz Nürnberg

Aufbau eines IT-Servicekataloges am Fallbeispiel einer Schweizer Bank

Introduction FEM, 1D-Example

<Insert Picture Here> Application Express: Stand der Dinge und Ausblick auf Version 5.0

Mehrwert durch Microsoft Business Intelligence

1. General information Login Home Current applications... 3

Level 1 German, 2014

Oracle 9i Einführung. Performance Tuning. Kurs. Teil 12 Materialized Views. Universität Hannover. Praxisbeispiel. Migration.

Einstieg in das SQL- und Datenbanktuning Loblied auf den Tabellen-Index!

Art der Info: Technische Background Info Teil 2 (April 2002)

Update für Entwickler

Release Notes BRICKware Copyright 23. March 2010 Funkwerk Enterprise Communications GmbH Version 1.0

POWER BI DAS neue BI Tool von Microsoft!? Wolfgang Strasser twitter.com/wstrasser

Datenbankbasierte Lösungen

<Insert Picture Here> Oracle Data Mining 11.2

Exercise (Part XI) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1

Creating OpenSocial Gadgets. Bastian Hofmann

Isolationsstufen für Transaktionen. Dr. Karsten Tolle

CA_MESSAGES_ORS_HDTV_IRD_GUIDELINE

SAP PPM Enhanced Field and Tab Control

Corporate Digital Learning, How to Get It Right. Learning Café

Stresstest für Oracle Einführung und Live Demo Swingbench

SODA. Die Datenbank als Document Store. Rainer Willems. Master Principal Sales Consultant Oracle Deutschland B.V. & Co. KG

Transaktionen in Praxis. Dr. Karsten Tolle Vorl

Silverlight 5 die Neuerungen. Thomas Claudius Huber Senior Consultant Trivadis AG

J RG IMMENDORFF STANDORT F R KRITIK MALEREI UND INSPIRATION ERSCHEINT ZUR AUSSTELLUNG IM MUSEUM LU

2011 Oracle Corporation Customer Presentation Version 5.2.2/

Aktuelle Entwicklungen

Oracle Exadata Storage Server Performance erklärt SmartScan

DIE NEUORGANISATION IM BEREICH DES SGB II AUSWIRKUNGEN AUF DIE ZUSAMMENARBEIT VON BUND LNDERN UND KOMMUNEN

DOAG Demo Kino: Advisors, Monitoring Werkzeuge in der Datenbank Ulrike Schwinn Business Unit Database Oracle Deutschland B.V.

Best Practice - ODBC

Manuelles Oracle SQL Tuning

CA_MESSAGES_ORS_HDTV_IRD_GUIDELINE

MySQL Performance Tuning für Entwickler

Database Management. Prof. Dr. Oliver Günther und Steffan Baron Sommersemester 2002 (I)

Transkript:

SQL Performance Tuning mit Analytic Functions - ein Projektbericht Christian Schwitalla Senior Consultant, Custom Dev & Integration Treffen Sie mich später am Stand Scope Alliance im 1. OG 2016 DOAG Konferenz und Ausstellung, Nürnberg, den 15. November 2016 Copyright 2016. Apps Associates 1

Confidentiality The content of this document is proprietary, confidential information pertaining to Apps Associates products, services, solutions and methods. Information herein is intended for use by the client or prospective client only and must not be shared with any third party without consent from Apps Associates. Copyright 2016. Apps Associates 2

Wer bin ich? Christian Schwitalla Senior Consultant, Custom Dev & Integration, BI 25 Jahre Oracle-Erfahrung, DOAG Dev & PL/SQL Community Apps Associates GmbH Dortmund Airport Flughafenring 11 44319 Dortmund Germany Tel. +49 (231) 22 22 79-15 Mobil +49 151 72 11 98 53 Fax +49 (231) 22 22 79-25 Email: christian.schwitalla@appsassociates.com visit us: www.appsassociates.de Copyright 2016. Apps Associates 3

Champions League der Oracle Partner 700+ MitarbeiterInnen Europa USA Asien 2002 gegründet Copyright 2016. Apps Associates 4

Unsere Erfolgsstorys Business Applications Infrastructure & Cloud Services Analytics Custom Dev & Integration Exalytics Certified Delivery Partner Oracle Specialized/Validated Copyright 2016. Apps Associates 5

Agenda Warum Performance-Tuning? Was sind SQL Analytic Functions? Besondere Eigenschaften anhand von drei Beispielen Einsatzbeispiel aus einem Projekt Fazit SQL Challenge Copyright 2016. Apps Associates 6

Warum Performance-Tuning? These: Mit der Einführung der Cloud-Technologie sind doch Performance-Fragen obsolete geworden!!! Wirklich??? Copyright 2016. Apps Associates 7

Warum Performance-Tuning? Offensichtliche Gründe, z.b. Abfrage ist zu langsam. Weniger offensichtliche Gründe: Verbrauch von System-Resourcen Parallelisierbarkeit Skalierbarkeit bei wachsenden Datenmengen Do not tune write fast SQL Copyright 2016. Apps Associates 8

Was sind SQL Analytic Functions? Familie von SQL Funktionen Auch bekannt als Fenster- oder Windowing-Funktionen Bieten eine Frame-Sicht auf die Daten Arbeiten auf der Ergebnismenge einer Abfrage Verfügen über besondere Eigenschaften Oracle: Analytic functions compute an aggregate value based on a group of rows. They differ from aggregate functions in that they return multiple rows for each group. The group of rows is called a window and is defined by the analytic_clause. For each row, a sliding window of rows is defined. The window determines the range of rows used to perform the calculations for the current row. Window sizes can be based on either a physical number of rows or a logical interval such as time. Copyright 2016. Apps Associates 9

Was sind SQL Analytic Functions? nach wie vor wenig bekannt leider Einsatzgebiet eher in BI oder DWH vermutet, weniger im Performance-Tuning normaler SQL-Abfragen verfügbar seit Oracle Database 8i (8.1.6, Januar 2000) verfügbar in allen Datenbank-Editionen ANSI/ISO SQL:2003, SQL:2008 (Windowing Functions) verfügbar auch in DB2, Oracle, Sybase, PostgreSQL, SQL Server Copyright 2016. Apps Associates 10

Was sind SQL Analytic Functions? In 12c Rel.1 sind es 46 Funktionen: AVG, CLUSTER_DETAILS, CLUSTER_DISTANCE, CLUSTER_ID, CLUSTER_PROBABILITY, CLUSTER_SET, CORR, COUNT, COVAR_POP, COVAR_SAMP, CUME_DIST, DENSE_RANK, FEATURE_DETAILS, FEATURE_ID, FEATURE_SET, FEATURE_VALUE, FIRST FIRST_VALUE, LAG, LAST, LAST_VALUE, LEAD, LISTAGG, MAX, MEDIAN, MIN, NTH_VALUE, NTILE, PERCENT_RANK, PERCENTILE_CONT, PERCENTILE_DISC, PREDICTION, PREDICTION_COST, PREDICTION_DETAILS, PREDICTION_PROBABILITY, PREDICTION_SET, RANK, RATIO_TO_REPORT, REGR_, ROW_NUMBER, STDDEV, STDDEV_POP, STDDEV_SAMP, SUM, VAR_POP, VAR_SAMP, VARIANCE Copyright 2016. Apps Associates 11

Besondere Eigenschaften - MAX() Oracle: MAX returns maximum value of expr. You can use it as an aggregate or analytic function. Aggregate Example: the following example determines the highest salary in the hr.employees table: SELECT MAX(salary) "Maximum" FROM employees; Maximum ---------- 24000 Copyright 2016. Apps Associates 12

Besondere Eigenschaften - MAX() Oracle: Analytic Example: the following example calculates, for each employee, the highest salary of the employees reporting to the same manager as the employee: SELECT manager_id, last_name, salary, MAX(salary) OVER (PARTITION BY manager_id) AS mgr_max FROM employees ORDER BY manager_id, last_name, salary; MANAGER_ID LAST_NAME SALARY MGR_MAX ---------- --------- ---------- --------- 100 Zlotkey 10500 17000 101 Baer 10000 12000 101 Whalen 4400 12000 102 Hunold 9000 9000 103 Austin 4800 6000 Copyright 2016. Apps Associates 13

Besondere Eigenschaften Der Zugriff auf Werte aus anderen Zeilen der Ergebnismenge ist möglich. Copyright 2016. Apps Associates 14

Besondere Eigenschaften - LAG() Oracle: LAG is an analytic function. It provides access to more than one row of a table at the same time without a self join. Given a series of rows returned from a query and a position of the cursor, LAG provides access to a row at a given physical offset prior to that position. The following example provides, for each purchasing clerk in the employees table, the salary of the employee hired just before: Copyright 2016. Apps Associates 15

Besondere Eigenschaften - LAG() SELECT hire_date, last_name, salary, LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees WHERE job_id = 'PU_CLERK' ORDER BY hire_date; HIRE_DATE LAST_NAME SALARY PREV_SAL --------- ------------------------- ---------- ---------- 18-MAY-03 Khoo 3100 0 24-JUL-05 Tobias 2800 3100 24-DEC-05 Baida 2900 2800 15-NOV-06 Himuro 2600 2900 10-AUG-07 Colmenares 2500 2600 Copyright 2016. Apps Associates 16

Besondere Eigenschaften Das mehrfache Lesen der Daten ist nicht notwendig. Copyright 2016. Apps Associates 17

Besondere Eigenschaften - RANK() Oracle: RANK calculates the rank of a value in a group of values. As an aggregate function, RANK calculates the rank of a hypothetical row identified by the arguments of the function with respect to a given sort specification. As an analytic function, RANK computes the rank of each row returned from a query with respect to the other rows returned by the query, based on the values of the value_exprs in the order_by_clause. Copyright 2016. Apps Associates 18

Besondere Eigenschaften - RANK() Oracle: Aggregate Example: the following query returns the rank for a $15,500 salary among the employee salaries: SELECT RANK(15500) WITHIN GROUP ORDER BY salary DESC AS "Rank of 15500" FROM employees; Rank of 15500 -------------- 4 Copyright 2016. Apps Associates 19

Besondere Eigenschaften - RANK() Oracle: Analytic Example: the following statement ranks the employees in the sample hr schema in department 60 based on their salaries: SELECT department_id, last_name, salary, RANK() OVER (PARTITION BY department_id ORDER BY salary) AS RANK FROM employees WHERE department_id = 60 ORDER BY RANK, last_name; DEPARTMENT_ID LAST_NAME SALARY RANK ------------- ------------------------- ---------- ---------- 60 Lorentz 4200 1 60 Austin 4800 2 60 Pataballa 4800 2 60 Ernst 6000 4 60 Hunold 9000 5 Copyright 2016. Apps Associates 20

Einsatzbeispiel aus einem Projekt SQL für eine View Laden von Materialized Views (Snapshots) Lesen von Adressen (pro Kunde nur eine Adresse) Auswahl über TYP der Adresse: bevorzugt Adresse mit TYP = FIRMA wenn nicht vorhanden, dann Adresse mit TYP = POSTFACH wenn nicht vorhanden, dann Adresse mit TYP = PRIVAT Copyright 2016. Apps Associates 21

Einsatzbeispiel aus einem Projekt Tabelle ADRESSEN ID (PK) KUNDEN_ID (UK) TYP [ FIRMA POSTFACH PRIVAT ] (UK) STRASSE HAUSNUMMER POSTFACH PLZ ORT Copyright 2016. Apps Associates 22

Einsatzbeispiel aus einem Projekt Beispieldaten: KUNDEN_ID TYP 90810846361 PRIVAT 90810846361 POSTFACH 217537839264 PRIVAT 481491166609 PRIVAT 481491166609 POSTFACH 481491166609 FIRMA Copyright 2016. Apps Associates 23

Einsatzbeispiel aus einem Projekt Das bisherige SQL-Statement: SELECT A.KUNDEN_ID, A.TYP, A.STRASSE, A.HAUSNUMMER, A.POSTFACH, A.PLZ, A.ORT FROM ADRESSEN A WHERE ( ( A.TYP = 'FIRMA' ) OR ( A.TYP = 'POSTFACH' AND NOT EXISTS ( SELECT 1 FROM ADRESSEN B WHERE B.KUNDEN_ID = A.KUNDEN_ID AND B.TYP = 'FIRMA' ) ) OR ( A.TYP = 'PRIVAT' AND NOT EXISTS ( SELECT 1 FROM ADRESSEN C WHERE C.KUNDEN_ID = A.KUNDEN_ID AND C.TYP IN ( 'FIRMA', 'POSTFACH' ) ) ) ) Copyright 2016. Apps Associates 24

Einsatzbeispiel aus einem Projekt Execution Plan des bisherigen SQL-Statements: Vorgang Optionen Objekt SELECT STATEMENT FILTER TABLE ACCESS STORAGE FULL ADRESSEN INDEX UNIQUE SCAN ADRESSEN_UK INDEX RANGE SCAN ADRESSEN_UK Copyright 2016. Apps Associates 25

Einsatzbeispiel aus einem Projekt Laufzeiten des bisherigen SQL-Statements in Sekunden: 100 Rows: 0,02 10 000 Rows: 0,21 1 000 000 Rows: 12,58 100 000 000 Rows: 1190,00 Performancetests mit Oracle Database 12c Enterprise Edition Release 12.1.0.2.0-64bit unter VirtualBox auf einem Office Laptop Copyright 2016. Apps Associates 26

Einsatzbeispiel aus einem Projekt Problem: Ausführungsdauer sprengt den nächtlichen Rahmen der Batchverarbeitung Die Materialized View wird nicht rechtzeitig refreshed Die Tagesverarbeitung läuft an mit einem veralteten Stand der Adressen Aufgabe: das bisherige SQL-Stetement soll beschleunigt werden. Copyright 2016. Apps Associates 27

Einsatzbeispiel aus einem Projekt Neues SQL-Statement mit Einsatz von RANK(): SELECT KUNDEN_ID, TYP, STRASSE, HAUSNUMMER, POSTFACH, PLZ, ORT FROM ( SELECT KUNDEN_ID, TYP, STRASSE, HAUSNUMMER, POSTFACH, PLZ, ORT, RANK() OVER (PARTITION BY KUNDEN_ID ORDER BY CASE TYP WHEN 'FIRMA' THEN 1 WHEN 'POSTFACH' THEN 2 WHEN 'PRIVAT' THEN 3 END ) RANK FROM ADRESSEN ) WHERE RANK = 1 Copyright 2016. Apps Associates 28

Einsatzbeispiel aus einem Projekt Execution Plan des neuen SQL-Statements: Vorgang Optionen Objekt SELECT STATEMENT VIEW WINDOW SORT PUSHED RANK TABLE ACCESS STORAGE FULL ADRESSEN Copyright 2016. Apps Associates 29

Einsatzbeispiel aus einem Projekt Vergleich der Laufzeiten in Sekunden. bisher neu Differenz 100 Rows: 0,02 0,02 0% 10 000 Rows: 0,21 0,09-200% 1 000 000 Rows: 12,58 6,23-200% 100 000 000 Rows: 1190,00 630,00-200% Copyright 2016. Apps Associates 30

Einsatzbeispiel aus einem Projekt Vergleich einiger Statistiken (bei 1000 Rows): bisher neu consistent gets: 9.366 193 logical read bytes from cache: 76.726.272 1.581.056 CPU used by this session: 1 2 Copyright 2016. Apps Associates 31

Einsatzbeispiel aus einem Projekt Das neue SQL-Statement ist signifikant performanter ist einfacher aufgebaut, dadurch verständlicher und wartbarer zwei Subselects wurden eliminiert ist in der Ausführung weniger Resourcenintensiv wird mit wachsender Datenmenge besser zurechtkommen ist einfach zu implementieren und zu testen: neu MINUS alt, alt MINUS neu Copyright 2016. Apps Associates 32

Analytical Functions - Fazit Dank besonderer Eigenschaften Power zum (fast) Nulltarif Geheimfavorit für so manches Performance-Problem Es gibt kaum Gründe, die dagegen sprechen Beispiel für stetige SQL-Evolution Siehe Artikel 2000 Zeilen Java oder 50 Zeilen SQL von Lukas Eder in der Ausgabe 01.2016 von Java Aktuell Oder auch: www.dba-oracle.com/ t_rewrite_sql_exists_subqueries_rank_partiton_analytics.htm Copyright 2016. Apps Associates 33

Analytical Functions - Fazit Nicht (nur) für Statistiker, sondern für alle SQL-Entwickler interessant Das zur Zeit meist unterschätzte SQL-Feature Copyright 2016. Apps Associates 34

Analytical Functions - Fazit Es gibt SQL vor Fenster-Funktionen und SQL nach Fenster- Funktionen Dimitri Fontaine (PostgreSQL) http://tapoueh.org/blog/2013/08/20-window-functions Copyright 2016. Apps Associates 35

Fragen?

Danke für Ihre Aufmerksamkeit!

Wir sind Teil der Scope Alliance (Ebene 1) www.appsassociates.com Copyright 2016. Apps Associates 38

SQL Challenge 1 Im Sinne von Chancengleichheit wird der Unique Index ADRESSEN_UK(KUNDEN_ID, TYP) gelöscht, da das neue SQL- Statement mit RANK() keinen Index nutzt. Copyright 2016. Apps Associates 39

SQL Challenge 1 Execution Plan das bisherigen SQL-Statements ohne den UK: Vorgang Optionen Objekt SELECT STATEMENT FILTER TABLE ACCESS STORAGE FULL ADRESSEN TABLE ACCESS STORAGE FULL FIRST ROWS ADRESSEN TABLE ACCESS STORAGE FULL FIRST ROWS ADRESSEN Copyright 2016. Apps Associates 40

SQL Challenge 1 Vergleich der Laufzeiten in Sekunden: wie bisher, aber ohne UI neu Differenz 100 Rows: 0,03 0,02-30% 10 000 Rows: 19,58 0,09-20000%!!! 1 000 000 Rows: 2396,00 6,23-40000%!!! 100 000 000 Rows:? 630,00 Copyright 2016. Apps Associates 41

SQL Challenge 1 Fazit: ohne den UK ist nur noch die Version mit RANK() brauchbar. Das bisherige Statement mit Subselects kann dann getrost in den Copyright 2016. Apps Associates 42

SQL Challenge 2 Das neue SQL-Statement wird gegen ein SQL-Statement ohne RANK() antreten: SELECT KUNDEN_ID, TYP, STRASSE, HAUSNUMMER, POSTFACH, PLZ, ORT FROM ADRESSEN ohne RANK mit RANK Differenz 100 Rows: 0,02 0,02 0% 10 000 Rows: 0,02 0,09 400% 1 000 000 Rows: 1,00 6,23 600% 100 000 000 Rows: 35,40 630,00 2000% Copyright 2016. Apps Associates 43

SQL Challenge 2 Fazit: analytic functions können viel, aber zaubern können sie nicht. RANK() beanchprucht natürlich auch Ausführungszeit für sich. Copyright 2016. Apps Associates 44

Wir sind Teil der Scope Alliance (Ebene 1) www.appsassociates.com Copyright 2016. Apps Associates 45