SlideShare una empresa de Scribd logo
1 de 3
Descargar para leer sin conexión
Entwicklung




Effiziente Historisierung großer Tabellen
Tobias Stark, metafinanz GmbH


Bei der nachträglichen Historisierung von Daten in großen Tabellen ist es von Anfang an wichtig, auf die Performance zu
achten. Je mehr Datensätze anzupassen sind, desto entscheidender wird die Wahl der technischen Vorgehensweise.

Gerade DML-Operationen wie Updates         durch Folgesysteme auch noch weitere          nicht zu groß wurde, fiel die Entschei-
führen bei großen Datenmengen häu-         Attribute wie eine Verarbeitungsnum-          dung, die Historisierung unabhängig
fig zu Problemen. Um auch in solchen       mer anzupassen. Durch die Paralleli-          von der Ladung immer nur für eine
Situationen akzeptable Verarbeitungs-      sierung waren bei Tests mit kleineren         Tabelle durchzuführen. Dabei traten
geschwindigkeiten zu erreichen, stellt     Datenmengen in der Entwicklungs-              jedoch trotz der Parallelisierung Lauf-
die Oracle Datenbank Möglichkeiten         umgebung gute Ergebnisse zu erzielen.         zeiten von mehr als acht Stunden für
wie PL/SQL-Tabellen, BULK-Verarbei-        Aufgrund der Testergebnisse kam diese         eine Tabelle auf.
tung und Parallel DML zur Verfügung.       Lösung in der Produktionsumgebung
   Zur Historisierung von Daten in ei-     zum Einsatz.                                  Problem-Analyse
ner Basis-Datenbank wurde von einem           Nach einer Urladung mit rund 520
Kunden des Autors eine Lösung in PL/       Millionen Datensätzen in der Produk-          Um die Ursache für die Performance-
SQL entwickelt. Diese PL/SQL-Anwen-        tivumgebung und einem täglichen               Probleme zu finden, wurden mehrere
dung hatte dabei zu jedem Datensatz        Delta von bis zu 21 Millionen Daten-          Analysen durchgeführt. Zum einen
die Gültigkeit bei neuen Datensätzen       sätzen kam es jedoch bei mehreren             erfolgte während der Historisierung
einzutragen beziehungsweise bei älte-      Tabellen zu Performance-Problemen.            einer Tabelle mit sechs Prozessen eine
ren Datensätzen zu aktualisieren, und      Damit die Belastung des Datenbank-            Auswertung der auftretenden Wait-
zwar nach Art einer „Slowly Changing       Servers durch die parallelen Prozesse         Events (siehe Tabelle 1).
Dimension (SCD) Typ 2“ in „gültig
von/gültig bis“-Attribute. Durch die-
ses Vorgehen lag die Anzahl der er-
warteten, anzupassenden Datensätze
bei Delta-Ladungen für einige Tabel-
len täglich im Millionen-Bereich. Um
diese Mengen in annehmbarer Zeit zu
verarbeiten, wurden mehrere Prozesse
parallel per DBMS_JOB gestartet. Ein
Master-Prozess sammelte die zu bear-
beitenden fachlichen Schlüssel in einer
temporären Tabelle und übergab diese
dann per Pipes an die parallel gestarte-
ten Jobs als Slave-Prozesse. Die Aufgabe
eines solchen Slave-Prozesses bestand
darin, zu jedem Datensatz des überge-
benen Schlüssels die Gültigkeit zu er-
mitteln und diese anschließend in die
Historisierungs-Attribute zu schreiben.
   Dabei wurden die zu dem Schlüssel
vorhandenen Daten nebst ROWID per
Indexzugriff in eine PL/SQL-Tabelle
eingelesen. Danach erfolgte die Er-
mittlung der „gültig von/gültig bis“-
Daten in der PL/SQL-Tabelle im Spei-
cher. Zum Schluss wurden die Daten
per Einzelsatzverarbeitung anhand
der ROWID in die Tabelle geschrieben.
Neben der Gültigkeit waren für die
Identifizierung der geänderten Daten       Abbildung 1: Ablauf ursprüngliche Historisierung


                                                                                                    DOAG News Q3-2009 |  55
