GreenPlum报错ERROR: Canceling query because of high VMEM usage.
现象
查询报错:ERROR: Canceling query because of high VMEM usage.
ERROR: Canceling query because of high VMEM usage. Used: 16368MB, available 1900MB, red zone: 17110MB (runaway_cleaner.c:202) (seg14 slice2 192.100.26.106:6002 pid=899) (runaway_cleaner.c:202) CONTEXT: SQL statement "refresh materialized view mv_ygz with data" PL/pgSQL function refresh_mv_ygz() line 3 at SQL statement
可能原因
1、在会话级别配置optimizer为off。若数据量很小,但查询SQL复杂,若启用optimizer,则往往会报这个错,所以,此时可以在SQL级别禁用该参数。
1 2 3 4 | set optimizer=off; -- 若是物化视图报错,则可以手动刷新1次物化视图 select refresh_mv_ygz(); |
参数optimizer表示运行SQL查询时启用或禁用GPORCA。 默认on。 如果禁用GPORCA,Greenplum数据库仅使用Postgres查询优化器。
GPORCA与Postgres查询优化器共存。 启用GPORCA后,Greenplum数据库会尽可能使用GPORCA为查询生成执行计划。 如果无法使用GPORCA,则使用Postgres查询优化器。
可以为数据库系统,单个数据库或会话或查询设置optimizer参数。
2、修改如下几个参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | gpconfig -s gp_vmem_protect_limit gpconfig -s max_statement_mem gpconfig -s statement_mem gpconfig -s runaway_detector_activation_percent -- 可以动态生效 gpconfig -c max_statement_mem -v 20384MB gpconfig -c statement_mem -v 1024MB gpstop -u -- 需要重启数据库 gpconfig -c gp_vmem_protect_limit -v 25600MB gpconfig -c runaway_detector_activation_percent -m 95 -v 95 gpstop -M fast -ra |
参考: https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/27985e397e5e819a.md#brbcii
3、优化SQL语句