From 057db68bc653d30f94e3200e937f8babc551a957 Mon Sep 17 00:00:00 2001 From: --author=cc_db_dev Date: Sun, 23 Apr 2023 11:46:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DGetTupleForTrigger=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E7=9A=84=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GetTupleForTrigger内存从当前上下文申请而来,在update带序列的场景 会等到ModifyTable算子结束才会释放,内存持续占用,在内存小的环境可能 会导致内存不可用,现改为从pertuple_memorycontext中申请 --- src/gausskernel/runtime/executor/nodeModifyTable.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gausskernel/runtime/executor/nodeModifyTable.cpp b/src/gausskernel/runtime/executor/nodeModifyTable.cpp index e719b63217..4a43dac719 100644 --- a/src/gausskernel/runtime/executor/nodeModifyTable.cpp +++ b/src/gausskernel/runtime/executor/nodeModifyTable.cpp @@ -488,7 +488,11 @@ bool ExecComputeStoredUpdateExpr(ResultRelInfo *resultRelInfo, EState *estate, T uint32 updated_colnum_resno; Bitmapset* updatedCols = GetUpdatedColumns(resultRelInfo, estate); + /* use pertuple memory for trigger tuple */ + oldContext = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); HeapTuple oldtup = GetTupleForTrigger(estate, NULL, resultRelInfo, oldPartitionOid, bucketid, otid, LockTupleShared, NULL); + MemoryContextSwitchTo(oldContext); + RecoredUpdateExpr(resultRelInfo, estate, cmdtype); /* -- Gitee