Entwicklung




                                                •	   Anpassung der Partitionierung              •	   Einsatz von Parallel DML
     Wait-Event                  Waits gesamt
                                                     Das historische Attribut wurde aus              Durch den Einsatz von Parallel DML
     db file sequential read     5.637.171
     latch: shared pool          463.396
                                                     den Kriterien für die Partitionierung           beim Anpassen der Daten in den Ta-
     latch: library cache        9.303               herausgenommen und die Tabellen                 bellen war es möglich, die Histori-
     latch: row cache objects    3.679               neu partitioniert. Dadurch war ein              sierung direkt im Anschluss an das
     latch: library cache lock   73                  Verschieben von Datensätzen zwi-                Laden der Deltadaten durchzufüh-
                                                     schen Partitionen nicht mehr not-               ren. So war keine asynchrone, seri-
Tabelle 1: Wait-Events bei Historisierung            wendig.                                         elle Verarbeitung der Tabellen mehr
mit sechs Prozessen                             •	   Nutzung von BIND-Variablen statt                notwendig.
                                                     Literalen
Zudem erfolgte ein Review des PL/                    Bei der Ausführung der dynami-             Aufgrund der Komplexität und um
SQL-Codes. Dabei wurde festgestellt,                 schen SQL-Anweisungen wurden               nicht sämtliche Datensätze nochmals
dass bei den dynamischen SQL-Anwei-                  statt der vorher genutzten Literale        verarbeiten zu müssen, hat man den
sungen Literale wie die ROWID zum                    die Daten per BIND-Variablen über-         Kernbestandteil zur Ermittlung der His-
Einsatz kamen. Dies deckte sich auch                 geben. Darüber hinaus ergab sich,          torisierung nicht geändert. Bevor das
mit den beobachteten Latch-Waits, die                dass der Zusammenbau der dynami-           Anpassen der Daten per Parallel DML
ein Hinweis auf das häufige Parsen von               schen SQL-Anweisungen nur noch             implementiert wurde, kam in einer
SQL-Anweisungen sind.                                einmal zu Anfang der Verarbeitung          Zwischenversion ein Update per BULK
   Auch beim Layout der Tabellen tra-                durchgeführt werden musste. Die            zum Einsatz. Diese Zwischenversion
ten einige problematische Punkte auf.                Ermittlung bei jedem zu bearbeiten-        erwies sich auch für nicht partitionier-
Durch das Lesen anhand des fachli-                   den Datensatz konnte dadurch ent-          te Tabellen als erfolgreich. Bei partitio-
chen Schlüssels kommt es gerade bei                  fallen und die CPU-Belastung sank.         nierten Tabellen jedoch war die Lauf-
großen Tabellen beim Index-Zugriff              •	   Vermeidung von Index-Zugriffen             zeit für den Update von 5,4 Millionen
zu längeren Laufzeiten, insbesondere                 Das Sammeln der zu bearbeitenden           Datensätzen mit 9,5 Stunden weiter-
dann, wenn die zu lesenden Datensätze                Datensätze in einer temporären Ta-         hin zu hoch. Die Statistiken der oben
über unterschiedliche Datenbankblö-                  belle vermied den Indexzugriff über        genannten Latches ließ sich durch die
cke verstreut sind. Darauf weist auch                den fachlichen Schlüssel.                  vorgenommenen Anpassungen jedoch
die Zahl der beobachteten „db file se-          •	   Nutzung von BULK-Verarbeitung              bereits signifikant verbessern, so dass
quential read“ hin.                                  Die zu schreibenden Historisie-            eine Entlastung der Ressourcen fest-
   Neben dem Zugriff beim Lesen über                 rungsdaten werden in PL/SQL-Ta-            stellbar war (siehe Tabelle 2).
den Index gab es die Problematik,                    bellen zwischengespeichert und per
dass eins der historischen Attribute                 BULK-Insert in eine Tabelle für die        Einsatz von Parallel DML
als Kriterium für die Partitionierung                anschließende Nutzung mittels Pa-
zum Einsatz kam. Dadurch entstand                    rallel DML geschrieben. Durch die          Um auch für partitionierte Tabellen
beim Schreiben der Daten zusätzlich                  BULK-Verarbeitung lassen sich die          eine Verbesserung der Laufzeiten zu er-
ein Verschieben von Datensätzen von                  bei Einzelsatzverarbeitung auftre-         reichen, wurde die Nutzung von Parallel
einer Partition in eine andere. Zusätz-              tenden Wechsel zwischen PL/SQL-            DML implementiert. Für dessen Einsatz
lich war auch noch ein Index auf der                 und SQL-Engine minimieren.                 sind folgende Bedingungen zu beachten:
Verarbeitungsnummer der geänderten
Daten zu pflegen.


Identifizierte
Verbesserungsmöglichkeiten

Um das Performanceproblem in den
Griff zu bekommen, wurden die fol-
genden Verbesserungsmöglichkeiten
identifiziert:

