In-Memory Techniken der Oracle Datenbank

In-Memory Techniken der Oracle Datenbank Christoph Blessing Server Technologies Customer Center ORACLE Deutschland B.V. & Co. KG Agenda • In-Memor...
Author: Eduard Stieber
25 downloads 0 Views 2MB Size


In-Memory Techniken der Oracle Datenbank Christoph Blessing Server Technologies Customer Center ORACLE Deutschland B.V. & Co. KG

Agenda • In-Memory – Ein Markttrend • Übersicht der Oracle Memory-Strukturen • Keep Cache • Result Cache

• Verwendung von SSD: Oracle Flash Cache • Speicheroptimierende Techniken der Datenbank

• Oracle TimesTen In-Memory Database • Architektur und Funktionen • In-Memory Database Cache

In-Memory – Ein Markttrend

In-Memory und Real-Time – ein Gespann Autorisierung, Online Abrechnung, Lokations-basierte Dienste

Markt Daten, Marktereignisse, Auftragszusammenführung, Trading

Real-Time Analytics Interaktive Dashboards Data Mart, Scorecard

eCommerce, Personalisierung, Real-Time Ad Serving

Real-Time Applikationen Instantly Responsive / Highly Scalable / Always-On

Mainstream 64-bit Prozessoren

Schnelle Netzwerke

Schlüsseltechnologien

Genügend RAM

Applikations-Antwortzeiten Warum sind diese entscheidend? • Service Level Agreements (SLA) nicht eingehalten • Aufgrund hoher Antwortzeiten

• Bestimmt Mitarbeiterproduktivität und Kundenzufriedenheit • Kundenabwägungen • Mitbewerb liefert bessere Antwortzeiten

• Unternehmensziele nicht erreicht und abnehmende Profitabilität • Auswirkungen auf das Geschäftsergebnis

Übersicht der Oracle Memory-Strukturen

Architektur des Arbeitsspeichers

Keep Cache

Der Keep Cache DB Buffer Cache

Least Recently Used

2k Blöcke

Most Recently Used Default Cache

4k Blöcke

16k Blöcke Keep Cache

Recycle Cache

Free / Pinned / Dirty Buffer

• Der Keep Cache ist Bestandteil des Buffer Caches • Die Buffer im Keep Cache werden so lange gefüllt, bis für das Aufnehmen neuer Blöcke der älteste geleert wird • Die Konfiguration des Keep Cache erfolgt über den Parameter DB_KEEP_CACHE_SIZE • Der Recycle Cache enthält Blöcke, die nach Nutzung sofort wieder aus dem Arbeitsspeicher entfernt werden (DB_RECYCLE_CACHE_SIZE)

Steuerung des Keep Cache • Die Storage-Klausel bestimmt den jeweiligen Cache: CREATE TABLE test(a NUMBER, b VARCHAR2(20)) STORAGE (BUFFER_POOL KEEP | RECYCLE | DEFAULT);

• Mit KEEP wird jede NOCACHE-Klausel überschrieben • Bei einer partitionierten Tabelle erben die einzelnen Partitionen die Speicherorteinstellung

• Der Speicherort für Blöcke einer Tabelle oder eines Index kann im laufenden Betrieb verändert werden ALTER TABLE test STORAGE (BUFFER_POOL KEEP);

ALTER TABLE test STORAGE (BUFFER_POOL DEFAULT); SELECT buffer_pool FROM dba_tables WHERE table_name = 'TEST';

Beispiel Oracle OLAP Nutzung der Architekturvorteile • Zusätzlicher Performance-Boost durch Persistierung des Analytic Workspace im Flash Cache alter table olaptrain.aw$salestrack storage(buffer_pool keep);

• Parallelisiertes Lesen und Schreiben durch partitionierte Cubes

Query Result Cache

