创建 BLOB 页缓冲区

要从应用程序进程接收简单大对象数据,数据库服务器会创建一对 BLOB 空间缓冲区(一个用于读一个用于写),大小都是一个 BLOB 空间的 BLOB 页。 确保用户只有一组 BLOB 空间缓冲区,并因此一次只能访问一个简单大对象。

简单大对象数据将以 1 KB 段从客户机应用程序进程传输到数据库服务器。然后数据库服务器开始用 1 KB 块填充 BLOB 空间缓冲区,并尝试一次缓冲两个 BLOB 页。数据库服务器将缓冲两个 BLOB 页以便可以确定何时将转发指针从一个页添加到下一个。当它填充了第一个缓冲区并发现有更多的数据要传送时,它会在向磁盘写入页之前将转发指针添加到下一个页。当不再有数据要传送时,数据库服务器会不带转发指针将最后一页写入到磁盘。

当线程开始将第一个 BLOB 空间缓冲区写入到磁盘时,它尝试根据用户定义的 BLOB 页大小执行 I/O。例如,如果 BLOB 页的大小是 32 KB,那么数据库服务器将尝试以 32,768 字节的增量来读取或写入数据。如果底层硬件(如磁盘控制器)无法在单个操作中传送这些数据量,那么操作系统内核将在内部(以内核方式)循环直到传送完成为止。

BLOB 空间缓冲区会保留到创建它们的缓冲区完成为止。当将简单大对象写入到磁盘时,数据库服务器将取消分配 BLOB 空间缓冲区对。下图说明了将简单大对象写入 BLOB 空间的过程。

图: 将简单大对象写入 BLOB 空间


此图的描述在周围文本中。

用自由图页分配和跟踪 BLOB 空间的 BLOB 页。按需创建连接 BLOB 页的链接和指向下一个 BLOB 页段的指针。

操作记录(插入、更新或删除)将写入到逻辑日志缓冲区。