1. Übersicht über Parallelität in DML-Aufgaben (DBMS_PARALLEL_EXECUTE)

Stellt DBMS_PARALLEL_EXECUTE vor, das von Oracle 11g R2 verwendet werden kann, und untersucht Anwendungsfälle.

DBMS_PARALLEL_EXECUTE 실행 개념도
Konzeptdiagramm der DBMS_PARALLEL_EXECUTE-Ausführung

Bildquelle: https://blogs.oracle.com/warehousebuilder/parallel-processing-with-dbmsparallelexecute

1. Überblick über die parallele Verarbeitung von DML-Aufgaben

1.1. DML-Parallelverarbeitungsmethode

Die parallele Verarbeitung wird verwendet, wenn Sie schnell einen DML-Job (INSERT, UPDATE, DELETE) in der Datenbank mit möglichst vielen Ressourcen verarbeiten möchten. Es gibt zwei Hauptmethoden der Parallelverarbeitung.

Die erste Methode besteht darin, den Parallelitätsgrad als Hinweis anzugeben, während eine SQL ausgeführt wird (Parallel-DML, Einzeltransaktion), und die zweite Methode besteht darin, mehrere SQLs auszuführen, indem ein Bereich von Daten angegeben wird (Program Parallel DML, Multi Transaction). Sein.

In den meisten Fällen ist die erste Methode, die parallele DML-Methode, hinsichtlich der Datenkonsistenz vorteilhaft, da sie als einzelne Transaktion verarbeitet wird. Wenn die erste Methode jedoch nicht anwendbar ist oder Sie die Größe oder den Umfang der Arbeitseinheit selbst definieren möchten, wenden Sie besser die zweite Methode an. (Die zweite Methode heißt also auch DIY (Do It Yourself) Parallel DML)

Beispiele für Situationen, in denen Parallel DML nicht angewendet werden kann, sind die folgenden.

  • DML, um eine Tabelle mit LOB-Spalten auszuwählen
  • DML auf DB Link
  • Parallelverarbeitung von DML in PL/SQL-Einheiten anstelle von SQL-Einheiten oder Prozedureinheiten, die in komplexen Prozeduren implementiert sind
  • DML, die nicht in PL/SQL implementiert ist und in einer Sprache wie Java ausgeführt wird

Die Schritte zum Ausführen von Program Parallel DML unterscheiden sich je nach Situation leicht, sind aber im Allgemeinen wie folgt.

  1. Auswahl des Arbeitsziels
  2. Auswahl der Parallelität und Aufteilung der Arbeitseinheiten (Partition, Datum, Nummer, ROWID usw.) -> Erstellung von .sql-Dateien nach Arbeitseinheiten
  3. Aufgabenausführung und Überwachung -> Führen Sie jede .sql-Datei in einer einzelnen Sitzung aus (SQL*Plus usw.)
  4. Task-Erledigung bestätigen -> Verifizierung von Reihenzahlvergleich, Summenvergleich etc.

Wenn sich Anforderungen oder Situationen ändern und der Parallelitätsgrad (DOP) geändert werden muss oder eine Nacharbeit erforderlich ist, werden die Schritte 2 und 3 wiederholt ausgeführt, und die Verwaltung und Bestätigung sind nicht einfach. Es ist unbequem, ähnliche Aufgaben immer wieder manuell wiederholen zu müssen, wenn eine Änderung erforderlich ist.

1.2. DBMS_PARALLEL_EXECUTE-Konzept

Bei Verwendung der Program Parallel-Methode kann die Verwendung von DBMS_PARALLEL_EXECUTE diese Aufgabe bequemer ausführen und verwalten.

* Referenz-Oracle-Dokument: http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_parallel_ex.htm#ARPLS233

(Als Referenz verwendet DBMS_PARALLEL_EXECUTE JOB intern, daher muss dem ausführenden Benutzer die CREATE JOB-Berechtigung erteilt werden.)

