Überwachen der Tabellenzugriffsmethoden (Oracle) 

Zu einer vollständigen Tabellendurchsuchung (Full Table Scan) kommt es, wenn ein Benutzerprozeß Daten von der Datenbanktabelle abfragt, ohne hierfür einen Index zu verwenden. Zum Auffinden der angeforderten Informationen muß die gesamte Tabelle gelesen werden. In manchen Fällen mag dies wünschenswert sein, z.B. wenn die Tabelle recht klein ist. Oftmals ist es jedoch sinnvoller, einen Index zu verwenden.

Der Datenbankmonitor zeigt zum Tabellenzugriff die folgenden Informationen an:

Kleine Tabellen (Short tables)

Short tables zeigt die Gesamtzahl der bei kleinen Tabellen (Tabellen mit weniger als 5 Oracle-Datenblöcken) durchgeführten vollständigen Tabellendurchsuchungen an. Bei kleinen Tabellen ist oftmals eine vollständige Tabellendurchsuchung performance-günstiger als ein Zugriff auf die Daten über Indizes.

Große Tabellen (Long tables)

Long tables zeigt die Gesamtzahl der bei großen Tabellen (Tabellen mit 5 oder mehr Oracle-Datenblöcken) durchgeführten vollständigen Tabellendurchsuchungen an. Bei großen Tabellen ist die Verwendung von Indizes für den Tabellenzugriff gewöhnlich vorteilhafter.

Die Summe der Werte in Short tables und Long tables ergibt die Gesamtzahl der seit dem Starten der Datenbankinstanz durchgeführten vollständigen Tabellendurchsuchungen.

Eine hohe Anzahl von vollständigen Durchsuchungen großer Tabellen kann darauf hinweisen, daß Tabellenindizes fehlen oder angelegt werden sollten. Das Fehlen von Indizes können Sie mit Funktionen des Bildschirms Database performance: tables and indices überprüfen ( Fehlende Indizes).

Verwenden Sie Explain one SQL request des SQL-Traces, um den Optimizer-Zugriffspfad von ressourcenintensiven Anweisungen zu prüfen (nutzen Sie dazu die Anzeige des SQL Request (Shared SQL Area)). Überprüfen Sie, ob es von Vorteil wäre, einen neuen Index hinzuzufügen oder einen bestehenden neu zu ordnen ( Tabellendurchsuchungen: Problemanalyse (Oracle)).

Tabellenzugriff über ROWID (By rowid)

Im Abschnitt Table Fetch zeigt By rowid die Anzahl der Zeilen, auf die über einen Index oder durch Angabe einer eindeutigen Zeilenkennung (ROWID) in einer SQL-Anweisung zugegriffen wurde. Hohe Werte weisen auf eine starke Nutzung der Indizes hin, was im allgemeinen ein gutes Zeichen ist. Sie sollten jedoch trotzdem untersuchen, ob nichtselektive Indizes, die bei Bereichsuntersuchungen verwendet werden, diesen Wert erheblich erhöhen. Indizes sollten so selektiv wie möglich angelegt werden. Die Index-Felder sollten immer so angeordnet werden, daß die Tabellenfelder, auf die am häufigsten zugegriffen wird, an erster Stelle stehen. Wenn bei einer Selektion mehr als 20 % der Zeilen einer Tabelle ausgegeben werden, empfiehlt es sich, eine vollständige Tabellendurchsuchung durchzuführen, d.h. keinen Index für diese Abfrage anzulegen.

Verkettete Datensätze (Continued row)

Continued Row gibt an, wie oft das Datenbanksystem auf verkettete Datensätze zugegriffen hat. Als verkettete Datensätze werden Zeilen bezeichnet, die über mehrere Datenbankblöcke verteilt sind.

Verkettete Datensätze erhöhen die Suchzeit, da das Datenbanksystem viele Blöcke lesen muß, um den Datensatz zu verbinden. Dadurch sind auch zusätzliche E/A-Operationen erforderlich. Aus diesen Gründen sollte eine Datenkettung möglichst vermieden werden.

Beim Zugriff auf Tabellen mit Feldern, die den Oracle-Datentyp "long" verwenden, ist die Verkettung jedoch oftmals nicht zu umgehen, da die Zeile u. U. für einen Datenblock zu lang ist. Wenn das Verhältnis Table fetch Continued row / Table fetch By rowid größer als 1:1000 ist, sollten Sie eine detailliertere Analyse durchführen. Identifizieren Sie die Objekte mit verketteten Datensätzen. Nutzen Sie dazu z.B. die SAPDBA-Option -analyze . Unter Umständen sollte die Verkettung durch eine Reorganisation behoben werden. Nutzen Sie dazu das SAP-Dienstprogramm SAPDBA ( Reorganisation).