Grundlagen der Datenbank Buffer Cache in Oracle 12c

Oracle 12c des Datenbank-Buffer-Cache

typischerweise ist der größte Teil der SGA. Es verfügt über Daten, die aus den Dateien auf der Festplatte kommt. Da den Zugriff auf Daten von der Festplatte ist langsamer als aus dem Speicher, ist thedatabase Puffer-Cache des alleinigen Zweck die Daten im Speicher für einen schnelleren Zugriff zu cachen.

Der Datenbank-Puffer-Cache kann Daten aus allen Arten von Objekten enthalten:

  • Tische

  • Indizes

  • materialisierte Ansichten

  • Systemdaten

In der Phrase Datenbank-Puffer-Cache, der Begriff Puffer bezieht sich auf Datenbankblöcke. EIN Datenbankblock ist die minimale Menge an Speicherplatz, die Oracle oder schreibt, liest. Alle Speichersegmente, die Daten enthalten, werden aus Blöcken. Wenn Sie Daten von der Festplatte anfordern, bei mindestens liest Oracle einen Block.

Auch wenn Sie nur eine Zeile fordern, sind viele Zeilen in der gleichen Tabelle wahrscheinlich abgerufen werden. Das gleiche gilt, wenn Sie eine Spalte in einer Zeile anfordern. Oracle liest den gesamten Block, der höchstwahrscheinlich viele Zeilen und alle Spalten für diese Zeile hat.

Es ist möglich, zu denken, dass, wenn Ihre Abteilungen Tabelle nur zehn Zeilen hat, kann die ganze Sache selbst in den Speicher gelesen werden, wenn Sie den Namen nur eine Abteilung sind anfordert.

Buffer Cache-Zustand in Oracle 12c

Das Puffer-Cache je nach Platzangebot kontrolliert, was Blöcke bleiben erhalten und der Blockzustand (ähnlich wie entscheidet der gemeinsamen Pool, was SQL bleiben wird). Der Puffer-Cache verwendet eine eigene Version des LRU-Algorithmus.

Ein Block in dem Puffer-Cache kann in einem von drei Zuständen sein:

  • Frei: Derzeit nicht für alles verwendet werden

  • Wichtig: Derzeit zugegriffen wird,

  • Dreckig: Block wurde geändert, aber noch nicht auf die Platte geschrieben

Freie Blöcke

freie Blöcke sind idealerweise zur Verfügung, wenn Sie sie benötigen. Das ist aber wahrscheinlich nicht der Fall, wenn Ihre Datenbank so klein ist, dass die ganze Sache in den Speicher passen kann.

Der LRU-Algorithmus arbeitet ein wenig anders in dem Puffer-Cache, als es in dem gemeinsamen Pool tut. Sie punktet jeder Block und dann mal, wie lange es her, seit auf sie zugegriffen wurde. Zum Beispiel wird ein Block einen Punkt jedes Mal berührt wird.

Je höher die Punkte, desto weniger wahrscheinlich wird der Block aus dem Speicher entfernt werden. Es muss jedoch häufig zugegriffen werden oder die Partitur ab. Ein Block hat hart zu arbeiten, in Erinnerung zu bleiben, wenn der Wettbewerb um die Speicherressourcen hoch ist.

wobei jeder Block eine Partitur und Zeit geben, verhindert, dass diese Art von Situation ergeben: Ein Block stark am Ende des Monats für Berichte zugegriffen wird. Die Punktzahl ist höher als jeder andere Block in dem System. Dieser Block wird nie wieder abgerufen.

Er sitzt dort Speicher verschwenden, bis die Datenbank neu gestartet wird oder ein anderer Block schließlich genug Punkte Partituren, es zu schlagen. Die Zeitkomponente Alter es sich als sehr schnell, nachdem Sie nicht mehr darauf zugreifen.

Fixierte Blöcke

Ein Block gegenwärtig zugegriffen wird, ist ein gepinnt Block. Der Block ist gesperrt (oder Pins) in den Puffer-Cache, so dass es nicht aus dem Puffer-Cache gealtert werden kann, während der Oracle-Prozess (oft einen Benutzer darstellt) darauf zugreift.

Schmutzige Blöcke

Ein modifizierter Block ein schmutzigen Block. Um sicherzustellen, werden die Änderungen in Datenbank Abschaltungen gehalten, diese schmutzigen Blöcke müssen aus dem Puffer-Cache auf die Festplatte geschrieben werden. Die Datenbanknamen schmutzigen Blöcke in einer schmutzigen Liste oder Schreibwarteschlange.

Man könnte denken, dass jedes Mal, wenn ein Block geändert wird, sollte es auf den Datenträger geschrieben werden, um verlorene Daten zu minimieren. Dies ist nicht der Fall ist - nicht einmal, wenn es eine ist verpflichten (Wenn Sie die Änderungen speichern dauerhaft)! Mehrere Strukturen helfen, verlorene Daten zu verhindern.

Darüber hinaus hat Oracle ein Spielproblem. Die Systemleistung würde kriechen, wenn Sie Blöcke auf der Festplatte für jede Änderung geschrieben. Um dies zu bekämpfen, spielt Oracle die Chancen, dass die Datenbank unwahrscheinlich ist zum Scheitern verurteilt und schreibt Blöcke auf der Festplatte nur in größeren Gruppen.

Sie nicht Sorgen machen es nicht einmal ein Risiko gegen Datenverlust ist. Oracle wird immer Leistung aus der Datenbank jetzt sofort auf den möglichen Kosten einer Erholung länger dauert später. Da Ausfälle auf richtig verwalteten Systemen selten auftreten, ist es eine preiswerte Möglichkeit, einige Performance zu gewinnen. Allerdings ist es nicht so, dass Oracle schmutzigen Blöcke in ganz verlässt, ohne nach selbst aufzuräumen.

Block-Schreib-Trigger in Oracle 12c

Was löst einen Blockschreib und damit ein schmutziger Block?

  • Die Datenbank ist ein Shutdown-Befehl ausgegeben.

  • Eine vollständige oder teilweise Checkpoint eintritt - das ist, wenn das System in regelmäßigen Abständen alle Puffer-Dumps.

  • Eine Erholung Zeitschwelle, von Ihnen eingestellt ist Met- die Gesamtzahl der schmutzigen Blöcke führt zu einer inakzeptablen Recovery-Zeit.

  • Ein freier Block benötigt wird und keine werden nach einer bestimmten Menge des Suchens gefunden.

  • Bestimmte Datendefinitionssprache (DDL) Befehle. (DDL-Befehle sind SQL-Anweisungen, die Objekte in einer Datenbank zu definieren.)

  • Alle drei Sekunden.

  • Andere Gründe. Der Algorithmus ist sehr komplex, und man kann nicht mit allen Änderungen sicher sein, die mit jedem Software-Release auftreten.

Tatsache ist, die Datenbank ziemlich beschäftigt mit dem Schreiben Blöcke in einer Umgebung bleibt, wo es eine Menge Veränderungen.

Menü