•	    Entfernung des Index auf der Verarbei-
      tungsnummer.
      Da sich der Index für die lesenden
      DWH-Systeme als nicht hilfreich er-
      wiesen hatte, wurde er entfernt. Da-
      durch war eine Pflege dieses Index
      bei der Historisierung nicht mehr
      notwendig.                                Abbildung 2: Ablauf angepasste Historisierung


56  | www.doag.org
Entwicklung




                              GETS                                           MISSES                                          SLEEPS
     Version                  alt                  neu                       alt                        neu                  alt                                neu
     shared pool              2.100.566.433        29.658.667                131.602.673                1.066.005            2.740.417                          715
     library cache            1.604.674.472        23.173.192                19.110.037                 968.176              82.488                             577
     library cache lock       403.277.029          8.458.705                 907.972                    631.276              358                                157
     row cache objects        6.387.481.148        46.192.372                210.970.588                398.618              17.167                             159


Tabelle 2: Mess-Ergebnisse

•	   Parallel DML muss in der Session
     aktiv sein:                                       UPDATE /*+ PARALLEL(upd_view,10) */
     ALTER SESSION ENABLE PARAL-                              (SELECT /*+
                                                                          PARALLEL(tgt,10)
     LEL DML;
                                                                          PARALLEL(src,10)
•	   Erfolgt die Verarbeitung mittels ei-                              */
     nes „updatable join“-Views, ist ein                              src.dat_von AS new_dat_von
     Primary-Key auf einer der Tabellen                               ,src.dat_bis AS new_dat_bis
     erforderlich.                                                    ,:p_verarbeitungs_id AS new_verarb_id
                                                                      ,tgt.dat_von AS dat_von
•	   Weitere Voraussetzungen für den
                                                                      ,tgt.dat_bis AS dat_bis
     Einsatz von Parallel DML sind im                                 ,tgt.id AS id
     Oracle Data Warehousing Guide zu                          FROM   tab_ziel tgt
     finden.                                                          ,tab_hist_daten src
                                                               WHERE 0 = 0
Da die zu schreibenden Daten der his-                          AND    tgt.rowid = src.v_rowid
                                                              ) upd_view
torischen Attribute in einer tempo-
                                                       SET    upd_view.dat_von = upd_view.new_dat_von
rären Tabelle vorliegen, kommt zum                            ,upd_view.dat_bis = upd_view.new_dat_bis
Update ein„updatable join“-View zur                           ,upd_view.vearbeitungs_id = upd_view.new_ver-
Anwendung (siehe Listung).                             arb_id
   Durch den Einsatz von Parallel DML                  ;
sank die Laufzeit zur Durchführung
                                            Listing: SQL-Anweisung für Parallel DML mit einem „updatable join“-View
des Updates bei partitionierten Tabel-
len für 7,5 Millionen Datensätze auf 10
Minuten.                                    denen man mit Inserts arbeitet, sind                        Weitere Informationen
                                            aufgrund der in den meisten Fällen
       Fazit                                besseren Laufzeit vorzuziehen. Doch                         Parallel DML im Oracle Data
                                            durch die von Oracle in der Enterpri-                       Warehousing Guide:
Derzeit findet in dieser Form täglich       se Edition zur Verfügung gestellten                         http://download.oracle.com/docs/cd/
bei fast 100 Tabellen erfolgreich eine      Möglichkeiten wie PL/SQL-Tabellen,                          B19306_01/server.102/b14223/
Historisierung statt. Normalerweise         BULK-Verarbeitung und Parallel DML                          usingpe.htm#sthref2120
sind Updates von vielen Datensät-           lassen sich auch große Tabellen per                                                       Kontakt:
zen auf großen Tabellen wenn mög-           Update mit annehmbaren Laufzeiten                                                    Tobias Stark
lich zu vermeiden. Lösungen, bei            bearbeiten.                                                            tobias.stark@metafinanz.de



                                                                                                                                   Ko
                                                                                                                                     ste      ww
       DBora von                                 Oracle-Datenbankadministration                                                         nlo
                                                                                                                                           se
                                                                                                                                              rD
                                                                                                                                                w.
                                                                                                                                                   ve
                                                                                                                                                           nt
                                                 einfach, schnell und sicher                                                                       ow
                                                                                                                                                     nlo     ar
                                                                                                                                                                   a.
                                                                                                                                                        ad              de
                                                                                                                                                                Tri
                                                  Mit DBora vereinfacht sich die tägliche Datenbankadministration spürbar.                                          al-V
                                                                                                                                                                        er
                                                  Dafür wurden viele wichtige Werkzeuge in die Anwendung integriert.                                                      sio
                                                                                                                                                                             n
                                                  • Wartung der Instanz             • SQL-Plan Base-Lines               • Backup
                                                  • Storage Management              • Tablespaces                       • SQL-Analyse
                                                  • Sessions                        • ReDoLog-Dateien                   • Reverse Engineering
                                                  • Auditing                        • Undo/Rollback-Segmente            • Flashback
                                                  • Memory Management               • Resource-Management               • Datenbankdokumentation
                                                  • Statistics Management           • Security                          • und vieles mehr


                                                 Und das Beste zum Schluss:
                                                 Sie gehen kein Risiko ein. Testen Sie DBora 30 Tage lang kostenlos und überzeugen Sie sich.




                                                                                                                       DOAG News Q3-2009 |  57