Konzept und Einsatz des Result Cache • Eigener Cache im Shared Pool, per Default vorhanden • Automatische Invalidierung • Refresh durch erneute Ausführung des SQL Statements • Zwei Konfigurationsmöglichkeiten: • Server-side SQL Query und PL/SQL Function Result Cache • Client-side OCI Result Cache

 Unterschied zum Buffer Pool: es wird das finale Datenset vorgehalten (weniger logical I/O)

Anwendungsbeispiele • Lang andauernde teure Abfragen • Sich wiederholende Abfragen • Rechenintensive PL/SQL-Funktionen • Randbedingungen • Abfragen mit kleinen Ergebnismengen • Ausreichend Memory steht zur Verfügung • Tabellen sind relativ statisch

• Ziel: SQL Performance mit möglichst einfachen Mitteln erhöhen

Result Cache: Ein Teil des Shared Pool SGA

PGA

2

Shared Pool Private SQL Area

3 Data Dictionary Cache

DB Buffer Cache Library Cache

Result Cache

Cursors

1

Redo Log Buffer DB Files

SQL Area

Java Pool

Large Pool

Streams Pool

Misc.

Quelle: http://www.oracle.com/technetwork/articles/datawarehouse/vallath-resultcache-rac-284280.html

Parameter zum Result Cache RESULT_CACHE_MAX_RESULT RESULT_CACHE_MAX_SIZE RESULT_CACHE_MODE RESULT_CACHE_REMOTE_EXPIRATION

5 (%) abhängig vom OS MANUAL/FORCE 0 (min)

• RESULT_CACHE_MAX_SIZE: Gesamtgröße des reservierten Bereichs für den Result Cache im Shared Pool • RESULT_CACHE_MAX_RESULT: Prozentualer Anteil am gesamten Result Cache für die einzelnen Ergebnisse • RESULT_CACHE_REMOTE_EXPIRATION: Zeitdauer bei Remote Objekt-Nutzung, wie lange das Resultat in Minuten im Cache verbleibt

Parameter RESULT_CACHE_MODE • Falls RESULT_CACHE_MODE=MANUAL gesetzt ist, dann einen Hint im Statement einfügen wie z.B. SELECT /*+ result_cache */ count(*) FROM sales

• Falls RESULT_CACHE_MODE=FORCE gesetzt ist, dann erfolgt ein automatisches Einfügen des Hints im Root-SELECT • Ausnahmen mit Hint /*+ NO_RESULT_CACHE */ SELECT /*+ no_result_cache */ count(*) FROM sales

...

• Der Result Cache hat eine eigene LRU-Liste, nach der alte Results für neue Einträge entfernt werden

Query mit Result Cache Hint SQL> SELECT /*+ result_cache */ COUNT(*), SUM(salary) FROM hr.bigemp group by department_id ORDER BY department_id; ------------------------------------------------------------------------------------------------| Id

| Operation

| Name

| Rows

| Bytes | Cost (%CPU)| Time

------------------------------------------------------------------------------------------------|

0 | SELECT STATEMENT

|

|

11 |

55 |

|

1 |

| 91myw5c1bud0mcn64g3d0ykdhm |

|

|

|

2 |

|

3 |

RESULT CACHE SORT GROUP BY

|

TABLE ACCESS FULL| BIGEMP

2229

(2)| 00:00:34 |

|

11 |

55 |

2229

(2)| 00:00:34

|

876K|

4280K|

2201

(1)| 00:00:34

Statistics ----------------------------------------------------------------------------0

recursive calls

0

db block gets

0

consistent gets

0

physical reads

0

redo size

696

bytes sent via SQL*Net to client

419

bytes received via SQL*Net from client

2

SQL*Net roundtrips to/from client

0

sorts (memory)

0

sorts (disk)

12

rows processed

Tipps zum Einsatz von Result Cache • Der Einsatz des Result Cache ist sinnvoll bei • Verwendung von eher statischen SQL Statements • Häufiger „Read Only“-Nutzung (nur wenige Invalidierungen) • Rechenintensiven (teuren) Operationen

