返回首页

gbase数据、南大通用产品文档:GBase8ccmserver_ha_heartbeat_timeout

更新日期:2024年09月11日

参数说明:cm_server 主备心跳超时时间。
取值范围:整型,单位为秒。修改后需要重启cm_server 才能生效。参数修改请参考表
GUC 参数设置方式进行设置。
默认值:6


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 198 -

要访问智能大对象,请按以下步骤操作:

使用 SELECT 语句将数据库中的智能大对象选择到 ifx_lo_t 主机变量中。
使用 ifx_lo_open() 函数打开智能大对象。
执行适当的读取或写入操作来更新智能大对象的数据。
使用 ifx_lo_close() 函数关闭智能大对象。
选择智能大对象
SELECT 语句不会执行智能大对象数据的实际输出。但是,它建立一种方法,使应用
程序标识智能大对象,
以致于它可以发出 GBase 8s ESQL/C 库函数可以在智能大对象上打
开、读取、写入或执行其它操作。

数据库表中的 CLOB 或 BLOB 列包含智能大对象的 LO 指针结构。因此,当您将
CLOB 或 BLOB 列选择到 ifx_lo_t 主机变量时,SELECT 语句返回 LO 指针结构。出于
此原因,声明 CLOB 和 BLOB 值的主机变量为 LO 指针结构。

下图显示了数据库服务器如何将智能大对象的数据传输到 GBase 8s ESQL/C 客户端
应用程序中。

图 3. 将智能大对象的数据从数据库传输到 GBase 8s ESQL/C 客户端应用程序中


打开智能大对象
当您打开智能大对象时,
获得智能大对象的 LO 文件描述符。
通过 LO 文件描述符,
您可以访问智能大对象的数据,就像它在操作系统文件中一样。
访问模式
当您打开智能大对象时,请为数据指定访问模式。

访问方式决定开放智能大对象上的哪种读取和写入操作有效。可以使用 locator.h 文

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 199 -

件定义的访问模式常量指定访问模式。

下表显示了访问模式以及它们对应的定义 ifx_lo_open() 和 ifx_lo_create() 函数支持
的常量。

表 3. 智能大对象访问模式标志
访问模式
意义
访问模式常量
只读模式
只能对数据进行读取操作。
LO_RDON
LY
脏读模式
仅对于 ifx_open() ,
允许您读取智能大对象未提交的
页。在将模式设置为 LO_DIRTY_READ 后,无法写入智
能大对象。当您设置此标志时,将为当前的事务隔离模式
重置为智能大对象的脏读取。
不要对从脏读取模式中的智能大对象获取的数据进
行修改。

LO_DIRTY
_READ
只写模式
只能对数据进行写入操作。
LO_WRON
LY
附加模式
适用于 LO_WRONLY 或 LO_RDWR。
在每次写入
之前将位置指针设置为对象的末尾。将您写入的任何数据
附加到智能大对象的末尾。如果单独使用 LO_APPEND ,
则只打开该对象进行阅读。
LO_APPEN
D
读/写 模式
对数据的读取和写入操作都是有效的。
LO_RDWR
缓冲区访问
使用标准数据库服务器缓冲池。
LO_BUFFE
R
轻量 I/O
从数据库服务器的会话池中使用专用缓冲区。
LO_NOBUF
FER
锁定全部
指定整个智能大对象将发生锁定。
LO_LOCK
ALL
锁定字节范

指定锁定将发生在一定范围内,这将通过
ifx_lo_lock() 函数在放置锁定时指定。
LO_LOCKR
ANGE

提示:
智能大对象的这些访问模式标志在 UNIX(TM) 系统 V 访问模式之后被视图化。

设置脏读取访问模式
要对智能大对象设置脏读取访问模式,
使用 SET ISOLATION 语句为此事务设置,

者在打开智能大对象时设置 LO_DIRTY_READ 访问模式。当您打开智能大对象时设置

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 200 -

LO_DIRTY_READ 访问模式仅影响智能大对象的读取模式,
而不影响整个事务。
换句话说,
如果您的事务在提交读取模式下执行,则可以使用 LO_DIRTY_READ 访问模式以脏读取
模式打开智能大对象,而不需更改事务的隔离模式。
LO_APPEND 标志
当仅使用 LO_APPEND 打开智能大对象时,智能大对象以只读的方式打开。搜索查
找会移动文件指针但是智能大对象的写操作失败,并且文件指针在写入前不会进行位置移
动。读取操作发生在文件指针所在的位置,然后移动文件指针。

可以使用其它访问模式屏蔽 LO_APPEND 标志。在任何这些 OR 组合中,搜索操作
保持不受影响。下表显示每个 OR 组合对读写操作的影响。

OR 操作
读操作
写操作
LO_RDONLY
| LO_APPEND
在文件位置发生,
然后将文件
位置移动到读取数据的末尾
失败并且不会移动文件位置
LO_WRONL
Y | LO_APPEND
失败,
并且不会移动文件扩展

