Oracle8i, Solaris

Eine Datenbank bereitet uns ein wenig Sorgen und wir suchen nun nach Optionen zum Tuning. Die Schreibzugriffe können durch die Hardware nicht schnell genug ausgeführt werden. Wir planen das verwendete Storage entsprechend durch Striping zu erweitern.
Parallel suche ich nun auch nach Möglichkeiten, die Anzahl der Schreibzugriffe zu verringern. Hauptproblem ist eine Lookup-Tabelle (eine Key-Spalte, mehrere Value-Spalten, unique primary key), in die fortwährend geschrieben wird => insert,upadte,delete

Anforderungen:

  • Daten müssen möglichst schnell festgeschrieben werden, damit andere App. darauf zugreifen können
  • die Anzahl der Daten in der Tabelle liegt bei einigen 100-1000 Einträgen, größer wird die Tabelle zu keinem Zeitpunkt
  • nach einem Abstürz der muss gewähleistet sein, dass diese wieder hochgefahren werden kann (Ausfallsicherheit), die Daten in der Tabelle dürfen verloren gehen

Welche grundsätzlichen Optionen gibt es, um Schreibzugriffe zu vermeiden. Ich habe mal etwas von diskreten Transaktionen gehört.
Gibt es noch Oracle Parameter, die den Schreibzugriff beschleunigen/die Anzahl der Zugriffe reduzieren?

Meine Überlegungen gehen dahin, die SQL-Statements in der App durch PL/SQL Aufrufe zu ersetzen. Ist es möglich per PL/SQL eine Tabelle im Speicher der DB zu füllen (also nicht unbedingt auf der Festplatte) und ist es möglich per PL/SQL über andere DB-Connections Lookup-Abfragen auf diesen Daten auszuführen.

Bin für Tipps und verweise auf die Oracle-Doku danbkbar!

Gruß Markus

Hallo Markus,

zum Beschleunigen der Abfrage gilt generell ein gut angelegter Index. Dazu ist es notwendig, die PLAN-Table zu analysieren. Du kannst auch via SQL-Plus die Befehle

set timing on;
set autotrace on;

verwenden. Die Ergebnisse geben Aufschluss darüber, wie schnell ein SQL ausgeführt wird und wie sich die Datenbank verhält, um zum Ergebnis zu gelangen.

Ein weiterer Punkt für das Tuning wäre eine SGA, die groß genug ist, um die Datenbank komplett in den Cache zu laden. Das dürfte bei der Größe der Datenbank (wie unten beschrieben) eigentlich kein allzu grosses Problem sein.

Weiterhin ist wichtig, das die LOG-Switches nicht zu schnell erfolgen. D. h. die REDO-Logs müssen gross genug definiert werden, damit die Rechenlast sinkt (jeder Switch kostet Resourcen).

Gruss,
Dietmar

Hallo Dietmar,
hier ging es aber um die Beschleunigung der SCHREIBZUGRIFFE.
Da ist die Indizierung ja gerade die Bremse.
Wenn man da etwas weglassen könnte, wäre schon viel erreicht.

Lösung: Index-Organized Table
Ich habe die Tabelle nun als index-organized table angelegt. Die Anzahl der Schreibzugriffe soll dadurch minimiert werden, schließlich muss der Index jetzt nicht mehr separat gepflegt werden.
In meinem Testszenario, je eine PL/SQL Schleife mit INSERT/DELETE, konkurierend aus zwei sqlplus sessions, reduziert sich die Ausführungszeit von 65Sekunden auf 40 Sekunden. Das nenne ich enorm!

Gruß Markus