From 45653aab3f2fd669cd9c711d077bfd0a9a7e310a Mon Sep 17 00:00:00 2001 From: zhangstar333 <2561612514@qq.com> Date: Mon, 19 Aug 2024 22:11:16 +0800 Subject: [PATCH 1/3] [Bug](column) fix append_data_by_selector_impl reserve too mush useless memory --- be/src/vec/columns/column_impl.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/be/src/vec/columns/column_impl.h b/be/src/vec/columns/column_impl.h index f0a157f41972f3..e5a2fba7dddbf2 100644 --- a/be/src/vec/columns/column_impl.h +++ b/be/src/vec/columns/column_impl.h @@ -42,8 +42,8 @@ void IColumn::append_data_by_selector_impl(MutablePtr& res, const Selector& sele "Size of selector: {} is larger than size of column: {}", selector.size(), num_rows); } - - res->reserve(num_rows); + DCHECK_GE(end, begin); + res->reserve(end - begin); for (size_t i = begin; i < end; ++i) { static_cast(*res).insert_from(*this, selector[i]); From 429911f9d64e08c6eed89eba234a237c748636fa Mon Sep 17 00:00:00 2001 From: zhangstar333 <2561612514@qq.com> Date: Tue, 20 Aug 2024 09:57:18 +0800 Subject: [PATCH 2/3] update --- be/src/vec/columns/column_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/be/src/vec/columns/column_impl.h b/be/src/vec/columns/column_impl.h index e5a2fba7dddbf2..566dde5ef00d40 100644 --- a/be/src/vec/columns/column_impl.h +++ b/be/src/vec/columns/column_impl.h @@ -43,7 +43,7 @@ void IColumn::append_data_by_selector_impl(MutablePtr& res, const Selector& sele selector.size(), num_rows); } DCHECK_GE(end, begin); - res->reserve(end - begin); + res->reserve(res->size() + (end - begin)); for (size_t i = begin; i < end; ++i) { static_cast(*res).insert_from(*this, selector[i]); From 8a2e49bebacf5a88bfa2cdc1b7242e769553cf5a Mon Sep 17 00:00:00 2001 From: zhangstar333 <2561612514@qq.com> Date: Tue, 20 Aug 2024 10:05:28 +0800 Subject: [PATCH 3/3] update2 --- be/src/vec/columns/column_impl.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/be/src/vec/columns/column_impl.h b/be/src/vec/columns/column_impl.h index 566dde5ef00d40..470825851e1e9d 100644 --- a/be/src/vec/columns/column_impl.h +++ b/be/src/vec/columns/column_impl.h @@ -43,6 +43,9 @@ void IColumn::append_data_by_selector_impl(MutablePtr& res, const Selector& sele selector.size(), num_rows); } DCHECK_GE(end, begin); + // here wants insert some value from this column, and the nums is (end - begin) + // and many be this column num_rows is 4096, but only need insert num is (1 - 0) = 1 + // so can't call res->reserve(num_rows), it's will be too mush waste memory res->reserve(res->size() + (end - begin)); for (size_t i = begin; i < end; ++i) {