DBMS_PARALLEL_EXECUTE ist ein Paket, das als neue Funktion in Oracle 11g R2 eingeführt wurde. Die Liste der wichtigsten Unterprogramme ist in der folgenden Tabelle aufgeführt, und die vollständige Liste und Erklärung finden Sie im Oracle-Dokument.

UnterprogrammErläuterung
CREATE_TASK-ProzedurErstellen Sie eine Aufgabe
CREATE_CHUNKS_BY_NUMBER_COL ProzedurErstellen Sie Chunk nach NUMBER-Spalte
CREATE_CHUNKS_BY_ROWID-ProzedurChunks mit ROWID erstellen
CREATE_CHUNKS_BY_SQL-ProzedurChunks mit benutzerdefiniertem SQL erstellen
DROP_TASK-ProzedurAufgabe entfernen
DROP_CHUNKS-ProzedurBrocken eliminieren
RESUME_TASK ProzedurenFühren Sie eine angehaltene Aufgabe erneut aus
RUN_TASK-ProzedurFühren Sie die Aufgabe aus
STOP_TASK-ProzedurStoppen Sie die Aufgabe
TASK_STATUS-ProzedurGibt den aktuellen Status der Aufgabe zurück

Die Schritte zum Anwenden von DBMS_PARALLEL_EXECUTE ähneln fast den Schritten zum Ausführen von Program Parallel DML wie folgt.

  1. Aufgabe erstellen (CREATE_TASK)
  2. Aufteilung der Arbeitseinheit (Chunk) (drei Methoden von ROWID, NUMBER und SQL werden bereitgestellt)
    • CREATE_CHUNKS_BY_ROWID
    • CREATE_CHUNKS_BY_NUMBER_COL
    • CREATE_CHUNKS_BY_SQL
  3. Aufgabe ausführen (RUN_TASK)
  4. Nach Abschluss der Aufgabe löschen (DROP_TASK)

1.3. Erstellen Sie Tabellen und Daten für den DBMS_PARALLEL_EXECUTE-Test

Erstellen Sie mit dem folgenden Skript zu testende Tabellen und Daten.

-- 테스트 테이블과 데이터 생성
DROP TABLE Z_DPE_TEST_TAB PURGE;

CREATE TABLE Z_DPE_TEST_TAB (
    ID      NUMBER(10)
   ,MSG     VARCHAR2(100)
   ,VAL     NUMBER
   ,AUDSID  NUMBER
) NOLOGGING;

-- 100만건 테스트 데이터 생성
INSERT /*+ APPEND */ INTO Z_DPE_TEST_TAB (ID, MSG)
SELECT  LEVEL AS ID
       ,'Test Data ID: ' || TO_CHAR(LEVEL)
  FROM  DUAL
CONNECT BY LEVEL <= 1000000;

COMMIT;

Es gibt 4 Spalten, die im Test verwendet werden müssen, und jeder Zweck ist wie folgt.

SpaltennameZweck
ICH WÜRDEEin Wert zum Identifizieren jeder Zeile in der Tabelle
Nachrichtein Wert, der eine Beschreibung bereitstellt
WERTZufallswert bei Testausführung aktualisiert
AUDIDEin Wert, um zu prüfen, in wie vielen Sitzungen der Test ausgeführt wird.
Es wird mit SYS_CONTEXT('USERENV','SESSIONID') aktualisiert.

Als Referenz ist die Umgebung, in der dieser Test durchgeführt wurde, wie folgt.

  • DBMS: Oracle 11g R2 Enterprise 11.2.0.1.0 32 Bit (unter Windows 7 x64)
  • Hardware: CPU i5-5200U 2,20 GHz, Speicher 8 GB, SSD 250 GB

Sehen wir uns als Nächstes einen Fall an, indem wir jede Arbeitseinheit (Chunk) aufteilen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch