返回首页

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

更新日期:2024年09月11日

903M
1% /run
tmpfs
tmpfs
912M
0
912M
0%
/sys/fs/cgroup
/dev/sda1
xfs
1014M
173M
842M
18% /boot
tmpfs
tmpfs
183M

数据库并发队列参数调优
数据库提供两种手段进行并发队列的控制,全局并发队列和局部并发队列。
全局并发队列
全局并发队列采用GUC 参数max_active_statements 控制数据库主节点上运行并发执行
的作业数量。采用全局并发队列机制将控制所有普通用户的执行作业,不区分复杂度,
即执
行语句都将作为一个执行单元,
当并发执行的作业数量达到此参数阈值时,
将进入队列等待。
对于管理员执行的作业,不走全局并发控制逻辑。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
526
设置该GUC 参数数值时,需要考虑系统的承受能力,主要关注内存的使用情况及IO
的使用情况,综合判断。若普通用户关联资源池,并且资源池中的优先级比例不同,全局并
发队列在数据库内部将使用两维队列,
即优先级高低排队和同一优先级进行排队。
在唤醒时,
将优先唤醒高优先级队列的作业。

在事务类大并发业务场景下,参数max_active_statements 建议设置为-1,
即不限制全局并发数。

在分析类查询的场景下,参数max_active_statements 的值设置为CPU 的
核数除以数据库节点个数,一般可以设置5~8 个。
局部并发队列
采用资源池局部并发控制机制的目的是控制在数据库主节点上同一资源池内的并发作
业数量。局部并发控制机制根据执行作业的cost,控制复杂查询的并发作业数量。
参数parctl_min_cost 数值用于判断执行作业是否是复杂作业。

dectoint() 函数将 decimal 类型数值转换为 C int 类型数值。
语法

mint dectoint(dec_val, int_val)
dec_t *dec_val;
mint *int_val;
dec_val
指向 dectoint() 将其值转换为 mint 类型值的 decimal 结构的指针。
int_val
指向 dectoint() 放置转换的结果处的 mint 值的指针。

用法
dectoint() 库函数将 decimal 值转换为 C 整数。该 C 整数的大小依赖于您正在使用
的计算机的硬件和操作系统。因此,dectoint() 函数将整数值等同于 SQL SMALLINT 数
据类型。SMALLINT 有效范围在 32767 与 -32767 之间。要将较大的 decimal 转换为较
大的整数,请使用 dectoint() 库函数。

返回代码

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

0
转换成功。
<0
转换失败。
-1200
decimal 类型数值的大小大于 32767。

示例

demo 目录中的文件 dectoint.ec 包含下列样例程序。
/*
* dectoint.ec *

The following program converts two DECIMAL numbers to integers and displays the result
of each conversion.
*/

#include

EXEC SQL include decimal;

char string1 [] = "32767";
char string2 [] = "32768";

main()
{
mint x;
mint n = 0;
dec_t num;

printf("DECTOINT Sample ESQL Program running.\n\n)";

printf("String 1 = %s\n", string1);

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

if (x = deccvasc(string1,strlen(string1), #))
{
printf(" Error %d in converting string1 to decimal\n", x);
exit(1);
}
if (x = dectoint(#, &n))
printf(" Error %d in converting decimal to int\n", x);
else
printf(" Result = %d\n", n);

printf("\nString 2 = %s\n", string2);
if (x = deccvasc(string2, strlen(string2), #))
{
printf(" Error %d in converting string2 to decimal\n", x);
exit(1);
}
if (x = dectoint(#, &n))
printf(" Error %d in converting decimal to int\n", x);
else
printf(" Result = %d\n", n);

printf("\nDECTOINT Sample Program over.\n\n");
exit(0);
}
输出

DECTOINT Sample ESQL Program running.

String 1 = 32767
Result = 32767

String 2 = 32768
Error -1200 in converting decimal to int

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


DECTOINT Sample Program over.