2 Stimmen

Speicherung von verschiedenen Orakeldaten

In diesem Szenario wird angenommen, dass zwei Transaktionen ungefähr zur gleichen Zeit in getrennten Verbindungen laufen. Diese Transaktionen haben identischen Code, aber unterschiedliche Daten. Die Transaktion ruft die folgende Paketprozedur auf:

PROCEDURE find(aKey Thing_tab.key%TYPE) IS
BEGIN
    SELECT * INTO obj
    FROM Thing_tab t
    WHERE t.key = aKey;
END;

Ich möchte wissen, welche Art von Daten in den folgenden verschiedenen Teilen des Oracle-Speichers gespeichert werden, während und nachdem diese beiden Transaktionen ausgeführt werden.

  1. Gemeinsamer SQL-Bereich
  2. Privater SQL-Bereich
  3. Datenbereich
  4. Stapelbereich

3voto

APC Punkte 140727

Ihre Begriffe sind mir nicht geläufig. Ich werde mein Bestes tun, um sie in die üblichen Oracle-Begriffe zu übersetzen, was Ihre Frage hoffentlich beantworten wird.

Gemeinsamer SQL-Bereich

Bei Oracle ist die Gemeinsamer Pool der SGA . In Ihrem Szenario wird es einen Parse-Baum für die SELECT-Anweisung und einen Ausführungsplan enthalten. Es gibt nur einen, weil der Optimierer den PL/SQL-Parameter als Bindungsvariable und nicht als Literal behandelt.

Privater SQL-Bereich

Bei Oracle ist die Cursor . Jede Sitzung hat ihren eigenen Bereich, der eine geparste Version der SELECT-Anweisung und einige andere Informationen enthält, die zur Verarbeitung der Anweisung verwendet werden, z. B. den Wert der Bindungsvariablen.

Datenbereich

Bei Oracle ist die Datenbank-Puffer-Cache der SGA . Dieser enthält einen oder mehrere Datenblöcke aus der Tabelle. Handelt es sich um einen eindeutigen Schlüsseldatensatz, befindet sich der Block/die Blöcke am Ende des Caches unter "Zuletzt verwendet". Wenn die beiden ausgewählten Datensätze physisch nahe beieinander lagen, werden bei der zweiten Ausführung die bereits im Cache befindlichen Blöcke der ersten Ausführung verwendet.

Stapelbereich

Ich bin mir nicht sicher, was das in Oracle bedeutet. Vielleicht meinen Sie Sitzungsspeicher im globalen Programmbereich ? Wenn ja, enthält sie die Anmeldeinformationen für jede Sitzung. Ihr PL/SQL verwendet keine Variablen auf Sitzungsebene; wenn dies der Fall wäre, würden sie im Sitzungsspeicher gespeichert werden.

Eine Sache, die Sie übersehen haben

Le site Gemeinsamer Pool der SGA . Dieser enthält eine geparste und kompilierte Form der Prozedur, die von beiden Sitzungen ausgeführt wird.


Wie Sie sehen können, hat Oracle recht komplizierte Speicherstrukturen. Das liegt daran, dass es bestrebt ist, so viel wie möglich zwischen den Benutzern (Sitzungen, Prozessen) zu teilen. Was ich hier geschrieben habe, ist eine vereinfachte (und unvollständige) Kurzfassung. Die Konzepte Leitfaden ein ganzes Kapitel der Speicherarchitektur gewidmet. Weitere Informationen .

1voto

DCookie Punkte 41310

Ich würde jedem, der mehr über Oracle-Interna wissen möchte und darüber, wie das alles mit der Programmierung zusammenhängt, empfehlen, sich ein Exemplar von "Expert Oracle Database Architecture" zu besorgen: Oracle Database 9i, 10g, and 11g Programming Techniques and Solutions" von Tom Kyte (ISBN 9781430229469).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X