SDB:Paketverwaltungsstapelspeicher beschleunigen

aus openSUSE, der freien Wissensdatenbank


Version: 10.3 -

Inhaltsverzeichnis

Paketverwaltung beschleunigen

Die Paketverwaltung ist ein Teil des Systems, der massiv mit Datenbanken um sich wirft, die zunehmend geändert werden und stark genutzt werden. Auf Grund der ständigen Zunahme an Daten, welche in der Natur der Sache liegt, neigt die Datenbank zur Fragmentierung, sowohl intern (in der Datenbank selbst) als auch extern (auf der Festplatte).

Unter openSUSE 10.3 gibt es zwei Arten von Datenbanken für die Paketverwaltung.

  • Die zypp-Zwischenspeicher-SQLITE-Datenbank unter /var/cache/zypp/zypp.db.
  • Die RPM-Datenbank unter /var/lib/rpm/.

Intern defragmentieren

  • SQLite-Datenbanken lassen sich mit dem VACUUM-Kommando aufräumen.
Für die ZYPP-Zwischenspeicherdatenbank:
sqlite3 /var/cache/zypp/zypp.db vacuum
Alternativ lässt sich die Datenbank auch von Grund auf neu erstellen:
rm /var/cache/zypp/zypp.db ; zypper refresh
  • Defragmentieren der RPM-Datenbank
Nach ziemlich großen Aktualisierungen ist es hilfreich, einmal rpm --rebuilddb laufen zu lassen.
Dies ist nur nach dem Ändern/Aktualisieren/Installieren von sehr vielen Paketen notwendig und dauert einige Zeit (10 Minuten auf einem Laptop).

Extern defragmentieren

Obwohl Linux-Dateisysteme versuchen, kein stark fragmentierten Dateien zu erstellen, führt die Art des Anwachsens der von der Paketverwaltung genutzten Datenbanken zu Fragmentierungsmustern.

Der beste Weg, die Fragmentierung los zu werden ist, die verwendeten Dateien neu zu erstellen:

cp -p Datei Datei.neu  # auf Fehler prüfen!
rm Datei
mv Datei.neu Datei
  • zypp-Datenbank
Entweder löschen Sie einfach die Datenbank und erstellen sie dann mit zypper refresh neu, oder Sie verwenden die obige
cp/rm/mv-Sequenz für /var/cache/zypp/zypp.db.
  • RPM-Datenbank
Wenden Sie den cp/rm/mv-Trick auf /var/lib/rpm/Packages, Basenames, Filemd5s, Dirnames an.

Beispielskript

#!/bin/sh
sqlite3 /var/cache/zypp/zypp.db vacuum
rpm --rebuilddb         # dauert lange
for fn in       /var/cache/zypp/zypp.db \
                /var/lib/rpm/Packages   \
                /var/lib/rpm/Filemd5s   \
                /var/lib/rpm/Dirnames   \
                /var/lib/rpm/Basenames
do
        cp $fn $fn.new || exit 1
        rm $fn
        mv $fn.new $fn
done