将文件位置移动到智能大对象的
末尾,然后写数据;文件位置在写入数
据结束后
LO_RDWR |
LO_APPEND
在文件位置发生,
然后将文件
位置移动到读取数据的末尾
将文件位置移动到智能大对象的
末尾,然后写数据;文件位置在写入数
据结束后
轻量级 I/O
当该数据库服务器访问智能大对象时,它使用来自缓冲池的缓冲区用于缓存访问。未
缓存的访问称为 轻量级 I/O。
轻量级 I/O 使用专用缓冲区而不是缓冲池来保存智能大对象。
这些专用缓冲区被分配出数据库服务器会话池。

轻量级 I/O 允许您绕过数据库服务器用于管理缓冲池的最近最少使用
(LRU)
队列的
开销。

当使用 ifx_lo_create() 函数创建智能大对象或者当使用 ifx_lo_open() 函数打开特定
的智能大对象时,可以通过将标识参数设置为 LO_NOBUFFER 来指定轻量级 I/O 。要指
定缓冲访问(缺省值),使用 LO_BUFFER 标志。

重要: 当使用轻量级 I/O 时,请注意以下问题:
使用 ifx_lo_close() 关闭智能大对象,当您完成它们以释放分配给专用缓冲区的内存。

所有使用轻量级 I/O 为指定的智能大对象的打开都共享相同的专用缓冲区。
因此,


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 201 -

个操作可能导致缓冲区中的页面被刷新,而其他操作对象存在于缓冲区中。

数据库服务器对从轻量级 I/O 到缓冲 I/O 的切换加了以下限制:

如果智能大对象未打开,可以使用 ifx_lo_alter() 函数将智能大对象从轻量级 I//O
(LO_NOBUFFER)切换到缓冲 I/O(LO_BUFFER)。但是,如果您尝试将使用缓冲 I/O
的智能大对象切换为使用轻量级 I/O 则 ifx_lo_alter() 生成错误。
除非您首先使用 ifx_lo_alter() 将访问模式更改为缓冲访问(LO_BUFFER),否则只
能使用 LO_NOBUFFER 访问模式标志,
创建轻量级 I/O。
如果一个打开指定 LO_BUFFER,
则数据库服务器忽略此标志。
只有在以只读方式打开对象时,才能打开受缓冲访问(LO_BUFFER)创建的智能大
对象,
并使用 LO_NOBUFFER 标志。
如果您尝试写入此对象,
则数据库服务器返回错误。
要写入智能大对象,
必须关闭它然后使用 LO_BUFFER 标志和允许写操作的访问标志重新
打开它。

可以使用数据库服务器实用程序 onspaces 为 sbspace 中的所有智能大
对象指定轻量级 I/O。
智能大对象锁定
当打开智能大对象时,数据库服务器将锁定整个智能大对象或指定的一系列字节。以
防止同时访问智能大对象数据。
智能大对象上的锁与行锁不同。
如果从行检索智能大对象,
则数据库服务器可能持有行锁和智能大对象锁。数据库服务器锁定智能大对象数据是因为
许多列包含相同的智能大对象数据。使用访问模式标志 LO_RDONLY 、
LO_DIRTY_READ 、LO_APPEND 、LO_WRONLY 、LO_RDWR 和 LO_TRUNC 指定
智能大对象锁的模式。您将这些标志传递给 ifx_lo_open() 和 ifx_lo_create() 函数。当指定
LO_RDONLY 时,数据库服务器在智能大对象上放置一个共享锁。当指定
LO_DIRTY_READ 时,
数据库服务器不会在智能大对象删放置锁。
如果指定任何其它访问
模式标志,
则数据库服务器获得一个更新锁,
它会在首次写入或其它操作时提升为互斥锁。

共享和更新锁(只读模式或更改发生前的写入模式)会一直保持直到您的程序执行以
下操作之一:
关闭智能大对象
提交事务或回滚它

即使您关闭智能大对象互斥锁也将一直保持直到事务结束。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 202 -

重要: 即使智能大对象保持打开,您在事务结束时也会失去锁定。当数据库服务器
检测到智能大对象没有活动锁定时,当智能大对象发生第一次访问时,它会自动获得新的
锁定。它获得的锁是基于智能大对象的原始打开模式。
锁的范围
在智能大对象上放置锁定时,可以锁定整个智能大对象,或者锁定字节范围。字节范
围锁定允许您只锁定将在智能大对象中影响的字节范围。

两个访问模式标志 LO_LoCKALL 和 LO_LOCKRANGE,使您能够知道将用于智
能大对象的缺省锁类型。可以使用 ifx_lo_specset_flags() 设置它们,使用
ifx_specget_flags() 检索。LO_LOCKALL 标志指定整个智能大对象被锁定;
LO_LOCKRANGE 标志指定您对智能大对象使用字节范围锁定。

可以使用 ifx_lo_alter() 函数将缺省范围从一种类型更改为另一种类型。
可以通过在访问模式标志 ifx_lo_open() 的访问模式标志中设置 LO_LOCKALL
或 LO_LOCKRANGE 标志来覆盖缺省范围。

ifx_lo_lock() 函数允许您锁定要为智能大对象访问的字节范围,并且
ifx_lo_unlock() 函数允许您在完成时解锁字节。
智能大对象打开的持续时间
当您使用 ifx_lo_create() 函数或 ifx_lo_open() 函数打开智能大对象后,
它仍保持打开
状态,直到发生以下事件之一:
ifx_lo_close() 函数关闭智能大对象。
会话结束。

当前事务的结束不会关闭智能大对象。但是,它会释放智能大对象上的锁。使用您的
应用程序在它们完成后立即关闭智能大对象。开启智能大对象不必要地消耗系统内存。关
闭足够数量的智能大对象打开可以最终产生超出内存的条件。
删除智能大对象
如果应用程序打开了智能大对象,则智能大对象不会被删除直到当前会话提交并且智
能大对象被关闭。
修改智能大对象
按照以下步骤修改智能大对象的数据:

在开放的智能大对象中读取和写入数据,直到数据库准备好保存。
使用 UPDATE 或 INSERT 语句将智能大对象的 LO 指针存储到数据库中。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 203 -

从智能大对象读取
ifx_lo_read() 和 ifx_lo_readwithseek()GBase 8s ESQL/C 库函数从智能大对象读取数
据。

它们都从打开的智能大对象中读取指定数量的字节到用户定义的字符缓冲区。
ifx_lo_read() 函数在当前文件位置开始读取操作。可以使用 ifx_lo_seek() 函数指定读取的
起始位置文件,您可以使用 ifx_lo_tell() 函数调用执行查找和读取操作。
ifx_lo_readwithseek() 函数通过单个函数调用执行查找和读取操作。

ifx_lo_read() 和 ifx_lo_readwithseek() 函数需要一个有效的 LO 文件描述符标识要读
取的智能大对象。您可以使用 ifx_lo_open() 或 ifx_lo_create() 函数获取 LO 文件描述符。

写入数据到智能大对象
ifx_lo_write() 和 ifx_lo_writewithseek()GBase 8s ESQL/C 库函数将数据写入到打开的
智能大对象中。它们都将来自用户定义的字符缓冲区的特定编号写入到打开的智能大对象
中。ifx_lo_write() 函数在当前文件位置开始写入操作。可以使用 ifx_lo_seek() 函数指定写
入的起始文件位置,使用 ifx_lo_tell() 函数获取当前文件位置。ifx_lo_writewithseek() 函数
使用一个函数调用执行搜索和写入操作。

ifx_lo_write() 和 ifx_lo_writewithseek() 函数需要有效的 LO 文件描述符来标识要写
的智能大对象。使用 ifx_lo_open() 或 ifx_lo_create() 函数获取 LO 文件描述符。
关闭智能大对象
在完成对智能大对象的读取和写入操作后,使用 ifx_lo_close() 函数释放分配给它的
资源。当资源被释放时,它们可以重新分配给您需要的其它结构。此外,LO 文件描述符
可以重新分配给其它智能大对象。

GS_WLM_EC_OPERATOR_INFO 系统表存储执行EC(Extension Connector)作业结束
后的算子相关的记录。当设置GUC 参数enable_resource_record 为on 时,系统会每3 分钟
将GS_WLM_EC_OPERATOR_HISTORY 中的记录导入此系统表,
开启此功能会占用系统存
储空间并对性能有一定影响。查询该系统表需要sysadmin 权限。
名称
类型
描述
queryid
bigint
EC 语句执行使用的内部query_id。
plan_node_id
integer
EC 算子对应的执行计划的plan node id。
start_time
timestamp wit
h time zone
EC 算子处理第一条数据的开始时间。
duration
bigint
EC 算子到结束时候总的执行时间(ms)。
tuple_processed
bigint
EC 算子返回的元素个数。
min_peak_memor
y
integer
EC 算子在所有DN 上的最小内存峰值(MB)。
max_peak_memo
ry
integer
EC 算子在所有DN 上的最大内存峰值(MB)。
average_peak_me
mory
integer
EC 算子在所有DN 上的平均内存峰值(MB)。
ec_status
text
EC 作业的执行状态。
ec_execute_datan
ode
text
执行EC 作业的DN 名称。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
747
名称
类型
描述
ec_dsn
text
EC 作业所使用的DSN。
ec_username
text
EC 作业访问远端数据库实例的USERNAME(远端
数据库实例为SPARK 类型时该值为空)。
ec_query
text
EC 作业发送给远端数据库实例执行的语句。
ec_libodbc_type
text
EC 作业使用的unixODBC 驱动类型。