• Anders als beim Buffer Cache liegen finale Result Sets vor, keine Datenbankblöcke

• Unterschied Result Cache zu Materialized Views • Alle außer der ersten Anfrage aus dem Memory beantwortet • Automatisches Refresh mit originalem SQL nach Invalidierung • Keine Persistenz und kein Rewrite

http://www.oracle.com/global/de/community/dbadmin/tipps/result_cache/index.html

Verwendung von SSD: Oracle Flash Cache

Oracle Database Smart Flash Cache

Hot Data 16 GB SGA Memory

120 GB Flash Cache

Extended Buffer Cache

Cold Data 360 GB Hard Disks

Warm Data

• Angebundene oder eingebaute SSD Devices / Flash Cards wirken als Level 2 Cache für die SGA • Derzeit für Oracle Solaris und Oracle Enterprise Linux verfügbar • Lässt sich auch in Kombination mit Flash Disks verwenden (ganze Tablespaces auf SSD Storage)

Den Buffer Cache transparent erweitern • Zum Aktivieren des Flash Cache zwei Parameter setzen: DB_FLASH_CACHE_FILE DB_FLASH_CACHE_SIZE

0 (Default) – auch zum Leeren

• Storage-Klausel steuert das Caching: CREATE TABLE test(a NUMBER, b VARCHAR2(20)) STORAGE (FLASH_CACHE KEEP | NONE | DEFAULT);

• KEEP: Ein Objekt wird dauerhaft im Flash Cache gehalten • NONE: Ein Objekt wird niemals im Flash Cache gehalten • DEFAULT: „Herausalternde“ Objekte des Buffer Cache werden im Flash Cache abgelegt

Flash Cache vor allem für DWHs von Interesse • Im Data Warehouse wird auf die gleichen Datenobjekte über längere Zeit lesend zugegriffen  Der Einsatz von Flash wird bei Read-Only / Read-Mostly Daten empfohlen, wenn • db file sequential read ein Top Wait Event ist • Genügend CPU-Ressourcen verfügbar sind • Es Hinweise gibt, dass ein größerer Buffer Cache Abhilfe schafft

Speicheroptimierende Techniken der DB

Advanced Compression • Advanced Compression in Oracle 11g für: • • • •

Strukturierte und unstrukturierte Daten Backups Data Pump exports Data Guard – Redo Transport

• Reduziert Ressourcenanforderungen und Kosten! • Storage, weniger I/Os, effiziente Buffer Cache Nutzung …

• Storage-Einsparungen zwischen Faktor 2-4 typisch DML uncompressed

PCTFREE reached: Compression!

Further DML uncompressed

PCTFREE reached: Compression! Overhead Free Space uncompressed compressed

PoC Kompression SAP/ERP (FI/CO) Ergebnisse (SAP Subsystem FFS) • Erreichte Einsparung durch Kompression = 46% DB – Größe vor Reorganisatio n in GByte Oracle 10.2

DB – Größe nach Reorganisatio n in GByte Oracle 10.2

Einsparung durch Reorganisati on in % Oracle 10.2

DB – Größe nach Kompressio n in GByte Oracle 11.2

Einsparung durch Kompressio n in % Oracle 11.2

Einsparung durch Kompression in GByte Oracle 11.2

GesamtEinsparung in %

837 GB

554 GB

34%

296 GB

46%

258 GB

65%

• Größter Einsparungseffekt durch • Tabellen - Kompression (75% Anteil) • Index - Kompression (24% Anteil)

• Durchschnittliche Performanceverbesserung Leseoperationen ca. 10-15% Updateoperationen ca. 17%

Oracle 11.2

Best Practices OLTP Table Compression • Komprimieren der zehn größten Tabellen • 20% der Tabellen verbrauchen 80% des Speicherplatzes

• Bessere Kompressionsraten mit größeren Blöcken • Höhere Wahrscheinlichkeit mehrfacher gleicher Werte

