Noch ein Test, in dem ich prüfe, ob sich an den Ergebnissen des cbo-Buchs von Jonathan Lewis in 11.2 etwas geändert hat - diesmal zum Thema parallel execution. Hier der Testablauf:
-- allgemein alter session set db_file_multiblock_read_count = 8; -- für noworkload Test exec dbms_stats.delete_system_stats exec dbms_stats.set_system_stats('CPUSPEEDNW',1000000); -- für workload Test begin dbms_stats.set_system_stats('CPUSPEED', 1000000); dbms_stats.set_system_stats('SREADTIM', 5.0); dbms_stats.set_system_stats('MREADTIM', 30.0); dbms_stats.set_system_stats('MBRC', 12); end; / -- I/O costing (mit unterschiedlichen Degree-Angaben) select /*+ nocpu_costing parallel(t1, 2) */ max(val) from t1 -- cpu costing (mit unterschiedlichen Degree-Angaben) select /*+ cpu_costing parallel(t1, 2) */ max(val) from t1 -- laut Randolf Geist funktioniert der Parallel-Hint seit 11.1 -- übrigens auch ohne Alias: select /*+ nocpu_costing parallel */ max(val) from t1 --> automatic DOP: Computed Degree of Parallelism is 2
Die Tests liefern folgende Ergebnisse:
Degree I/O NOWORKLOAD WORKLOAD ------ ---- ---------- -------- serial 1519 2710 5001 2 844 1506 2778 3 563 1004 1852 4 422 753 1389 5 338 602 1111 6 282 502 926 7 242 430 794 8 211 376 695
Wenn man diese Werte mit denen vergleicht, die Jonathan Lewis in der Tabelle auf S. 29 seines cbo-Buchs aufführte, gibt es sehr viele Übereinstimmungen:
- die Werte für das I/O-costing entsprechen exakt denen bei Lewis
- noworkload-Zahlen gibt's in der Tabelle des cbo-Buchs nicht
- die workload-Zahlen entsprechen für alle Degrees >= 3 exakt denen des cbo-Buchs
- für Degree = 2 ergibt sich eine Abweichung von genau 1 (2778 zu 2779); das man mal wieder ceil vs. round sein
- für Degree = serial liegt mein Wert mit 5001 deutlich unterhalb der Angabe des cbo-Buchs (5030), was sich daraus ergibt, dass ich den CPU-Anteil des costings ausgeschaltet habe (extremer Wert für CPUSPEEDNW - vgl. noch einmal Randolf Geist). Dabei wundert mich nicht die Abweichung, sondern eher, dass sie für Degrees > 1 nicht auftritt. Ein Tests mit niedrigeren CPUSPEEDNW-Angaben zeigt, dass das CPU-Element für parallele Operationen tatsächlich keine Rolle spielt. Genaueres Nachlesen zeigt aber, dass der Herr Lewis diesen Effekt auf S. 31 bereits anspricht ...
Demnach gilt auch für 11.2 die Formel, die Jonathan Lewis für 10.1 angegeben hatte:
Cost at dgree N = ceil(serial cost / (0.9 * N)
Keine Kommentare:
Kommentar veröffentlichen