暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Gbase8a数据库性能优化

原创 2022-03-31
1086

算子方面提升下:

      算子 buffer 均为 session 级别,即如果设置 gbase_buffer_result=1G,且并发数

为 30,则在执行并发的过程中,30 并发总共占用的 gbase_buffer_result 就为

1G*30 = 30G,而且是在不计算其他的算子 buffer 的情况下。

所以如果在高并发环境中将某一个算子 buffer 设置很大的话,很有可能就会

出现内存不足无法分配的情况。


常用的 buffer 如下:

gbase_buffer_distgrby:用于保存 distinct 操作的中间结果;

gbase_buffer_hgrby:用于保存 shash group by 操作的中间结果;

gbase_buffer_hj:用于保存 hash join 操作的中间结果;

gbase_buffer_insert:用于保存 insert values 的中间结果;

gbase_buffer_result:用于保存物化的中间结果;

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 大小不超过 gbase_heap_large 为

宜,但最大也不能超过系统总内存大小。


修改算子 buffer 的其它场景:

如果某条 sql 由于某个算子执行过慢(瓶颈点可参考单机 trace),可以适当

调大与之对应算子 buffer。例如根据 trace 发现 join 较慢,可以适当调大

gbase_buffer_hj 的值。但是需要注意,调整该值时必须不能影响其他 SQL 的

执行。 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论