2-146 IBM Informix OnLine Database Server Administrator’s Guide
Structure of a Dbspace Blob Page
Blobs are never modified: only inserted or deleted. When blob data is
updated, a new blob is created and the data row is updated with the new blob
descriptor. The old image of the row contains the descriptor that points to the
obsolete blob value. The obsolete blob is deleted after the update is
committed. Blobs are automatically deleted if the rows containing their blob
descriptors are deleted. (Blobpages that stored a deleted blob are not
available for reuse until the logical log in which the COMMIT logical log
record appears is freed. For more information, refer to page 2-157.)
The largest blob that the blob descriptor can accommodate is (2
31
- 1), or
about 2 gigabytes. This limit is imposed by the 4-byte integer that defines the
size of the blob in the blob descriptor. In practice, blob size is probably limited
at a size less than 2 gigabytes because of the number of available OnLine
locks that would be required during blob storage.
Structure of a Dbspace Blob Page
Blob data that is stored in the dbspace is stored in a blob page. The structure
of a dbspace blob page is similar to the structure of a dbspace data page. The
only difference is an extra 12 bytes that might be stored along with the blob
data in the data area.
Blobs can share dbspace blob pages if more than one blob can fit on a single
page or if more than one trailing portion of a blob can fit on a single page.
Refer to IBM Informix Guide to SQL: Tutorial for a general discussion of how to
estimate the number of dbspace blob pages needed for a specific table.
Each segment of blob data stored in a dbspace page may be preceded by up
to 12 bytes of information that do not appear on any other dbspace page.
These extra bytes contain up to three pieces of information:
■ A 4-byte blob timestamp for this blob segment (required)
■ A 4-byte forward pointer (rowid) to the next portion of the blob
segment, if one exists (optional)
■ A 4-byte blob timestamp stored with the forward pointer to the next
portion of the blob segment (required if a forward pointer exists)