Im folgenden Abschnitt wird erläutert, wie Zeilen der Datenbank auf der Festplatte gespeichert werden.
Jede neue Zeile, die kleiner als die Seitengröße der Datenbankdatei ist, wird stets auf einer Seite gespeichert. Wenn keine vorhandene Seite genügend freien Speicherplatz für die neue Zeile hat, schreibt SQL Anywhere die Zeile auf eine neue Seite. Wenn die neue Zeile zum Beispiel 600 Byte an Speicherplatz benötigt, aber nur 500 Byte auf einer teilweise gefüllten Seite verfügbar sind, platziert SQL Anywhere die Zeile auf einer neuen Seite.
Damit Tabellenseiten auf der Festplatte zusammenhängender gespeichert werden, weist SQL Anywhere Tabellenseiten jeweils in Blöcken mit je acht Seiten zu. Wenn beispielsweise eine Seite zugewiesen werden muss, werden acht Seiten zugewiesen, die Seite in den Block eingefügt und dann der Block mit den nächsten sieben Seiten aufgefüllt. Außerdem wird eine Bitmap für freie Seiten verwendet, um zusammenhängende Seitenblöcke im DBSpace zu suchen. Um relevante Seiten aufzufinden, werden mithilfe der Bitmap sequenzielle Suchen durchgeführt, wobei jeweils Gruppen von 64 KByte gelesen werden. Dadurch können effizientere sequenzielle Suchvorgänge erreicht werden.
SQL Anywhere ermittelt Speicherplatz auf den Seiten und fügt Zeilen in der Reihenfolge ein, in der er sie erhält. Er ordnet jede Zeile einer Seite zu, aber die Position, die in der Tabelle ausgewählt wird, muss nicht der Reihenfolge entsprechen, in der sie eingefügt wurde. Der Datenbankserver wird möglicherweise eine neue Seite beginnen müssen, um eine lange Zeile zusammenhängend speichern zu können. Sollte die nächste Reihe kürzer sein, passt sie eventuell an eine leere Stelle auf einer vorhergehenden Seite.
Die Zeilen aller Tabellen sind unsortiert. Wenn die Reihenfolge, mit der Sie Ihre Zeilen erhalten oder verarbeiten, wichtig ist, verwenden Sie eine ORDER BY-Klausel in Ihrer SELECT-Anweisung, um eine Sortierfolge im Ergebnis zu bewirken. Anwendungen, die sich auf die Reihenfolge von Zeilen in einer Tabelle verlassen, können ohne Warnung fehlschlagen.
Wenn Sie häufig die Zeilen einer Tabelle in einer bestimmten Reihenfolge benötigen, ist es sinnvoll, für diese in der ORDER BY-Klausel der Abfrage enthaltenen Spalten einen Index zu erstellen.
Immer wenn SQL Anywhere eine Zeile einfügt, reserviert er standardmäßig nur den Speicherplatz, der zum Speichern der Zeile mit ihren Werten erforderlich ist, die sie zum Zeitpunkt ihrer Erstellung enthält. Er reserviert keinen Speicherplatz, um NULL zu speichern oder um Felder wie zum Beispiel Textzeichenfolgen aufzunehmen, die sich vergrößern können.
Sie können SQL Anywhere zwingen, Speicherplatz zu reservieren, indem Sie beim Erstellen der Tabelle die PCTFREE-Option verwenden. Weitere Hinweise finden Sie unter CREATE TABLE-Anweisung.
Sobald einer Zeile eine Position auf einer Seite zugeordnet ist, wird die Zeile nicht mehr von dieser Seite verschoben. Wenn eine Aktualisierung einen der Werte in der Zeile so ändert, dass er nicht mehr auf die ihm zugeordnete Seite passt, dann wird die Zeile geteilt, und die zusätzlichen Daten werden in eine andere Seite eingefügt.
Diese Eigenschaft verdient besondere Beachtung, vor allem weil SQL Anywhere keinen zusätzlichen Speicherplatz zu dem Zeitpunkt zuordnet, an dem die Zeile eingefügt wird. Nehmen wir zum Beispiel an, dass Sie eine große Anzahl von leeren Zeilen in eine Tabelle einfügen und dann die Werte in eine Spalte nach der anderen eingeben, wobei Sie UPDATE-Anweisungen verwenden. Das Ergebnis wäre, dass beinahe jeder Wert der einzelnen Zeilen auf einer separaten Seite gespeichert wird. Um alle Werte einer Zeile abzurufen, müsste der Datenbankserver möglicherweise mehrere Plattenspeicher-Seiten lesen. Dieser einfache Vorgang würde sich dadurch unnötigerweise extrem verlangsamen.
Es ist sinnvoll, neue Zeilen zum Zeitpunkt des Einfügens mit Werten anzufüllen. Sobald sie eingefügt sind, werden sie genügend Platz haben, um die erwarteten Daten aufzunehmen.
Wenn Sie Zeilen in die Datenbank einfügen oder aus ihr löschen, wird der von ihnen belegte Speicherplatz von SQL Anywhere automatisch wieder verwendet. Das heißt, dass SQL Anywhere möglicherweise eine Zeile an einen Platz einfügt, der früher von einer anderen Zeile besetzt war.
SQL Anywhere führt Aufzeichnungen über den leeren Speicherplatz, den einzelne Seiten aufweisen. Wenn Sie ihn auffordern, eine neue Zeile einzufügen, durchsucht er zuerst sein Protokoll über den Speicherplatz auf vorhandenen Seiten. Wenn er genügend Platz auf einer vorhandenen Seite findet, platziert er die neue Zeile auf diese Seite, wobei er nötigenfalls die Seite neu organisiert. Wenn nicht, beginnt er eine neue Seite.
Wenn im Laufe der Zeit Zeilen gelöscht und keine neuen Zeilen eingefügt werden, die klein genug wären, um die leeren Plätze zu verwenden, werden die Informationen in der Datenbank sehr verstreut sein. Sie können die Tabelle neu laden oder mit der REORGANIZE TABLE-Anweisung defragmentieren.
Weitere Hinweise finden Sie unter REORGANIZE TABLE-Anweisung.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |