返回首页

gbase数据、南大通用产品文档:GBase8s优化消息传输

更新日期:2024年09月11日

GBase 8s ESQL/C 提供名为优化消息传输的功能,它可以让大多数 GBase 8s ESQL/C
语句使数据库服务器的信息传输最小化。
GBase 8s ESQL/C 通过将消息链接在一起,甚至消除一些小的消息数据包来实现优化
的消息传输。当优化的消息传输功能被启用时,GBase 8s ESQL/C 期望 SQL 语句将会成
功。因此,GBase 8s ESQL/C 在某些情况下消除了数据库服务器的确认消息。
当启用 OPTMSG 功能时,您的 GBase 8s ESQL/C 应用程序无法对任何链接的语句
执行错误处理。如果您不确定特定语句是否可能生成错误,请包括错误处理代码,并且不
要为该语句启用消息链接。
优化消息传输的限制
GBase 8s ESQL/C 不会链接以下 SQL 语句,即使您启用了优化消息传输:
COMMIT WORK
DESCRIBE
EXECUTE
FETCH
FLUSH
PREPARE
PUT
ROLLBACK WORK
SELECT INTO (singleton SELECT)
当 GBase 8s ESQL/C 到达以上任一语句时,
它将消息刷新到数据库服务器。
GBase 8s
ESQL/C 然后继续后续的 SQL 语句的消息链接。只有需要网络流量的 SQL 语句才能使
GBase 8s ESQL/C 刷新消息。
不需要网络流量的 SQL 语句(如 DECLARE 语句)不会导致 GBase 8s ESQL/C 将
消息队列发送到数据库服务器。
启用优化消息传输
要启用优化消息传输,或消息链接,您必须在客户端环境中设置以下变量:

在运行时设置 OPTMSG 环境变量,以使所有的合格 SQL 语句启用优化消息传输。
在 GBase 8s ESQL/C 应用程序中设置 OptMsg 全局变量,以控制哪些 SQL 语句使

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 352 -
用消息链接。
设置 OPTMSG 环境变量
OPTMSG 环境变量为应用程序中的所有 SQL 语句启用优化消息传输。

可以将以下值分配给 OPTMSG 环境变量:
1
该值启用优化消息传输, 实现后续任何连接的功能。
0
该值禁用优化消息传输。(缺省)

OPTMSG 环境变量的缺省值为 0。将 OPTMSG 设置为 0 来将禁用显示消息。您可
能需要禁用针对需要即时回复或用于调试目的的语句的优化消息传输。

要启用优化消息传输,您必须在启动 GBase 8s ESQL/C 应用程序前设置 OPTMSG 。


在 UNIX(TM) 操作系统中,可以使用 putenv() 系统调用在应用程序中设置 OPTMSG
(只要您的系统支持 putenv() 函数)

例如,
以下对 putenv() 的调用,
启用优化消息传输:
putenv("OPTMSG=1");

在 Windows(TM) 环境中,可以使用 ifx_putenv() 函数在应用程序中设置 OPTMSG。
例如,以下 ifx_putenv()调用,启用优化消息传输:
ifx_putenv("OPTMSG=1");

当您在应用程序中设置 OPTMSG 时,可以激活或停用每个连接或每个线程中优化的
消息传输。要启用优化消息传输,必须在建立连接前设置 OPTMSG。
设置 OptMsg 全局变量
OptMsg 全局变量在 GBase 8s ESQL/Csqlhdr.h 头文件中定义。

当将 OPTMSG 环境变量设置为 1 后,您必须设置 OptMsg 全局变量来指定消息链
接是否对每个后续 SQL 语句生效。您可以将以下值分配给 OptMsg:
1
该值对每一条后续 SQL 语句启用消息链接。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 353 -
0
该值对每一条后续 SQL 语句禁用消息链接。

将 OPTMSG 环境变量设置为 1,您仍然必须将 OptMsg 全局变量设置为 1 来启用
消息链接。如果您从程序中忽略以下语句,则 GBase 8s ESQL/C 不会执行消息链接:
OptMsg = 1;

当您已经将 OPTMSG 环境变量设置为 1 时,您可能会出于以下原因禁用链接:
某些 SQL 语句需要立即回复。

限制 SQL 语句完成后重新启用 OPTMSG 功能。

出于调试目的
当您尝试确定每个 SQL 语句的响应方式时,可以禁用 OPTMSG 功能。

在程序中的最后一个 SQL 语句执行之前,确保数据库服务器在应用程序退出之前处
理所有消息。如果启用 OPTMSG,则该消息将排队等待数据库服务器,但不会发送进行处
理。

要避免意外链接,
请在需要的 SQL 语句之后立即重置 OptMsg 全局变量。
以下代码
片段为 DELETE 语句启用消息链接:
OptMsg = 1;
EXEC SQL delete from customer;
OptMsg = 0;
EXEC SQL create index ix1 on customer (zipcode);

