返回首页

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

更新日期:2024年09月11日

取值:[0|1]
默认值:1
说明:严格group by 机制检查开关。默认打开。
控制集群构造的查询计划,是否一定产生符合严格模式的语句下发给节点执行。
严格模式指
“Select 中出现的非聚合函数表达式,
必须等于或包含Group By 子句
中的表达式”。
例如,如下语句不符合严格模式,因为b 没有出现在Group By 子句中。
Select count(*), a, b from t1 group by a;
例如,如下语句符合严格模式。因为a + 1 + 2 的子表达式a + 1 出现在Group by
中,而表达式b + 1 也出现在Group by 中。
Select a+1+2, b+1 from t1 group by a+1, b+1;
修改方式:
可使用set 语句修改值也可在配置文件中修改值。
适用于session、
global
范围均可。

在包含至少一台共享磁盘(SD)辅助服务器的高可用性集群中,当发生流量控制时指定。
onconfig.std 值
SDS_FLOW_CONTROL 0

0 = 当当前日志位置与最近响应日志之间的差异超过日志缓冲区大小的 12 倍时,激活流
量控制。
-1 = 禁用流量控制。禁用流量控制可能导致日志文件的交换和数据丢失。

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

start_value,end_value = start_value 和 end_value 确定当前日志位置与最后响应日志
页之间的滞后量。start_value 必须大于 end_value。这些值必须包括下列单位之一:
l K(KB)
l M(MB)
l G(GB)
例如,设置 SDS_FLOW_CONTROL
128M,100M,当日志之间的滞后为 128
MB 时启动流量控制,
当滞后降至 100 MB 时停止流量控制。
生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
用法
流量控制提供一种限制主服务器上日志活动的方法,以便集群中的 SD 辅助服务器不在处
理事务上落后太远。当启用流量控制时,且当当前日志位置与最后响应日志页之间日志大
小的差异超过 start_value 时,
主服务器上的日志活动受到限制。
当流量控制是活动的时,
连接到主服务器的用户可感觉到响应时间变慢。
当日志之间的滞后大于 start_value 时启
动流量控制,当日志滞后降至 stop_value 时停止流量控制。
仅在主服务器上设置 SDS_FLOW_CONTROL 配置参数。集群中的所有 SD 辅助服务器都受到
SDS_FLOW_CONTROL 配置参数的影响。日志通常按照被接收的顺序发送到 SD 辅助服务器。

#ifdef WIN32
# include
#else
# include
#endif
#include
#include
#include
#include

#define isSuc(result) ((result) == SQL_SUCCESS || (result) ==
SQL_SUCCESS_WITH_INFO)
char* conn_str = "DRIVER=GBase 8a ODBC 8.3
Driver;UID=gbase;PWD=gbase20110531;"





"SERVER={192.168.7.172;192.168.7.173;192.168.7.174};"

GBase 8a 程序员手册ODBC 篇


- 58 -

南大通用数据技术股份有限公司





"CONNECTION_BALANCE=1;GCLUSTER_ID=gcluster;"





"CHECK_INTERVAL=90;";
int main(void)
{
short sret;
void* henv;
void* hdbc;
char message[512];
char hostinfo[100];
int i = 0;

sret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
if(!isSuc(sret))
{
SQLGetDiagRec(SQL_HANDLE_ENV, henv, 1, NULL, NULL,
(SQLCHAR*)message, 1023, NULL);
printf("%s\n", message);
return -1;
}
sret =
SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
if(!isSuc(sret))
{
SQLGetDiagRec(SQL_HANDLE_ENV, henv, 1, NULL, NULL,
(SQLCHAR*)message, 1023, NULL);
printf("%s\n", message);
return -1;
}
sret = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
if(!isSuc(sret))
{
SQLGetDiagRec(SQL_HANDLE_ENV, henv, 1, NULL, NULL,
(SQLCHAR*)message, 1023, NULL);
printf("%s\n", message);
return -1;
}

GBase 8a 程序员手册ODBC 篇
南大通用数据技术股份有限公司

- 59 -

for (i=0; i<6; i++)
{
sret = SQLDriverConnect(hdbc, NULL,(SQLCHAR*)conn_str,
SQL_NTS,NULL, 0, NULL, 0);
if(!isSuc(sret))
{
SQLGetDiagRec(SQL_HANDLE_DBC, hdbc, 1, NULL, NULL,
(SQLCHAR*)message, 1023, NULL);
printf("%s\n", message);
return -1;
}

SQLGetInfo(hdbc, SQL_SERVER_NAME, hostinfo, 200, NULL);

printf("使用GBase 8a ODBC 高可用负载均衡连接GBase 集群节
点:%s.\n", hostinfo);

sret = SQLDisconnect(hdbc);
if(!isSuc(sret))
{
SQLGetDiagRec(SQL_HANDLE_DBC, hdbc, 1, NULL, NULL,
(SQLCHAR*)message, 1023, NULL);
printf("%s\n", message);
return -1;
}
}
sret = SQLFreeConnect(hdbc);
if(!isSuc(sret))
{
SQLGetDiagRec(SQL_HANDLE_DBC, hdbc, 1, NULL, NULL,
(SQLCHAR*)message, 1023, NULL);
printf("%s\n", message);
return -1;
}
sret = SQLFreeEnv(henv);
if(!isSuc(sret))

GBase 8a 程序员手册ODBC 篇


- 60 -

南大通用数据技术股份有限公司
{
SQLGetDiagRec(SQL_HANDLE_ENV, henv, 1, NULL, NULL,
(SQLCHAR*)message, 1023, NULL);
printf("%s\n", message);
return -1;
}
return 0;
}