返回首页

gbase数据、南大通用产品文档:GBase8s缓冲区大对象数据

更新日期:2024年09月11日

简单大对象(TEXT 或 BYTE 数据)可以存储在数据库空间中也可以存储在 BLOB 空
间中。智能大对象(CLOB 或 BLOB 数据)仅存储在智能大对象空间中。数据库服务器
使用不同方法来访问每种类型的存储空间。以下主题将描述用于每种类型的缓冲方法。
写入简单大对象
数据库服务器以写入任何其他数据类型时使用的相同方法将简单大对象写入数据库空间中
的磁盘页。有关更多信息,请参阅将数据清空到磁盘。
您也可以将简单大对象指定给 BLOB 空间。数据库服务器将简单大对象写入 BLOB 空
间(方法与将其他数据写入共享内存缓冲区时的不同),然后将其清空到磁盘。有关
BLOB 空间的描述,请参阅《GBase 8s 管理员参考》 中有关磁盘结构和存储器的章节。
BLOB 页和共享内存
BLOB 空间 BLOB 页存储大量数据。因此,数据库服务器不会经由共享内存缓冲池创建
或访问 BLOB 页,并且它不会将 BLOB 空间的 BLOB 页写入逻辑或物理日志。
如果 BLOB 空间数据已通过共享内存池,它可能会通过去除索引页和数据页来降低池的
有效性。反之,BLOB 页将在创建时直接写入磁盘。
要减少逻辑日志和物理日志的流量,数据库服务器会使用与写入数据库空间页时不同的方
法将 BLOB 页从磁介质写入数据库空间备份磁带以及逻辑日志备份磁带。
由于光学介质的高可靠性,存储在光学介质上的 BLOB 页将不会写入到数据库空间和逻
辑日志备份磁带中。
创建简单大对象
当将简单大对象数据写入磁盘时,它所属的行可能尚不存在。 例如,在插入期间,简单
大对象会在其他行数据传送之前传送。存储简单大对象后,数据行将与指向其位置的 56
位描述符一同创建。有关如何以物理方式存储简单大对象的描述,请参阅《GBase 8s 管
理员参考 》的磁盘存储器和结构章节中有关数据库空间 BLOB 页结构的部分。
创建 BLOB 页缓冲区

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 134 -
要从应用程序进程接收简单大对象数据,数据库服务器会创建一对 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 页段的指针。
操作记录(插入、更新或删除)将写入到逻辑日志缓冲区。

访问智能大对象
数据库服务器通过共享内存缓冲区访问智能大对象,其方法与访问存储在数据库空间中的
数据相同。然而,智能大对象的用户数据部分将在比正常缓冲区页更低的优先级上缓冲以
防止将更高值的数据清空出缓冲池。缓冲允许对经常访问的智能大对象进行更快的访问。
智能大对象存储在智能大对象空间中。您不能将简单大对象存储在智能大对象空间中,也
不能将智能大对象存储在 BLOB 空间中。智能大对象空间由用户数据区域和元数据区域
组成。用户数据区域包含智能大对象数据。元数据区域包含有关智能大对象空间内容的信
息。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 135 -
因为智能大对象已通过共享内存缓冲池并且可以记录,所以您必须在分配缓冲区时考虑这
些智能大对象。使用 BUFFERPOOL 配置参数分配共享内存缓冲区。通常,尝试分配足
够的缓冲区,以便为每个同时打开的智能大对象包含两个智能大对象页。(附加页可用于
预读的用途。)
使用 LOGBUFF 配置参数可指定逻辑日志缓冲区的大小。有关设置以下每个配置参数的
信息,请参阅《GBase 8s 管理员参考》:
• BUFFERPOOL
• LOGBUFF
已记录的智能大对象的用户数据区域不会通过物理日志,因此无需为智能大对象更改
PHYSBUFF 参数。
有关智能大对象空间结构的更多信息,请参阅《GBase 8s 管理员参考》的磁盘结构和存
储器章节中有关智能大对象空间结构的部分。有关创建智能大对象空间的信息,请参阅
《GBase 8s 管理员参考》中有关 onspaces 实用程序的信息。

当程序准备使用游标时,
它打开它。
OPEN 语句激活游标。
它将相关联的 SELECT 语句传
给数据库服务器,其开始搜索相匹配的行。数据库服务器处理该查询至定位到或构造输出
的第一行的位置。
它并不真正地返回那行数据,
但它确实在 SQLSTATE 中和在 SQLCODE
中为 SQL API 设置返回代码。下列示例展示 GBase 8s ESQL/C 中的 OPEN 语句:
EXEC SQL OPEN the_item;
由于数据库服务器正在第一次查看查询,因此,它可能检测到一些错误。在程序打开游标
之后,
它应测试 SQLSTATE 或 SQLCODE。
如果 SQLSTATE 值大于 02000 或 SQLCODE
包含负值,则该游标不可用。在 SELECT 语句中可能出现错误,或某些其他问题可能阻止
数据库服务器执行该语句。
如果 SQLSTATE 等于 00000,或 SQLCODE 包含零,则 SELECT 语句在语法上是有效
的,且准备使用该游标。然而,此时,该程序不知道游标能否产生任何行。


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 217 -

gbase_stmt_reset ............................ 64