After upgrading to Greenplum 6.30.0 or later, multi-statement batch queries may fail due to memory starvation leading to query performance degradation.
Error Observed:
"ERROR","XX000","insufficient memory reserved for statement (execHHashagg.c:1400)"
GPDB versions 6.30.0 through 6.33.4
When a multi-statement command is submitted (for example, TRUNCATE table1; COMMIT; INSERT INTO table1...), the database only parses the command and assigns a resource group once at the very beginning.
If the batch contains a mid-batch COMMIT, that commit successfully finishes the transaction but also releases the resource group. When the next statement in the batch (the INSERT) starts, a new transaction opens, but the database does not re-check or re-assign a resource group.
As a result, the subsequent statement runs without a resource group and falls back to a hardcoded 1 MB bypass memory limit instead of using the group's actual memory configuration. This causes the statement to starve for memory and fail. Raising settings like MEMORY_LIMIT or statement_mem will not work because the resource group's limits are ignored for that unassigned statement.
This issue will be permanently fixed in 6.33.5, which is currently pending release.
Workaround:
1. Use the JDBC Driver: JDBC is unaffected by this issue, this bypasses the issue entirely. Use this driver if the application environment allows it.
OR
2.Remove the Mid-Batch COMMIT: Delete the COMMIT statement from the multi-statement batch. This requires the smallest code change. Readers will safely block for the insert instead of observing an empty table mid-transaction.