返回首页

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

更新日期:2024年09月11日

简单大对象(TEXT 或 BYTE 数据)可以存储在数据库空间中也可以存储在 BLOB 空间
中。智能大对象(CLOB 或 BLOB 数据)仅存储在智能大对象空间中。数据库服务器使
用不同方法来访问每种类型的存储空间。以下主题将描述用于每种类型的缓冲方法。
写入简单大对象
数据库服务器以写入任何其他数据类型时使用的相同方法将简单大对象写入数据库空间中
的磁盘页。有关更多信息,请参阅将数据清空到磁盘。
您也可以将简单大对象指定给 BLOB 空间。数据库服务器将简单大对象写入 BLOB 空间
(方法与将其他数据写入共享内存缓冲区时的不同)

然后将其清空到磁盘。
有关 BLOB 空
间的描述,请参阅《GBase 8s 管理员参考》 中有关磁盘结构和存储器的章节。
BLOB 页和共享内存

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 141 -
BLOB 空间 BLOB 页存储大量数据。因此,数据库服务器不会经由共享内存缓冲池创建
或访问 BLOB 页,并且它不会将 BLOB 空间的 BLOB 页写入逻辑或物理日志。
如果 BLOB 空间数据已通过共享内存池,
它可能会通过去除索引页和数据页来降低池的有
效性。反之,BLOB 页将在创建时直接写入磁盘。
要减少逻辑日志和物理日志的流量,数据库服务器会使用与写入数据库空间页时不同的方
法将 BLOB 页从磁介质写入数据库空间备份磁带以及逻辑日志备份磁带。
由于光学介质的高可靠性,
存储在光学介质上的 BLOB 页将不会写入到数据库空间和逻辑
日志备份磁带中。
创建简单大对象
当将简单大对象数据写入磁盘时,它所属的行可能尚不存在。 例如,在插入期间,简单大
对象会在其他行数据传送之前传送。存储简单大对象后,数据行将与指向其位置的 56 位
描述符一同创建。有关如何以物理方式存储简单大对象的描述,请参阅《GBase 8s 管理员
参考 》的磁盘存储器和结构章节中有关数据库空间 BLOB 页结构的部分。
创建 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 空间


GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 142 -

用自由图页分配和跟踪 BLOB 空间的 BLOB 页。按需创建连接 BLOB 页的链接和指向
下一个 BLOB 页段的指针。
操作记录(插入、更新或删除)将写入到逻辑日志缓冲区。

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

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

功能描述
在指定的节点上执行SQL 语句。一般情况下,SQL 语句的执行是由集群负载自动分配
到合适的节点上,execute direct 主要用于数据库维护和测试。
注意事项
当enable_nonsysadmin_execute_direct=off 时,只有系统管理员和监控管理员才能执行
EXECUTE DIRECT。
为了各个节点上数据的一致性,
SQL 语句仅支持SELECT,
不允许执行事务语句、
DDL、
DML。
使用此类型语句在指定的DN 执行stddev 聚集计算时,
返回结果集是以三元数组形式返
回,如{3, 8, 30},表示count 结果为3,sum 结果为8,平方和为30。使用此类型语句在指
定的DN 执行AVG 聚集计算时,返回结果集以二元组形式返回,如{4,2},表示sum 结果
为4,
count 结果为2。
注意,
当数据为列存时,
调用avg 函数结果未定义,
请使用stddev_samp
函数。
当指定多个节点时,
不支持agg 函数,
当query 中包含agg 函数时,
会返回
“EXECUTE
DIRECT on multinode not support agg functions.”
由于CN 节点不存储用户表数据,不允许指定CN 节点执行用户表上的SELECT 查询。
不允许执行嵌套的EXECUTE DIRECT 语句,
即执行的SQL 语句不能同样是EXECUTE
DIRECT 语句,此时可直接执行最内层EXECUTE DIRECT 语句代替。
agg 函数查询结果与直接在CN 上查询不一致,会返回多个信息,不支持array_avg 函
数。
语法格式

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1144
EXECUTE DIRECT ON ( nodename [, ... ] ) query ;
EXECUTE DIRECT ON { COORDINATORS | DATANODES | ALL } query;
参数说明

nodename
节点名称。
取值范围:已存在的节点。

query
要执行查询语句。

COORDINATORS
在所有coordinator 执行查询语句。

DATANODES
在所有datanode 执行查询语句。

ALL
在所有coordinator 和datanode 执行查询语句。
示例
--查询当前数据库实例的节点分布状态。
gbase=#SELECT * FROM pgxc_node;
node_name
| node_type | node_port |
node_host
| node_port1 |
node_host1
| hostis_primary | nodeis_primary | nodeis_preferred |
node_id
| sctp_port | control_port | sctp_port1 | control_port1
--------------+-----------+-----------+----------------+------------+--------
--------+----------------+----------------+------------------+-------------+-
----------+--------------+------------+---------------
cn_5001
| C
|
8050 | 10.180.155.74
|
8050 |

参数说明:unix 套接字的目录位置。
取值范围:字符串。修改后需要重启cm_agent 才能生效。参数修改请参考表
log_pattern_%s 进行设置。
默认值:”