Más contenido relacionado

Similar a Effiziente Historisierung großer Tabellen

Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02Gunther Pippèrr
 
Bessere Data Warehouses durch Table Functions - DOAG Konferenz 2011 - OPITZ C...
Bessere Data Warehouses durch Table Functions - DOAG Konferenz 2011 - OPITZ C...Bessere Data Warehouses durch Table Functions - DOAG Konferenz 2011 - OPITZ C...
Bessere Data Warehouses durch Table Functions - DOAG Konferenz 2011 - OPITZ C...OPITZ CONSULTING Deutschland
 
Drupal 7 auf Amazon Web Services
Drupal 7 auf Amazon Web ServicesDrupal 7 auf Amazon Web Services
Drupal 7 auf Amazon Web ServicesSven Paulus
 
Oracle-DB: Active Session History: into the deep
Oracle-DB: Active Session History: into the deepOracle-DB: Active Session History: into the deep
Oracle-DB: Active Session History: into the deepPeter Ramm
 
Apex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitApex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitStefan Witwicki
 
Performance-Analyse von Oracle-Datenbanken mit Panorama
Performance-Analyse von Oracle-Datenbanken mit PanoramaPerformance-Analyse von Oracle-Datenbanken mit Panorama
Performance-Analyse von Oracle-Datenbanken mit PanoramaPeter Ramm
 
Geänderte Anforderungen an eine Data-Warehouse-Landschaft
Geänderte Anforderungen an eine Data-Warehouse-LandschaftGeänderte Anforderungen an eine Data-Warehouse-Landschaft
Geänderte Anforderungen an eine Data-Warehouse-LandschaftISR Information Products AG
 
Exchange Server 2019 MetaCache Database und BigFunnel
Exchange Server 2019 MetaCache Database und BigFunnelExchange Server 2019 MetaCache Database und BigFunnel
Exchange Server 2019 MetaCache Database und BigFunnelThomas Stensitzki
 
SCAPE Skalierbare Langzeitarchivierung
SCAPE Skalierbare LangzeitarchivierungSCAPE Skalierbare Langzeitarchivierung
SCAPE Skalierbare LangzeitarchivierungSven Schlarb
 
NEW VERSION: Data Quality und SOA
NEW VERSION: Data Quality und SOANEW VERSION: Data Quality und SOA
NEW VERSION: Data Quality und SOAUniserv
 
Oracle GoldenGate: Synchronisation zwischen Oracle und MySQL Datenbanken, Nov...
Oracle GoldenGate: Synchronisation zwischen Oracle und MySQL Datenbanken, Nov...Oracle GoldenGate: Synchronisation zwischen Oracle und MySQL Datenbanken, Nov...
Oracle GoldenGate: Synchronisation zwischen Oracle und MySQL Datenbanken, Nov...Ileana Somesan
 
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für PanoramaOracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für PanoramaPeter Ramm
 
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...SCAPE Project
 
Oracle Database 12c Release 2
Oracle Database 12c Release 2 Oracle Database 12c Release 2
Oracle Database 12c Release 2 oraclebudb
 
Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Ulrike Schwinn
 
Whitepaper sones GraphDB (ger)
Whitepaper sones GraphDB (ger)Whitepaper sones GraphDB (ger)
Whitepaper sones GraphDB (ger)sones GmbH
 
Private Cloud mit Open Source
Private Cloud mit Open SourcePrivate Cloud mit Open Source
Private Cloud mit Open SourceDaniel Schneller
 
Ausgewählte Performance Technologien
Ausgewählte Performance TechnologienAusgewählte Performance Technologien
Ausgewählte Performance Technologienoraclebudb
 
