返回首页

gbase数据、南大通用产品文档:GBase8a算子buffer

更新日期:2024年09月11日

算子buffer(session): 从gbase_heap_large 堆上分配。
算子buffer 均为session 级别,即如果设置gbase_buffer_result=1G,且任
务数为30,则在执行过程中,30 任务总共占用的gbase_buffer_result 就为1G x
30 = 30G,对于一般机器来说已经算很大了,这还不算其他的算子buffer。所以
如果在高并发环境中将某一个算子buffer 设置很大的话,很有可能就会出现内存
不足无法分配的情况。
gbase_buffer_distgrby
用于保存distinct 操作的中间结果;
gbase_buffer_hgrby
用于保存hash group by 操作的中间结果;
gbase_buffer_hj
用于保存hash join 操作的中间结果;
gbase_buffer_insert
用于保存insert values 的中间结果;
gbase_buffer_result
用于保存物化的中间结果;

GBase 8a MPP Cluster 最佳实践
4 参数调优
文档版本(2022-02-11)
南大通用数据技术股份有限公司
43
gbase_buffer_rowset
用于保存join 的行号;
gbase_buffer_sj
用于保存sort merge join 的中间结果,当join 条件是a>=b 或者a<=b 时,可
能会使用sort merge join;
gbase_buffer_sort
用于保存sort 操作的中间结果;
综述说明
算子buffer 的设置原则:
一般情况下(非高并发场景),根据系统内存大小,算子buffer 可以按照如下方
法设置:
gbase_buffer_hgrby 和gbase_buffer_hj 最大不超过4G;
gbase_buffer_result 最大不超过2G;
gbase_buffer_rowset 最大不超过1G;
其他算子使用系统估算即可。
如果在高并发场景下,
则不需要设置过大的算子buffer,
一般以系统自动评估为准。
但如果并发数过大,不排除需要人为将算子buffer 设置更小的情况。具体标准参
考上面提到的“算子buffer 的特点”,即并发数x 总算子buffer 大小不超过
gbase_heap_large 为宜,但最大也不能超过系统总内存大小。
修改算子buffer 的其它场景:
在进行poc 时,如果某条sql 由于某个算子执行过慢(瓶颈点可参考单机trace),
可以适当调大与之对应算子buffer。如根据trace 发现join 较慢,可以适当调大
gbase_buffer_hj 的值。
但是需要注意,
调整该值时必须不能影响其他sql 的执行,
且必须是现场允许修改系统参数时才可以。如整个测试只允许在开始时设置参数,
开始测试后就不允许再修改,如果开始时就把算子buffer 设置的很大,而后面又
有高并发测试,就很容易会出问题。

GBase 8a MPP Cluster 最佳实践
4 参数调优
文档版本(2022-02-11)
南大通用数据技术股份有限公司
44

CACHE_ACCESS_INFO
select/insert/update 操作对内存的访问情况,delete/show 操作表中值不改变,gbased
重启表中值归零。
表 5-60 具体信息如下:
ACCESS_TIMES
从gbased 启动后访问内存的总次数
HIT_TIMES
命中的总次数
MISS_TIMES
未命中的总次数
HIT_RATE
命中率

语法
SUBDATE(date,INTERVAL expr type)
SUBDATE(expr,days)
函数说明
当调用的第二个参数带有INTERVAL 时,
SUBDATE()等同于DATE_SUB()。
具体
信息请参见“DATE_ADD(),DATE_SUB()”。
expr 是一个date 或datetime 表达式,days 用于减expr 的天数。
示例
示例1:使用DATE_SUB 函数,将“2020-01-02”减去31 天。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
810
gbase> SELECT DATE_SUB('2020-01-02', INTERVAL 31 DAY) FROM
dual;
+-----------------------------------------+
| DATE_SUB('2020-01-02', INTERVAL 31 DAY) |
+-----------------------------------------+
| 2019-12-02 00:00:00
|
+-----------------------------------------+
1 row in set
示例2:使用SUBDATE 函数,将“2020-01-02”减去31 天。
gbase> SELECT SUBDATE('2020-01-02', INTERVAL 31 DAY) FROM dual;
+----------------------------------------+
| SUBDATE('2020-01-02', INTERVAL 31 DAY) |
+----------------------------------------+
| 2019-12-02 00:00:00
|
+----------------------------------------+
1 row in set
示例3:使用SUBDATE 函数,将“2020-01-02 12:00:00”减去31 天。
gbase> SELECT SUBDATE('2020-01-02 12:00:00', 31) FROM dual;
+------------------------------------+
| SUBDATE('2020-01-02 12:00:00', 31) |
+------------------------------------+
| 2019-12-02 12:00:00
|
+------------------------------------+
1 row in set