Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Performance der Datenbank überwachen und steigern » Datenbankperformance steigern » Tipps zur Performance-Verbesserung

 

Tabellen-Fragmentierung reduzieren

Tabellen-Fragmentierung tritt auf, wenn Zeilen nicht zusammenhängend gespeichert oder wenn Zeilen auf mehrere Seiten aufgeteilt werden. Diese Zeilen erfordern zusätzliche Seitenzugriffe und dadurch wird die Performance des Datenbankservers reduziert.

Die Auswirkungen der Fragmentierung auf die Performance sind unterschiedlich. Wenn eine Tabelle zwar stark fragmentiert ist, aber trotzdem in den Arbeitsspeicher passt und die Art und Weise des Zugriffs es möglich macht, die Seiten in den Cache zu laden, sind die Auswirkungen möglicherweise minimal. Es kann aber auch sein, dass eine fragmentierte Tabelle viele I/O-Vorgänge erfordert und die Performance stark beeinträchtigt, wenn häufig auf getrennte Zeilen zugegriffen wird und die Kosten der zusätzlichen I/O-Vorgänge nicht durch Caching reduziert werden können.

Während die Neuorganisation von Tabellen und der Neuaufbau einer Datenbank die Fragmentierung reduzieren, kann ein zu häufiges oder zu seltenes Ausführen dieser Vorgänge auch Auswirkungen auf die Performance haben. Sie sollten mit den Tools und Methoden experimentieren, die in den folgenden Abschnitten beschrieben werden, um eine akzeptable Fragmentierungsstufe für Ihre Tabellen zu ermitteln.

Falls Sie die Fragmentierung reduzieren und die Performance trotzdem noch schlecht ist, könnte dies an einem anderen Problem liegen, etwa an fehlerhaften Statistikwerten.

Grad der Tabellenfragmentierung ermitteln

Mit der Systemprozedur "sa_table_fragmentation" erhalten Sie Informationen darüber, wie stark die Datenbanktabellen fragmentiert sind. Wenn Sie diese Systemprozedur nur einmal ausführen, reicht dies nicht aus, um festzustellen, ob die Performance durch eine Defragmentierung verbessert werden kann. Bauen Sie stattdessen die Datenbank neu auf und führen Sie die Prozedur aus, um Basiswerte zu ermitteln. Führen Sie die Prozedur dann über eine längere Zeit regelmäßig durch und prüfen Sie, ob es einen Zusammenhang zwischen Änderungen bei der Ausgabe und Änderungen bei den Performance-Werten gibt. Auf diese Art können Sie ermitteln, wie schnell Tabellen so weit fragmentiert werden, dass die Performance beeinträchtigt wird, und was die optimale Frequenz zur Defragmentierung von Tabellen ist.

Sie benötigen die DBA-Berechtigung, um diese Prozedur ausführen zu können. Die folgende Anweisung ruft die Systemprozedur "sa_table_fragmentation" auf:

CALL sa_table_fragmentation( [ 'Tabellenname' [, 'Eigentümername' ] ] );
Methoden zum Reduzieren der Fragmentierung

Die folgenden Methoden helfen bei der Kontrolle der Tabellenfragmentierung:

  • PCTFREE verwenden   SQL Anywhere reserviert zusätzlichen Platz auf jeder Seite, damit die Zeilen leicht anwachsen können. Wenn die Zeile aufgrund einer Aktualisierung länger wird als der ihr ursprünglich zugewiesene Platz zulässt, wird sie geteilt, und an der anfänglichen Position verweist ein Zeiger auf die Seite, auf der die gesamte Zeile gespeichert ist. Wenn beispielsweise leere Zeilen mit UPDATE-Anweisungen bzw. durch Einfügen neuer Spalten in eine Tabelle gefüllt werden, kann dies zu zahlreichen geteilten Zeilen führen. Mehr Zeilen werden auf separaten Seiten gespeichert, und mehr Zeit ist für den Zugriff auf die zusätzlichen Seiten erforderlich.

    Sie können dafür sorgen, dass Ihre Tabellen nicht zu sehr fragmentiert werden, indem Sie einen Prozentsatz festlegen, der auf Tabellenseiten freigehalten wird, um spätere Aktualisierungen unterzubringen. Diese PCTFREE-Angabe kann mit CREATE TABLE, ALTER TABLE, DECLARE LOCAL TEMPORARY TABLE oder LOAD TABLE festgelegt werden.

  • Tabellen neu organisieren   Mit der Anweisung REORGANIZE TABLE können Sie bestimmte Tabellen defragmentieren. Bei der Neuanordnung von Tabellen wird der Datenbankzugriff nicht gestört.

  • Datenbank neu aufbauen   Beim Neuaufbau der Datenbank werden alle Tabellen einschließlich der Systemtabellen defragmentiert, sofern der Neuaufbau als zweistufiger Prozess durchgeführt wird, das heißt, die Daten werden entladen und auf der Platte gespeichert und dann neu geladen. Der Neuaufbau auf diese Art hat auch den Vorteil, dass die Tabellenzeilen neu angeordnet werden, so dass sie in der Reihenfolge erscheinen, die durch den Clustered-Index und die Primärschlüssel vorgegeben werden. Durch einen Neuaufbau in einem Schritt (z.B. mit den Optionen -ar, -an oder -ac) wird die Tabellenfragmentierung nicht reduziert.

Siehe auch