Marek Adar – IT-Tage 2015 – Oracle 12c Multitenant
Marek Adar – IT-Tage 2015 – Oracle 12c MultitenantMarek Adar – IT-Tage 2015 – Oracle 12c Multitenant
Marek Adar – IT-Tage 2015 – Oracle 12c MultitenantInformatik Aktuell
 

Similar a Effiziente Historisierung großer Tabellen (20)

Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
 
Bessere Data Warehouses durch Table Functions - DOAG Konferenz 2011 - OPITZ C...
Bessere Data Warehouses durch Table Functions - DOAG Konferenz 2011 - OPITZ C...Bessere Data Warehouses durch Table Functions - DOAG Konferenz 2011 - OPITZ C...
Bessere Data Warehouses durch Table Functions - DOAG Konferenz 2011 - OPITZ C...
 
Drupal 7 auf Amazon Web Services
Drupal 7 auf Amazon Web ServicesDrupal 7 auf Amazon Web Services
Drupal 7 auf Amazon Web Services
 
Oracle-DB: Active Session History: into the deep
Oracle-DB: Active Session History: into the deepOracle-DB: Active Session History: into the deep
Oracle-DB: Active Session History: into the deep
 
Apex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitApex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - Hochverfügbarkeit
 
Performance-Analyse von Oracle-Datenbanken mit Panorama
Performance-Analyse von Oracle-Datenbanken mit PanoramaPerformance-Analyse von Oracle-Datenbanken mit Panorama
Performance-Analyse von Oracle-Datenbanken mit Panorama
 
Geänderte Anforderungen an eine Data-Warehouse-Landschaft
Geänderte Anforderungen an eine Data-Warehouse-LandschaftGeänderte Anforderungen an eine Data-Warehouse-Landschaft
Geänderte Anforderungen an eine Data-Warehouse-Landschaft
 
Exchange Server 2019 MetaCache Database und BigFunnel
Exchange Server 2019 MetaCache Database und BigFunnelExchange Server 2019 MetaCache Database und BigFunnel
Exchange Server 2019 MetaCache Database und BigFunnel
 
SCAPE Skalierbare Langzeitarchivierung
SCAPE Skalierbare LangzeitarchivierungSCAPE Skalierbare Langzeitarchivierung
SCAPE Skalierbare Langzeitarchivierung
 
NEW VERSION: Data Quality und SOA
NEW VERSION: Data Quality und SOANEW VERSION: Data Quality und SOA
NEW VERSION: Data Quality und SOA
 
Oracle GoldenGate: Synchronisation zwischen Oracle und MySQL Datenbanken, Nov...
Oracle GoldenGate: Synchronisation zwischen Oracle und MySQL Datenbanken, Nov...Oracle GoldenGate: Synchronisation zwischen Oracle und MySQL Datenbanken, Nov...
Oracle GoldenGate: Synchronisation zwischen Oracle und MySQL Datenbanken, Nov...
 
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für PanoramaOracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
 
Big Data Appliances
Big Data AppliancesBig Data Appliances
Big Data Appliances
 
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
 
Oracle Database 12c Release 2
Oracle Database 12c Release 2 Oracle Database 12c Release 2
Oracle Database 12c Release 2
 
Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2
 
Whitepaper sones GraphDB (ger)
Whitepaper sones GraphDB (ger)Whitepaper sones GraphDB (ger)
Whitepaper sones GraphDB (ger)
 
Private Cloud mit Open Source
Private Cloud mit Open SourcePrivate Cloud mit Open Source
Private Cloud mit Open Source
 
Ausgewählte Performance Technologien
Ausgewählte Performance TechnologienAusgewählte Performance Technologien
Ausgewählte Performance Technologien
 
Marek Adar – IT-Tage 2015 – Oracle 12c Multitenant
Marek Adar – IT-Tage 2015 – Oracle 12c MultitenantMarek Adar – IT-Tage 2015 – Oracle 12c Multitenant
Marek Adar – IT-Tage 2015 – Oracle 12c Multitenant
 

Más de metafinanz Informationssysteme GmbH

Más de metafinanz Informationssysteme GmbH (6)

Regelkonforme Assekuranz
Regelkonforme AssekuranzRegelkonforme Assekuranz
Regelkonforme Assekuranz
 
Umdenken bei Softwaretests
Umdenken bei SoftwaretestsUmdenken bei Softwaretests
Umdenken bei Softwaretests
 
Wo lohnt sich der Einkauf von Services?
Wo lohnt sich der Einkauf von Services?Wo lohnt sich der Einkauf von Services?
Wo lohnt sich der Einkauf von Services?
 
