Oracle Datenbank-Tuning - Der Buffer Cache

Die LRU-Liste

Auch der Buffer Cache wird nach dem LRU-Algorithmus verwaltet. Ist der Buffer Cache voll, werden Datenblöcke entfernt, die am Ende der LRU-Liste stehen. Mit diesem Prinzip bleiben die Blöcke, die zuletzt benutzt wurden, im Buffer Cache.

Wenn Daten angefordert werden, liest der Server-Prozess die Blöcke von der Festplatte und platziert sie an den Anfang der LRU-Liste. Die Buffer bleiben in der LRU-Liste, werden aber mit dem Lesen neuer Blöcke nach hinten verschoben.

Erfolgt ein Zugriff auf einen Buffer, während er in der LRU-Liste steht, dann wird dieser an den Anfang der LRU-Liste gestellt.

Der LRU-Algorithmus wird anders gehandhabt, wenn ein Full Table Scan (FTS) ausgeführt wird. Die Buffer werden sofort am Ende der LRU-Liste platziert. Damit wird verhindert, dass alle Buffer aus dem Cache entfernt werden.

Die Dirty-Liste

Es gibt die folgenden drei Buffer-Typen im Buffer Cache:

  • Free. Der Buffer wird zurzeit nicht benutzt.

  • Pinned. Der Buffer wird momentan von einem Server-Prozess benutzt.

  • Dirty. Der Buffer wird zurzeit nicht benutzt und wurde noch nicht vom DBWn auf die Festplatte geschrieben.

Der Server-Prozess kann Free Buffer einfach überschreiben, wenn Blöcke von der Festplatte gelesen werden. Dirty Buffer können nicht überschrieben werden, bevor sie auf die Festplatte geschrieben wurden.

Dieser Mechanismus wird Dirty-Liste genannt. Die Liste registriert alle Blöcke, die verändert und nicht auf die Festplatte geschrieben wurden. Das Schreiben der Buffer auf die Festplatte übernimmt der Hintergrundprozess Database Writer (DBWn).