Database Reference
In-Depth Information
15.1
Adaptive Cursor Sharing
Wir wissen bereits, dass das Konzept von User Bind Peeking in Oracle 9i und 10g den
folgenden Nachteil hat: Wenn die ersten Werte der Bind-Variablen, welche Oracle bei User
Bind Peeking benutzt, nicht repräsentativ sind, ist der auf deren Basis errechnete Aus-
führungsplan nicht optimal für die meisten anderen Werte der Bind-Variablen. Dies ver-
ursachte oft Performanz-Probleme.
Das Konzept von Adaptive Cursor Sharing (ACS) soll möglichst diesen Nachteil besei-
tigen.
15.1.1
Grundlegende Idee
Die Grundidee von ACS ist sehr einfach. Nehmen wir das folgende Beispiel.
VHOHFWEIURPWZKHUHD E
Angenommen, die Spalte „A“ der Tabelle T1 ist nicht eindeutig. Nehmen wir ferner an,
der erste Wert von 1 der Bind-Variable B1 ist für diese Spalte selektiv. Wenn die Spalte
„A“ indiziert ist, benutzt Oracle einen Index Range Scan im Ausführungsplan der oberen
SQL-Anweisung. Wenn der nächste Wert von 2 der Bind-Variable B1 etwa so selektiv wie
der erste Wert ist, ist es sinnvoll, weiterhin den Index Range Scan einzusetzen. Wenn die
Selektivität von 2 aber merkbar schlechter ist (mehr als um 10 %), ist es sinnvoll zu prüfen,
ob ein Full Table Scan für diesen Bind-Wert nicht effektiver wäre. Dafür macht Oracle ein
hartes Parsing und erzeugt einen neuen Child-Cursor. Bei diesem Parsing werden Histo-
gramme bei der Einschätzung der Selektivität des Prädikates „a = :b1“ für den neuen Bind-
Wert herangezogen.
Wenn eine SQL-Anweisung mehrere Prädikate mit Bind-Variablen hat, kann man eine
ähnliche Prüfung der Selektivität durchführen. In diesem Fall reden wir nicht von einem
Bind-Wert, sondern von einem Satz der Bind-Werte. Dementsprechend muss man die Se-
lektivität der einzelnen Prädikate für den neuen Satz der Bind-Werte prüfen. Es ist sinn-
voll, die untere und die obere Grenze der Selektivität jedes Prädikats mit Bind-Variablen
für diese Prüfung intern abzuspeichern (was Oracle auch macht). Die Ursprungswerte die-
ser Grenzen unterscheiden sich um ± 10 % von der Selektivität des jeweiligen Prädikats für
den ersten Bind-Wert. Wenn alle Selektivitäten der einzelnen Prädikate für den neuen Satz
der Bind-Werte in diesen Grenzen liegen, wird der bestehende Cursor auch für diesen Satz
der Bind-Werte benutzt. Bei einer Abweichung oder mehreren findet ein hartes Parsing
statt.
Search WWH ::




Custom Search