Risikomanagement in Versicherungsunternehmen - MaRisk VA, Risikokategorien un...
Risikomanagement in Versicherungsunternehmen - MaRisk VA, Risikokategorien un...Risikomanagement in Versicherungsunternehmen - MaRisk VA, Risikokategorien un...
Risikomanagement in Versicherungsunternehmen - MaRisk VA, Risikokategorien un...
 
Solvency II: Kombiniertes Rechenmodell erfüllt EU-Pflichten und ermöglicht in...
Solvency II: Kombiniertes Rechenmodell erfüllt EU-Pflichten und ermöglicht in...Solvency II: Kombiniertes Rechenmodell erfüllt EU-Pflichten und ermöglicht in...
Solvency II: Kombiniertes Rechenmodell erfüllt EU-Pflichten und ermöglicht in...
 
metafinanz Unternehmensprofil
metafinanz Unternehmensprofilmetafinanz Unternehmensprofil
metafinanz Unternehmensprofil
 

Effiziente Historisierung großer Tabellen

  • 1. Entwicklung Effiziente Historisierung großer Tabellen Tobias Stark, metafinanz GmbH Bei der nachträglichen Historisierung von Daten in großen Tabellen ist es von Anfang an wichtig, auf die Performance zu achten. Je mehr Datensätze anzupassen sind, desto entscheidender wird die Wahl der technischen Vorgehensweise. Gerade DML-Operationen wie Updates durch Folgesysteme auch noch weitere nicht zu groß wurde, fiel die Entschei- führen bei großen Datenmengen häu- Attribute wie eine Verarbeitungsnum- dung, die Historisierung unabhängig fig zu Problemen. Um auch in solchen mer anzupassen. Durch die Paralleli- von der Ladung immer nur für eine Situationen akzeptable Verarbeitungs- sierung waren bei Tests mit kleineren Tabelle durchzuführen. Dabei traten geschwindigkeiten zu erreichen, stellt Datenmengen in der Entwicklungs- jedoch trotz der Parallelisierung Lauf- die Oracle Datenbank Möglichkeiten umgebung gute Ergebnisse zu erzielen. zeiten von mehr als acht Stunden für wie PL/SQL-Tabellen, BULK-Verarbei- Aufgrund der Testergebnisse kam diese eine Tabelle auf. tung und Parallel DML zur Verfügung. Lösung in der Produktionsumgebung Zur Historisierung von Daten in ei- zum Einsatz. Problem-Analyse ner Basis-Datenbank wurde von einem Nach einer Urladung mit rund 520 Kunden des Autors eine Lösung in PL/ Millionen Datensätzen in der Produk- Um die Ursache für die Performance- SQL entwickelt. Diese PL/SQL-Anwen- tivumgebung und einem täglichen Probleme zu finden, wurden mehrere dung hatte dabei zu jedem Datensatz Delta von bis zu 21 Millionen Daten- Analysen durchgeführt. Zum einen die Gültigkeit bei neuen Datensätzen sätzen kam es jedoch bei mehreren erfolgte während der Historisierung einzutragen beziehungsweise bei älte- Tabellen zu Performance-Problemen. einer Tabelle mit sechs Prozessen eine ren Datensätzen zu aktualisieren, und Damit die Belastung des Datenbank- Auswertung der auftretenden Wait- zwar nach Art einer „Slowly Changing Servers durch die parallelen Prozesse Events (siehe Tabelle 1). Dimension (SCD) Typ 2“ in „gültig von/gültig bis“-Attribute. Durch die- ses Vorgehen lag die Anzahl der er- warteten, anzupassenden Datensätze bei Delta-Ladungen für einige Tabel- len täglich im Millionen-Bereich. Um diese Mengen in annehmbarer Zeit zu verarbeiten, wurden mehrere Prozesse parallel per DBMS_JOB gestartet. Ein Master-Prozess sammelte die zu bear- beitenden fachlichen Schlüssel in einer temporären Tabelle und übergab diese dann per Pipes an die parallel gestarte- ten Jobs als Slave-Prozesse. Die Aufgabe eines solchen Slave-Prozesses bestand darin, zu jedem Datensatz des überge- benen Schlüssels die Gültigkeit zu er- mitteln und diese anschließend in die Historisierungs-Attribute zu schreiben. Dabei wurden die zu dem Schlüssel vorhandenen Daten nebst ROWID per Indexzugriff in eine PL/SQL-Tabelle eingelesen. Danach erfolgte die Er- mittlung der „gültig von/gültig bis“- Daten in der PL/SQL-Tabelle im Spei- cher. Zum Schluss wurden die Daten per Einzelsatzverarbeitung anhand der ROWID in die Tabelle geschrieben. Neben der Gültigkeit waren für die Identifizierung der geänderten Daten Abbildung 1: Ablauf ursprüngliche Historisierung DOAG News Q3-2009 |  55
  • 2. Entwicklung • Anpassung der Partitionierung • Einsatz von Parallel DML Wait-Event Waits gesamt Das historische Attribut wurde aus Durch den Einsatz von Parallel DML db file sequential read 5.637.171 latch: shared pool 463.396 den Kriterien für die Partitionierung beim Anpassen der Daten in den Ta- latch: library cache 9.303 herausgenommen und die Tabellen bellen war es möglich, die Histori- latch: row cache objects 3.679 neu partitioniert. Dadurch war ein sierung direkt im Anschluss an das latch: library cache lock 73 Verschieben von Datensätzen zwi- Laden der Deltadaten durchzufüh- schen Partitionen nicht mehr not- ren. So war keine asynchrone, seri- Tabelle 1: Wait-Events bei Historisierung wendig. elle Verarbeitung der Tabellen mehr mit sechs Prozessen • Nutzung von BIND-Variablen statt notwendig. Literalen Zudem erfolgte ein Review des PL/ Bei der Ausführung der dynami- Aufgrund der Komplexität und um SQL-Codes. Dabei wurde festgestellt, schen SQL-Anweisungen wurden nicht sämtliche Datensätze nochmals dass bei den dynamischen SQL-Anwei- statt der vorher genutzten Literale verarbeiten zu müssen, hat man den sungen Literale wie die ROWID zum die Daten per BIND-Variablen über- Kernbestandteil zur Ermittlung der His- Einsatz kamen. Dies deckte sich auch geben. Darüber hinaus ergab sich, torisierung nicht geändert. Bevor das mit den beobachteten Latch-Waits, die dass der Zusammenbau der dynami- Anpassen der Daten per Parallel DML ein Hinweis auf das häufige Parsen von schen SQL-Anweisungen nur noch implementiert wurde, kam in einer SQL-Anweisungen sind. einmal zu Anfang der Verarbeitung Zwischenversion ein Update per BULK Auch beim Layout der Tabellen tra- durchgeführt werden musste. Die zum Einsatz. Diese Zwischenversion ten einige problematische Punkte auf. Ermittlung bei jedem zu bearbeiten- erwies sich auch für nicht partitionier- Durch das Lesen anhand des fachli- den Datensatz konnte dadurch ent- te Tabellen als erfolgreich. Bei partitio- chen Schlüssels kommt es gerade bei fallen und die CPU-Belastung sank. nierten Tabellen jedoch war die Lauf- großen Tabellen beim Index-Zugriff • Vermeidung von Index-Zugriffen zeit für den Update von 5,4 Millionen zu längeren Laufzeiten, insbesondere Das Sammeln der zu bearbeitenden Datensätzen mit 9,5 Stunden weiter- dann, wenn die zu lesenden Datensätze Datensätze in einer temporären Ta- hin zu hoch. Die Statistiken der oben über unterschiedliche Datenbankblö- belle vermied den Indexzugriff über genannten Latches ließ sich durch die cke verstreut sind. Darauf weist auch den fachlichen Schlüssel. vorgenommenen Anpassungen jedoch die Zahl der beobachteten „db file se- • Nutzung von BULK-Verarbeitung bereits signifikant verbessern, so dass quential read“ hin. Die zu schreibenden Historisie- eine Entlastung der Ressourcen fest- Neben dem Zugriff beim Lesen über rungsdaten werden in PL/SQL-Ta- stellbar war (siehe Tabelle 2). den Index gab es die Problematik, bellen zwischengespeichert und per dass eins der historischen Attribute BULK-Insert in eine Tabelle für die Einsatz von Parallel DML als Kriterium für die Partitionierung anschließende Nutzung mittels Pa- zum Einsatz kam. Dadurch entstand rallel DML geschrieben. Durch die Um auch für partitionierte Tabellen beim Schreiben der Daten zusätzlich BULK-Verarbeitung lassen sich die eine Verbesserung der Laufzeiten zu er- ein Verschieben von Datensätzen von bei Einzelsatzverarbeitung auftre- reichen, wurde die Nutzung von Parallel einer Partition in eine andere. Zusätz- tenden Wechsel zwischen PL/SQL- DML implementiert. Für dessen Einsatz lich war auch noch ein Index auf der und SQL-Engine minimieren. sind folgende Bedingungen zu beachten: Verarbeitungsnummer der geänderten Daten zu pflegen. Identifizierte Verbesserungsmöglichkeiten Um das Performanceproblem in den Griff zu bekommen, wurden die fol- genden Verbesserungsmöglichkeiten identifiziert: • Entfernung des Index auf der Verarbei- tungsnummer. Da sich der Index für die lesenden DWH-Systeme als nicht hilfreich er- wiesen hatte, wurde er entfernt. Da- durch war eine Pflege dieses Index bei der Historisierung nicht mehr notwendig. Abbildung 2: Ablauf angepasste Historisierung 56  | www.doag.org
  • 3. Entwicklung GETS MISSES SLEEPS Version alt neu alt neu alt neu shared pool 2.100.566.433 29.658.667 131.602.673 1.066.005 2.740.417 715 library cache 1.604.674.472 23.173.192 19.110.037 968.176 82.488 577 library cache lock 403.277.029 8.458.705 907.972 631.276 358 157 row cache objects 6.387.481.148 46.192.372 210.970.588 398.618 17.167 159 Tabelle 2: Mess-Ergebnisse • Parallel DML muss in der Session aktiv sein: UPDATE /*+ PARALLEL(upd_view,10) */ ALTER SESSION ENABLE PARAL- (SELECT /*+ PARALLEL(tgt,10) LEL DML; PARALLEL(src,10) • Erfolgt die Verarbeitung mittels ei- */ nes „updatable join“-Views, ist ein src.dat_von AS new_dat_von Primary-Key auf einer der Tabellen ,src.dat_bis AS new_dat_bis erforderlich. ,:p_verarbeitungs_id AS new_verarb_id ,tgt.dat_von AS dat_von • Weitere Voraussetzungen für den ,tgt.dat_bis AS dat_bis Einsatz von Parallel DML sind im ,tgt.id AS id Oracle Data Warehousing Guide zu FROM tab_ziel tgt finden. ,tab_hist_daten src WHERE 0 = 0 Da die zu schreibenden Daten der his- AND tgt.rowid = src.v_rowid ) upd_view torischen Attribute in einer tempo- SET upd_view.dat_von = upd_view.new_dat_von rären Tabelle vorliegen, kommt zum ,upd_view.dat_bis = upd_view.new_dat_bis Update ein„updatable join“-View zur ,upd_view.vearbeitungs_id = upd_view.new_ver- Anwendung (siehe Listung). arb_id Durch den Einsatz von Parallel DML ; sank die Laufzeit zur Durchführung Listing: SQL-Anweisung für Parallel DML mit einem „updatable join“-View des Updates bei partitionierten Tabel- len für 7,5 Millionen Datensätze auf 10 Minuten. denen man mit Inserts arbeitet, sind Weitere Informationen aufgrund der in den meisten Fällen Fazit besseren Laufzeit vorzuziehen. Doch Parallel DML im Oracle Data durch die von Oracle in der Enterpri- Warehousing Guide: Derzeit findet in dieser Form täglich se Edition zur Verfügung gestellten http://download.oracle.com/docs/cd/ bei fast 100 Tabellen erfolgreich eine Möglichkeiten wie PL/SQL-Tabellen, B19306_01/server.102/b14223/ Historisierung statt. Normalerweise BULK-Verarbeitung und Parallel DML usingpe.htm#sthref2120 sind Updates von vielen Datensät- lassen sich auch große Tabellen per Kontakt: zen auf großen Tabellen wenn mög- Update mit annehmbaren Laufzeiten Tobias Stark lich zu vermeiden. Lösungen, bei bearbeiten. tobias.stark@metafinanz.de Ko ste ww DBora von Oracle-Datenbankadministration nlo se rD w. ve nt einfach, schnell und sicher ow nlo ar a. ad de Tri Mit DBora vereinfacht sich die tägliche Datenbankadministration spürbar. al-V er Dafür wurden viele wichtige Werkzeuge in die Anwendung integriert. sio n • Wartung der Instanz • SQL-Plan Base-Lines • Backup • Storage Management • Tablespaces • SQL-Analyse • Sessions • ReDoLog-Dateien • Reverse Engineering • Auditing • Undo/Rollback-Segmente • Flashback • Memory Management • Resource-Management • Datenbankdokumentation • Statistics Management • Security • und vieles mehr Und das Beste zum Schluss: Sie gehen kein Risiko ein. Testen Sie DBora 30 Tage lang kostenlos und überzeugen Sie sich. DOAG News Q3-2009 |  57