此示例启用消息链接因为 DELETE 语句的执行不可能失效。因此,它可以安全地链
接到下一个 SQL 语句。GBase 8s ESQL/C 延迟发送 DELETE 语句的信息。该示例在
DELETE 语句之后禁用消息链接,
以使 GBase 8s ESQL/C 刷新下一个 SQL 语句执行时已
排队的所有消息。通过禁用 DELETE 之后的消息链接,代码片段避免了意外的消息链接。
当发生意外的链接时,可能很难确定哪些链接的语句失败。

在 CREATE INDEX 语句中,
GBase 8s ESQL/C 将 DELETE 和 CREATE INDEX 语
句发送给数据库服务器。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 354 -
使用优化消息传输处理错误
当启用 OPTMSG 功能时,您的 GBase 8s ESQL/C 应用程序无法对任何链接的语句
执行错误处理。如果您不确定特定语句是否可能生成错误,请包括错误处理代码,并且不
要为该语句启用消息链接。

当在链接的语句中发生错误时,数据库服务器停止执行。此错误之后的任何 SQL 语
句都不会执行。例如,以下代码旨在链接五个 INSERT 语句(该片段假设 OPTMSG 环境
变量设置为 1):
EXEC SQL create table tab1 (col1 INTEGER);

/* enable message chaining */
OptMsg = 1;

/* these two INSERT statements execute successfully */
EXEC SQL insert into tab1 values (1);
EXEC SQL insert into tab1 values (2);

/* this INSERT statement generates an error because the data
* in the VALUES clause is not compatible with the column type */
EXEC SQL insert into tab1 values ('a');

/* these two INSERT statements never execute */
EXEC SQL insert into tab1 values (3);
EXEC SQL insert into tab1 values (4);

/* disable message chaining */
OptMsg = 0;

/* update one of the tab1 rows */
EXEC SQL update tab1 set col1 = 5 where col1 = 2;
if ( SQLCODE < 0 )
?


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 355 -
在此代码片段中,GBase 8s ESQL/C 在到达 UPDATE 语句时刷新消息队列。将五个
INSERT 语句和 UPDATE 语句发送到数据库服务器执行。
因为第三个 INSERT 语句发生
错误,所以数据库服务器不执行剩余的 INSERT 语句和 UPDATE 语句。UPDATE 语句
(它是链接语句中的最后一个语句)从失败的 INSERT 语句返回错误。tab1 表包含 col1
值为 1 和 2 的行。

取值:[0|1]
默认值:0
说明:提前把可以计算的表达式常量替换成常量。默认关闭。
修改方式:
可使用set 语句修改值也可在配置文件中修改值。
适用于session、
global
范围均可。

步骤3 配置listen_addresses 参数,允许客户端地址监听。
此参数用于配置TCP-IP 允许监听的地址。
(1)
首先,查看数据库目前的listen_addresses 配置。

GBase 8c V5 安装部署手册(分布式)
南大通用数据技术股份有限公司
32
gs_guc check -Z gtm/coordinator/datanode -N all -I all -c "listen_addresses"
(2)
若目前listen_addresses 参数值中没有客户端IP,则需执行以下命令修改参数值。
gs_guc reload -Z gtm/coordinator/datanode -N all -I all -c
"listen_addresses='localhost,……,client_host'"
建议直接设置为*,表示允许任意IP 访问。也可修改添加固定IP,但需保持同DN 组、
同类型节点参数值一致。多个配置项之间用英文逗号分隔。
例如,将listen_addresses 参数设置为“*”

[gbase@gbase8c ~]$ gs_guc reload -Z gtm -N all -I all -c "listen_addresses=*"
[gbase@gbase8c ~]$ gs_guc reload -Z coordinator -N all -I all -c
"listen_addresses=*"
[gbase@gbase8c ~]$ gs_guc reload -Z datanode -N all -I all -c "listen_addresses=*"
步骤4 配置password_encryption_type 参数值为1。
此参数用于配置密码加密方式。

参数设置为0 时,表示采用md5 方式对密码加密。

参数设置为1 时,表示采用sha256 方式对密码加密,兼容MD5 用户认证方式。

参数设置为2 时,表示采用sha256 方式对密码加密,为默认配置,不兼容MD5 方式。
(1)
登录数据库,查看数据库目前的password_encryption_type 配置。
[gbase@gbase8c ~]$ gsql -d postgres -p 5432
gsql=# show password_encryption_type;
(2)
若值不为1,则需执行以下命令修改参数值。
gs_guc reload -Z gtm/coordinator/datanode -N all -I all -c
"password_encryption_type=1"
例如:
[gbase@gbase8c ~]$ gs_guc set -Z gtm -N all -I all -c "password_encryption_type=1"
[gbase@gbase8c ~]$ gs_guc set -Z coordinator -N all -I all -c
"password_encryption_type=1"
[gbase@gbase8c ~]$ gs_guc set -Z datanode -N all -I all -c
"password_encryption_type=1"
步骤5 重启GBase 8c,执行命令参见5.6 启动/停止数据库。

GBase 8c V5 安装部署手册(分布式)
南大通用数据技术股份有限公司
33
----结束