Inhaltsverzeichnis
Chunk-Länge und Blob-Page
Notiz zur Anlage eines Chunks in einem Blobspace. Eine Blob-Page muss vollständig im Chunk liegen. IBM legt die Blob-Page als Vielfaches der System-Page fest und verbietet, dass sie über die Chunk-Grenze geht. onspaces -s rechnet in Kilobyte. Ein Wert, der nur in der System-Page aufgeht, ist für den Blobspace zu kurz oder zu lang.
Regel
Die System-Page steht in onstat -d beim rootdbs in pgsize. Die Blob-Page steht dort beim Blobspace. Auf dem betroffenen Server ist die System-Page 2 KiB (2048) und die Blob-Page von blobdbs 10 KiB (10240). 4 KiB wäre nur dann der Teiler, wenn die System-Page der Instanz 4 KiB ist.
Die 5 ist dieses Vielfache in Pages. onstat -d zeigt die Chunk-Länge size als Anzahl System-Pages S. Eine Blob-Page belegt
n = 10240 / 2048 = 5
System-Pages. Im Chunk liegen S / 5 Blob-Pages. Das ist eine ganze Zahl genau dann, wenn S durch 5 teilbar ist. Sonst bleibt am Ende ein Rest von 1 bis 4 System-Pages, und die nächste Blob-Page geht über die Chunk-Grenze.
onspaces erwartet -o und -s in Kilobyte, mindestens 1000 KB. Mit s als dieser Kilobyte-Zahl gilt
S = s * 1024 / 2048 = s / 2 S / 5 = s / 10
S ist durch 5 teilbar genau dann, wenn s durch 10 teilbar ist. Die 10 ist dieselbe Blob-Page in Kilobyte, 10240 / 1024. Es sind nicht zwei Regeln.
IBM formuliert bei -s nur „a multiple of the page size“. Die System-Page erfüllt das für viele Größen, die die Blob-Page nicht erfüllt. Maßgeblich ist die Blob-Page, weil sie den Chunk nicht überqueren darf.
Beispiel 2 GiB
2 GiB sind 2097152 KB. Geteilt durch 2 KiB geht das auf: 1048576 System-Pages. Geteilt durch 10 KiB nicht: 2097152 geteilt durch 10 ist kein Ganzes. 1048576 geteilt durch 5 lässt Rest 1. Es bleibt eine System-Page übrig. Der Schreibversuch am Ende fordert pagecnt 5 und landet hinter dem Chunk.
Passend sind 2097150 KB. Das sind 209715 Blob-Pages ohne Rest und 1048575 System-Pages, teilbar durch 5.
onspaces -a blobdbs -p /pfad/chunk -o 0 -s 2097150
Offset 0. Dieselbe Rechnung für jede andere Wunschgröße: den KB-Wert auf das nächste Vielfache von 10 abrunden.
Der I/O-Fehler tritt beim Schreiben in
blobdbs auf, wenn diese Teilung einen Rest ungleich null lässt . Die Blob-Page geht am Chunk-Ende physisch nicht auf. Der Server fordert die volle Blob-Page an und schreibt hinter das Chunk-Ende.
datadbs
Für Chunks in datadbs ist das unkritisch. Dort ist die Zuordnungseinheit die Page dieses Dbspace, abzulesen in onstat -d unter pgsize in der Zeile von datadbs, nicht die Blob-Page von blobdbs.
Ist pgsize dort 2048, ist der Teiler 2 KB. 2097152 KB sind 1048576 Pages ohne Rest. Eine Daten-Page überquert den Chunk nicht, weil sie selbst die Page-Größe ist. Den I/O-Fehler aus der angebrochenen Blob-Page gibt es dort nicht.
IBM verlangt auch für einen Dbspace-Chunk ein Vielfaches der Page-Größe. Steht bei datadbs eine eigene Page-Größe, zum Beispiel 16384, muss -s durch 16 teilbar sein. Der Teiler 5 aus dem Blobspace gilt dann trotzdem nicht.
Prüfen
onstat -d onstat -d update
pgsize von rootdbs und vom Blobspace ablesen. In der Chunk-Liste ist size die Zahl der System-Pages. Schief, wenn size geteilt durch 5 einen Rest lässt. 2621440 und 2000000 gehen auf, 1048576 nicht.
free nach onstat -d update vor und nach einem Speichern vergleichen. Der Chunk, dessen free sinkt, hat die Pages bekommen. Frei etwa 0 heißt, der Chunk wird übergangen. IBM kennzeichnet einen leeren Down-Chunk in dieser Liste gesondert. Das ist ein anderer Zustand als ein voller schiefer Chunk.
oncheck -pe blobdbs
oncheck -pe zeigt, welche Tabelle schon Pages auf welchem Chunk hat. Den nächsten Schreibvorgang zeigt es nicht.
Was davon bleibt
Ein voller schiefer Chunk ist damit nicht repariert. Sobald dort Pages frei werden, ist die überstehende Page wieder wählbar. Den Blobspace mit dem Suffix alt deshalb nicht löschen, solange BYTE-Werte auf so einem Chunk liegen.
onspaces -s mit -D setzt den Chunk auf Down. Down ist offline: Lesen und Schreiben entfallen. Einen Nur-Lesen-Zustand gibt es nicht. Zurück auf Online geht mit -O, nicht mit einem Lese-Flag. Einen leeren Chunk entfernen ist ein anderes Kommando (onspaces -d) und setzt voraus, dass nichts mehr darauf liegt.
IBM
- IBM: Blobpages — Blob-Page ist ein Vielfaches der System-Page und liegt immer ganz in einem Chunk.
- IBM Informix 12.10: onspaces -a —
-ound-sin Kilobyte, mindestens 1000 KB, Vielfaches der Page-Größe. - IBM: onspaces -c -b —
-gist die Blob-Page in Einheiten der Basis-Page, 2 KiB oder 4 KiB. - IBM: Chunks —
onstat -düberwacht die freien Pages. Frei 0 in allen Chunks eines Dbspace blockiert neue Objekte. - IBM: Event alarm IDs — offline Chunk, Wiederherstellung mit
onspaces -s.
Stichworte
Informix, Blobspace, datadbs, Blob-Page, Chunk, onspaces, onstat -d, pgsize, pagecnt, I/O, BYTE, TEXT
