GBase 8a
运维管理
文章
大表全表扫描引起OOM异常处理
发表于2025-07-25 17:42:1756次浏览0个评论
集群环境:
集群版本V8,操作系统CentOS7.6
问题描述:
某GBase 8a集群连续几天在个别节点出现gbased-oom异常,通过SQL日志,定位可疑SQL如下:
insert into tmp ds_02288_s2_001_bak select * from tmp_ds_02288_32_001 where right(trim(imsisdn), 1) = '0'
问题分析:
问题出现时段为上午时段业务高峰期,闲时重复执行SQL正常。
nmon日志显示7点30左右,有一个IO异常峰值,超过10000/sec,与上述语句运行时段吻合。
虽然系统并发任务数不高,但大部分为亿级以上大表的复杂关联聚合运算。
SQL中的源表tmp_ds_02288_32_001记录数较大,超过10亿。
初步判断,问题原因与扫描条件right(trim(msisdn),1)='0'中的字段使用了函数导致全表扫描,使用了较大IO及内存资源有关,从而导致oom异常。
改写测试,应用将right(trim(msisdn),1)='0'改写为trim(msisdn) like '%0' 或msisdn like '%0'(这个性能最好),没有再出现异常。
经验总结,扫描条件对字段尽量规避函数调用,尤其是对大表,可以利用集群的智能索引(规避全表扫描),从而降低内存及IO资源使用率,提升SQL性能同时降低oom异常几率。
评论
登录后才可以发表评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526