问题现象
做
8611
在线扩容时,后台作业并发较高时,集群节点出现使用
swap
现象,导致
SQL
执行性能下降。
原因分析
在后台进行日常业务作业情况下进行在线扩容,后台本身业务压力就比较大,加上
在线扩容,总业务量超出了系统承受范围。
解决方法
当日现场调低并发压力,并将复制表改为分布表,重新进行在线扩容未见
swap
问
题出现。
建议在线扩容控制后台业务压力,否则与扩容业务争抢资源严重,哪一个都跑不快。
代码中添加了一个控制参数:
_gbase_rep_pending_memory_size
此参数代表接收端接收缓存的上限,以
MB
为单位,这个值设得越大,则接收
端的压力越大,反之则发送端的压力越大,因此需要找到一个中间值,使发送
端和接收端的压力比较均衡,才能使效率更高。当前经验值是设为物理内存的
10%
。
参数
_gbase_rep_receive_buffer_size
只有通过修改
node
层的配置文件才可生
效
, set
和
set global
会报错,如下:
Variable '_gbase_rep_receive_buffer_size' is a read only variable
_gbase_rep_receive_buffer_size
默认设置为
20G ,
最小可设置为
5G,
无上限
,
默认单位为
MB
。
查看
_gbase_rep_receive_buffer_size
参数是否能控制内存占用情况,执行如下
命令:
gncli -uroot -e "show engine express status \G;" |egrep -i "total|reptask|applic
ation"
每隔
2s
记录一次
,
查看
total weight
大小,
Total weight
单位为字节。
优化了节点间数据传输的负载均衡的控制,能更好地避免出现使用
SWAP
的问题,
但是压力过大的情况下此问题还是会出现,因此还需要通过调整集群下发
SQL
的
并发数来彻底避免此问题。