Hologres报错什么原因?ERROR: Total memory used by all existing queries exceeded memory limitation.
报错原因:数据量太大或者导入逻辑太复杂,导致超出了内存限制。 (说明:实例由多个节点组成,一个节点标准的内存上限是64G,节点内存会分为3部分,1/3计算,1/3缓存,1/3元数据。这里的报错是计算内存超了)
解决方案:
查询场景:
1、先对表执行一下analyze tablename;
2、对于复杂sql,先进行优化。
例如:● 1、将经常join的key设置为distribution_key。
● 2、count distinc多的sql可以换成 APPROX_COUNT_DISTINCT这个函数(原理:count distinct相当于在join了,多个就多个在join,耗费资源比较多。)写入场景:
排查步骤1:当导入query包含查询,但部分table没有analyze,或者analyze过,但数据又有更新导致不准确,导致查询优化器决策join order有误,会引起内存开销多高。
解决方法:对所有参与的内表、外表执行analyze tablename,更新表的统计元信息,可以帮助查询优化器生成更优的执行计划;
排查步骤2:当表的列数较多,单行数据量较大时,单次读取的数据量会更大,通过在sql前加以下参数来控制单词读取数据行数,可以有效减少OOM情况
set hg_experimental_query_batch_size = 1024;--默认为8192
insert into holo_table select from mc_table;
排查步骤3:降低导入的并发度,也会有效减少导入过程中的内存开销,并发度通过参数hg_experimental_foreign_table_executor_max_dop控制,默认为实例的Core数,可以在导入时设置更小的dop参数,降低导入的内存使用。
set hg_experimental_foreign_table_executor_max_dop = 8;
insert into holo_table select from mc_table;
排查步骤4:以上操作都做完了,还是导入不了,如果使用的是insert on conflict,排查是否外表重复数据太多,重复数据太多也会导致导入性能不好,可以现在是odps做一下去重,再导入。
排查步骤5:可以升级至1.1.24版本,新版本会对内存进行动态调整,后台会实时刷新当前内存水位,若是有空闲,则会分配更多内存给计算使用。
排查步骤6:以上步骤都做完了,需要扩容了!,此回答整理自钉群“实时数仓Hologres交流群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975