问题描述
现在有个租户内存占用比例持续上升,具体表现如下:
-
总内存是32G,ocp-express观察从40%持续上升至90%左右;
-
统计内存实际占用不超过40%,具体情况如下:
-
统计每个模块占用情况,发现三个zone下KvstorCacheMb占用都非常高,最高能达到19G,但是持续观察一天,发现这个模块的使用率为0%
4.观察Memstore发现使用率接近100%,但是远远低于总内存的50%(默认值)
5.执行如下SQL会报No memory or reach tenant memory limit:
SELECT
/+ PARALLEL(a 64)/
count(1) as runCount,
sum(travel_time) as runTimes,
sum(travel_mileage) as runDis,
IFNULL(sum(a.travel_mileage_d),0) as travelMileageD
FROM car_travel a
LEFT JOIN mon_truck tr ON a.car_id = tr.truck_id
LEFT JOIN mon_agent ag ON tr.agent_id = ag.agent_id
left join sys_dic pColor on pColor.dic_type = ‘carSubColor’ and pColor.dic_label=tr.plate_color
WHERE 1=1
and a.calc_date >= ‘2025-06-01’
and a.calc_date <= ‘2025-07-01’
GROUP BY a.car_id
ORDER BY ag.agent_name,runCount DESC
但是按如下任意一种方式调整sql就不报错了:
(1)并行度PARALLEL调整成16
(2)减少统计函数,比如去掉IFNULL(sum(a.travel_mileage_d),0) as travelMileageD:
现在有三点疑问:
1.ocp上显示的内存占用不是实际内存占用比例?而是hold内存?
2.KvstorCacheMb为什么初始化就占用这么大内存?明明是空置的为什么不释放内存?
3.Memstore使用率远低于上限,为什么不继续扩展?
4.统计函数使用的是那个模块的内存?为什么无法自动扩展内存?并行度高为什么内存占用就高呢?
相关信息:
1.oceanbase版本:4.3.5.1
2.租户相关的几个配置:
_memstore_limit_percentage与 memstore_limit_percentage都是默认值
租户内存32G