返回首页

gbase数据、南大通用产品文档:GBase8c系统调优指南

更新日期:2024年09月11日

系统调优是指进行操作系统级以及数据库系统级的调优,更充分地利用机器的CPU、
内存、I/O 和网络资源,避免资源冲突,提升整个系统查询的吞吐量。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
522

BETWEEN_JOIN:指连接条件类似于“t1.A BETWEEN t2.B AND t2.C”的JOIN,
包括“t1.A > t2.B AND t1.A < t2.C”这样的写法,简记为“A BETWEEN B AND C”。
如下以t1.A BETWEEN t2.B AND t2.C 进行说明。
1.
优化原理:
将(B,C)理解为一条条线段,
“A BETWEEN B AND C”即为找出与A 相交的所
有线段。
图5- 9 “A BETWEEN B AND C”的处理逻辑如下图所示
可以先将(B[key], C)排序,如上图所示,然后扫描t1 表,对于任意value A,
用二分法找到对应的位置pos,
pos 满足“B(pos) <= A < B(pos + 1)”,
如上图中
为2,对于该pos 及前面的所有数据,再进行“A between B and C”的check,
即需要check(0,1,2)。
为了提升check 的性能,在sort buffer 中加入index,如下图所示,
index 为指
向与当前区间有重叠的上一个区间的位置(图中向上的箭头)。找到对应的
位置pos 后,只需check 由index 组成的list 即可。例如图中的情况,对应的
A 只需check(2,0)即可。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1331
图5- 10
Index 示意图如下:
2.
优化特性:
利用智能索引进行过滤的过程如下图所示,
如果阴影所示部分与(A,B)所构成
的所有区间都无交集时,则可以跳过当前DC,否则不可以跳过。方法为在
扫描A 列时,对当前A 列DC 做如下检查:

找到A_min 对应的位置pos;

如果A_max < B(pos+1),则继续,否则不可跳过当前DC,结束;

沿pos 的index 对A_min 做检查,如果未发现满足A_min between B and
C 的线段,则可以跳过当前DC,否则不可跳过当前DC。
图5- 11
智能索引过滤示意图如下:
当(B,C)所组成的区间段非常稀疏,
同时A 又是有序列时,
A 列的智能索
引将发挥重要作用。
3.
优化限制:
只有在t2 表非常小时(相对于t1 表),使用该优化性能非常好,当t2 表较
大时(如达到t1 表的1/2),性能较差,建议走原来逻辑,关闭该参数。
4.
优化参数:
gbase_optimizer_between_join=0(关闭)/1(开启-默认)/2(开启,并且含等值条件
的连接也优先使用between join)。

ifx_lo_unlock() 函数允许您解锁由 ifx_lo_lock() 锁定了的智能大对象中的一些字节。


语法
mint ifx_lo_unlock(lofd, offset, whence, range)
mint lofd;
int8 *offset;
mint whence;

int8 *range;
LO_fd
表示要在其中解锁一些字节的智能大对象的 LO 文件描述符。
offset

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 807 -
指向在智能大对象之内指定开始解锁处的偏移量的 8 字节整数(INT8)的指针。
whence
指定从哪一点计算偏移量的整数常量:智能大对象的开头、智能大对象之内的当前位
置,或智能大对象的末尾。
range
指向指定要解锁的字节数的 8 位整数(INT8)的指针。
用法

对于由 LO_fd 指定的智能大对象,
ifx_lo_unlock() 函数解锁由 nbytes 指定的字节数,
从由 offset 和 whence 指定的偏移量处开始。在调用 ifx_lo_unlock() 之前,您必须通过调
用 ifx_lo_create() 来创建新的智能大对象,
或通过调用 ifx_lo_open() 来打开现有的智能大
对象,来取得有效的 LO 文件描述符。

返回代码
0
函数成功。
< 0
函数不成功。返回值为 sqlcode,其为 GBase 8s 错误消息的数目。