Sonntag, Mai 01, 2011

FTS-Kosten für parallel execution in 11.2

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