Database Reference
In-Depth Information
Tabellenblöcke beträgt entsprechend Faktor 2, 4, 8, 32 oder 128 der Parametereinstellung
_ optimizer _ dyn _ smp _ blks . Bei dem Level 10 werden alle Tabellenblöcke überprüft.
Um die Beschreibing der Levels zu beenden, muss man die Kriterien für die Anwen-
dung der Levels 1 bis 4 etwas ausführlicher ausleuchten.
Wie bereits erwähnt, wird Dynamic Sampling beim Level 1 für Tabellen ohne Opti-
mizer-Statistiken aktiviert. Die jeweilige Tabelle muss dafür groß genug sein: Die Anzahl
ihrer Blöcke muss größer als der Parameterwert von _ optimizer _ dyn _ smp _ blks sein. Fer-
ner muss diese Tabelle entweder unmittelbar in einem Join beteiligt sein oder zu einer
nicht zusammenzuführenden (non-mergeable) View gehören. Es ist auch möglich, dass
diese Tabelle in einem Subquery ist. Und noch eine Bedingung: Die Tabelle darf keine
Indices haben.
Das Kriterium für die Anwendung von Dynamic Sampling beim Level 2 ist wesentlich
einfacher: Dynamic Sampling wird für alle Tabellen ohne Optimizer-Statistiken angewen-
det.
Dynamic Sampling beim Level 3 wird für alle Tabellen aktiviert, für die das Kriteri-
um des Levels 2 erfüllt ist (also für Tabellen ohne Optimizer-Statistiken). Zusätzlich wird
Dynamic Sampling angewendet, wenn Oracle die Einschätzung der Kardinalität bzw. der
Selektivität von Prädikaten für eine Tabelle ohne Annahmen nicht machen kann.
Das Kriterium für den Level 4 inkludiert das Kriterium vom Level 3. Zusätzlich wird
Dynamic Sampling aktiviert, falls Prädikate einige (zwei oder mehr) Spalten einer Tabelle
beinhalten und Oracle für diese Prädikate auch Annahmen machen muss.
Peter: „ Diese Bedingungen fand ich immer kompliziert.
Leonid: „ Vermutlich deswegen, weil Oracle diese Levels für zwei verschiedene Zwecke be-
nutzt: Für das Kriterium der Anwendung von Dynamic Sampling und für die Festlegung der
Anzahl der zu prüfenden Tabellenblöcke. Möglicherweise ist es etwas einfacher zu verstehen,
wenn man diese Zwecke getrennt betrachtet. Wir haben noch nicht besprochen, wie man die
Levels setzen kann. Weißt Du das?
P. : „Dafür gibt es den Parameter optimizer _ dynamic _ sampling , der die Werte von Levels
annehmen kann. Bei Oracle 9.2 war der Vorgabewert dieses Parameters gleich 1. Bei Oracle
10g wurde dieser Vorgabewert auf 2 erhöht.
L.: „ Man kann auch das Hint DYNAMIC_SAMPLING für diesen Zweck gebrauchen. Mit
diesem Hint kann man entweder einen Level für alle in der jeweiligen SQL-Anweisung be-
teiligten Tabellen festlegen (z. B. DYNAMIC_SAMPLING(n)) oder das für eine Tabelle tun
(z. B. DYNAMIC_SAMPLING(table_alias n)). Die Anzahl der zu prüfenden Tabellenblöcke
bei diesem Hint ist anders als bei dem Parameter optimizer _ dynamic _ sampling und beträgt
b ·2 ( level −1) , wobei b der Parameterwert von _ optimizer _ dyn _ smp _ blks und level > 0 ist.
P.: „ Wann genau wird Dynamic Sampling angewendet?
L.: „ Für SQL-Anweisungen ohne Bind-Variablen wird Dynamic Sampling bei Parsing aus-
geführt. Wenn eine SQL-Anweisung mindestens eine Bind-Variable enthält, braucht Oracle
die jeweiligen Bind-Werte für Dynamic Sampling. In diesem Fall wird Dynamic Sampling
nach der Ermittlung der Bind-Werte angewendet. Prüfen wir das an dem folgenden Beispiel.
Wir legen eine kleine Tabelle und einen Index für dieses Beispiel an.
Search WWH ::




Custom Search