• Sortiertes Laden nach nicht selektiven Spalten • B-Tree Index Kompression • Index validieren und INDEX_STATS analysieren index_stats.opt_compr_count liefert Prefix Länge N index_stats.opt_compr_pctsave liefert Einsparung in % CREATE INDEX idx_comp ON ... COMPRESS N;

• Bitmap Indexes sind an sich hoch komprimiert • Geeignet für niedrige bis mittlere Kardinalität

Partitionierung • Splittet große Objekte in kleinere • Vollkommen transparent für Applikation • Einfaches und effizientes Space Management • Minimierung von Contention auf Objekten • Partition Pruning

Table T1

Partitioned Table T1

Entkoppelt die Relation zwischen Datenwachstum und Performance SAP Note 1333328 – SAP Partitioning Engine

Index I1

Partitioned Index I1

Weitere optimierende Techniken • Parallelisierung • Materialized Views • Cube-organized Materialized Views • Query Rewrite zielt auf einen OLAP-Cube • Ersetzt unzählige Materialized Views • Leitet sich von einem relationalen Star Schema bzw. Data Mart ab • Transparent für Applikationen Zeit

• OLAP

Wann? Reg

Zeit

Region Wo? Org. Linie

Prod Produkt Was?

Oracle TimesTen In-Memory Database

Entwicklung der TimesTen In-Memory DB

2010

2009 2007

2005

LOBs 2011 Cache Advisor In-Memory Analytics Columnar Compression Parallel Replication

ODP.NET Support Cache Grid for Scale Out Oracle Clusterware Integration

PL/SQL Support Oracle Call Interface Support

OEM & SQLDeveloper Integration Oracle Database Data Types Support 2000 National Language Support Integration with Oracle RAC 1998 Mid-tier Cache for Oracle DB Online Upgrades High Availability 1st Commercial In-Memory RDBMS

Eine Memory-optimierte Datenbank Telco Services Financial Services

Application

CRM, Portal, SaaS, Customer-facing Applications

Application

Real-Time BAM & BI

Application

• Real-Time Applikationen erfordern kürzeste Antwortzeiten • TimesTen hält die Daten dicht an der Applikation • Kürzere Netzwerklatenzzeiten • Weniger physischer I/O zur Beschaffung der Daten

• Vollständiges relationales DBMS • Anbindung über ODBC, JDBC oder OCI • Bedienung mit Standard-SQL • Reduzierung der Antwortzeiten

Microsecond Response Time

7.0

1.78

Oracle TimesTen In-Memory Database 11.2.2.0 - Intel Xeon 5670 2.93Ghz, 2 CPUs, 6 cores/CPU - Oracle Linux 5.6

Anwendungsszenarien • Sehr Hohe Transaktionslast • United States Postal Service: 33000 Filialen 275M Txs/15h • Ericsson: Abrechnungssystem für Mobiltelefone • Monitoringsystem für Energieunternehmen mit bis zu 2167 Messages/sec, die es zu verarbeiten gilt

• Service Level Agreement – Konsistentes Antwortzeitverhalten • Bank of America: Wertpapierhandelssystem • Deutsche Börse: Xetra Vorsystem – 80ms SLA (Order-Routing)

• Real-Time Szenarien mit Antwortzeiten in Mikrosekunden • Reisereservierungssystem und Ticket-Suche

TimesTen In-Memory Database ist schnell • TT läuft idealerweise auf dem Rechner des Application Server

Client-Server Application TimesTen Client Lib

Client/ Server

• In-Memory optimiert – Datenbank komplett im Shared Memory – Zugriffsmethoden dafür optimiert

Direct-Linked Application TimesTen Libraries

JDBC / ODBC / ADO.NET / OCI / PLSQL

Fast data access

Checkpoint Files

Transaction Log Files

Memory-Resident Database

• Direct-Link für ideale Performance – Shared Memory hängt am Applikationsprozess – Kein Netzwerk Overhead – Client-Server-Anbindung zur Admin möglich (z.B. SQL Developer)

