Announcement

Collapse
No announcement yet.

Oracle und parallele Prozesse

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Oracle und parallele Prozesse

    Hallo Forencommunity,

    ich bin auf der Suche nach einer Möglichkeit zu überprüfen, ob mein Update-Statement auch wirklich parallel ausgeführt wird. Ich verwende den SQL-Developer und dachte es gibt eine Möglichkeit mir während mein Statement läuft anzuschauen, ob die Parallelisierung wirklich funktioniert.

    Ich habe die Parallelisierung über ein Hint in das Statement eingebaut. Jedoch sind die Ausführungszeiten in etwas gleich. Egal ob die Parallelisierung auf 1, 2 oder 4 gestellt ist. Die Maschiene hat 2 Prozessoren.

    Das Statement betrifft eine ganze Menge von einer Million Datensätzen der Tabelle.


    Statement:

    update /*+ parallel(tabellexy,2) */ tabellexy

    set mon_pa = opp_pa - mon_pa_a,
    e_mon_pa = opp_mon_b - mon_pa_b,
    saldo = saldo_a,
    kz_pa = TRUNC(kz_pa / 1000) * 1000 + 100 + mod(kz_pa, 100)

    where tabelle.alg_pa_id in (9000,9100);


    Viele Grüße

  • #2
    Hast Du PDML aktiviert?

    Code:
    ALTER SESSION ENABLE PARALLEL DML
    Ob der Update parallel läuft, siehst Du auch am Ausführungsplan. Hier noch die Doku zu PDML

    Dim

    PS: Parallel Query /DML /DDL etc. funktioniert nur in der Enterprise Edition
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Ich weiß jetzt nicht wie das bei Oracle aussieht, aber wenn zB. bei einem Update kurzzeitig ein Table-Lock erfolgt, dann kann man das nicht parallelisieren. Ich vermute mal, die Parallelisierung hilft eher bei Queries und Prozeduren die keine Daten verändern.

      bye,
      Helmut

      Comment


      • #4
        Hallo,

        danke für eure Kommentare.

        PDML habe ich bereits eingeschaltet. Der Ausführungsplan (im SQL Developer F10 oder Explain-Plan) sieht mit und ohne Parallel-Hint gleich aus

        Ich benutze die Standard Edition Version 10. Das bedeutet dann also ich kann Parallelisierung vergessen?

        Comment


        • #5
          Lies dir mal diesen Beitrag durch: Using Oracle's Parallel Execution Features
          Da steht "You cannot parallelize UPDATE or DELETE operations on a nonpartitioned table or when such operations affect only a single partition." Trifft das bei dir zu?

          In diesem Dokument von Oracle ist alles noch ein wenig ausführlicher beschrieben.

          Gruss

          Comment


          • #6
            Hallo,

            das mit der Partitionierung hatte ich gelesen mich aber wohl von anderen Dokumenten verunsichern lassen, dass man das wohl ab 9g nicht mehr bräuchte.

            Was mich aber viel mehr ärgert ist, dass ich die Parallelisierung nicht mal bei einem SELECT Statement hinbekomme.

            Ich habe vor den DB Parameter PARALLEL_MAX_SERVER auf 4 gesetzt. Das folgende Statement wird jedoch leider nicht parallel ausgeführt:


            Code:
            select /*+ parallel(a) parallel(b) */ 
                      sum(b.buchwert)
            
            from org_konto a join dwh_kto_knd200909 b 
            
            on a.pk_kto_nr = b.konto_nr

            Habe ich gerade ein Statement generiert, bei dem Oracle meint eine Parallelisierung würde nichts bringen oder bin ich unfähig das richtig hinzubekommen?

            Viele Grüße

            Comment


            • #7
              Hi,

              PDML ist ab 9.2 auch für Tabellen ohne Partitionierung bzw. innerhalb einer Partition möglich.
              Des weiteren brauchst Du, wie schon gesagt, die Enterprise Edition um ein Select, DDL oder DML Statement mittels Parallel Hint zu parallelisieren. Bei Deiner Version ist das vergebliche Liebesmüh.

              Dim
              Zitat Tom Kyte:
              I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

              Comment


              • #8
                Hallo,

                danke für eure Hilfe. Dann ist es ja kein Wunder, dass ich nicht voran komme


                Ihr schreibt: Parallel Hints funktionieren nur mit der Enterprise Edition für SELECR, DML und DDL.

                Habe ich denn mit der SE eine Chance, eine Parallelisireung anders zu bekommen? Oder sieht die SE generell keine Parallelisierung vor?

                Viele Grüße

                Comment


                • #9
                  Du kannst Deine Aufgaben selbst entsprechend trennen und in getrennten Sessions losschicken. Ist aber evtl. wegen der fehlenden Transaktionsklammer nicht immer möglich. Oracle selbst macht in der SE nichts dergleichen.

                  Dim
                  Zitat Tom Kyte:
                  I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

                  Comment

                  Working...
                  X