Unterschiede TimesTen zur Oracle DB • TimesTen In-Memory Datenbank • • • •

Gesamte Datenbank ist komplett im Hauptspeicher Datenbank-Design speziell auf Memory Layout abgestimmt Weniger Strukturen, weniger Prozesse – weniger Overhead Direkterer Zugriff auf die Daten

• Eine Anwendung kann direkt mit TimesTen gelinkt werden • Datenbank-Operationen werden aus dem Adressraum des Anwendungsprozesses heraus ausgeführt • Kein Overhead für Netzwerk und IPC (Inter Process Communication)

Replikation von TimesTen Datenbanken Applikation

Applikation Netzwerk

CKPT LOG

Netzwerk

• Replikation von TimesTen Datenbanken wird primär als Hochverfügbarkeits-Lösung eingesetzt • Mögliche Konfigurationen als • Active-Active / Active-Standby • Master-Subscriber • Uni- und bidirektional

CKPT LOG

In-Memory Database Cache

Zentrale Daten aus der Oracle Datenbank Applikation

Applikation

Applikation

Applikation Netzwerk

Netzwerk

• Daten aus der Oracle Datenbank nutzen DB-Instanz

• Daten werden initial in TimesTen geladen • Änderungen lassen sich in die Oracle Datenbank zurückschreiben (synchron/asynchron oder über Cache Write-Through Mechanismus)

 Daten aus einer zentralen Enterprise Datenbank für schnellen Zugriff bereitstellen

TimesTen Cache Connect • Tabellen aus der Oracle Datenbank oder Teile davon werden in TimesTen als sog. “Cache Groups” geladen

Applikation

CKPT LOG

Netzwerk

DB-Instanz

• Cache Groups lassen sich für lesenden als auch schreibenden Zugriff konfigurieren • Daten werden in regelmäßigen Abständen automatisch synchronisiert • Cache Group Daten sind auch dann verfügbar, wenn die Verbindung zur Oracle Datenbank zeitweise nicht besteht

Oracle Maximum Availability Architecture • TimesTen unterstützt RAC und die synchrone DataGuard Physical Standby-Konfiguration • Failover/Switchover • Transient Rolling Upgrade

• Automatische Wiederauf- LOG nahme der Datenaktualisierung von Oracle nach TimesTen • Automatische Wiederaufnahme der Transaktionsweitergabe von TimesTen an Oracle

ApplikationsTransaktionen

Hot Standby (Read-Only)

In-Memory Cache Tables

In-Memory Cache Tables

Active

Standby LOG

Cache Refresh

Cache Write-Through

Data Guard

Real Application Clusters

Active Data Guard

TimesTen Support im SQL Developer • Bearbeiten von TimesTen-Datenbankobjekten • Konfiguration des Cachings von Oracle Tabellen in sog. Cache Groups • Definition von Cache Groups • Laden/Refresh von Cache Data

• • • •

Entwicklung von PL/SQL Prozeduren/Packages Anzeige von SQL Execution Plans Aktualisieren von Statistiken Verwendung des SQL Worksheet für die Ausführung von ad-hoc Queries oder internen TimesTen Prozeduren

TimesTen Enterprise Manager PlugIn • Monitoring der Key Performance Metrics • Bestimmen von Schwellwerten für Alerts und Benachrichtigungen • Standard Reports über TimesTen-Metriken • Angepasste Reports lassen sich per Report Wizard erzeugen • Geringer Overhead

Zusammenfassung Data Buffer Keep Cache LRU-Algorithmus

Result Cache

Coherence Object Cache / Data Grid für Anwendungen

Shared Pool oder Client Transparent für Anwendungen

Flash Cache Data Buffer Erweiterung 2nd level Cache Auch für Datafiles

“In-Memory” Techniken der Datenbank In-Memory Database Cache Memory optimierende Techniken Compression Partitioning Parallelisierung OLAP

Kürzeste Antwortzeiten Real-Time Oracle DB konform