From 9e56615f65b36cef21f23b4691533b11ea8db9e6 Mon Sep 17 00:00:00 2001 From: SeaRise Date: Thu, 19 Oct 2023 17:12:10 +0800 Subject: [PATCH 1/4] fix first --- executor/builder.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/executor/builder.go b/executor/builder.go index 35db57b35bb02..4ed4988dd7c92 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -4793,7 +4793,7 @@ func buildKvRangesForIndexJoin(ctx sessionctx.Context, tableID, indexID int64, l memTracker.Consume(int64(2 * cap(kvRanges[0].StartKey) * len(kvRanges))) } if len(tmpDatumRanges) != 0 && memTracker != nil { - memTracker.Consume(2 * int64(len(tmpDatumRanges)) * types.EstimatedMemUsage(tmpDatumRanges[0].LowVal, len(tmpDatumRanges))) + memTracker.Consume(2 * types.EstimatedMemUsage(tmpDatumRanges[0].LowVal, len(tmpDatumRanges))) } if cwc == nil { slices.SortFunc(kvRanges, func(i, j kv.KeyRange) bool { From 287a3097483cd231ee639bddfa46f544f541480f Mon Sep 17 00:00:00 2001 From: SeaRise Date: Fri, 20 Oct 2023 12:11:04 +0800 Subject: [PATCH 2/4] update --- executor/executor_pkg_test.go | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/executor/executor_pkg_test.go b/executor/executor_pkg_test.go index 28c75c9abcaad..5068f5ac05b93 100644 --- a/executor/executor_pkg_test.go +++ b/executor/executor_pkg_test.go @@ -73,6 +73,62 @@ func TestBuildKvRangesForIndexJoinWithoutCwc(t *testing.T) { } } +func TestBuildKvRangesForIndexJoinWithoutCwcAndWithMemoryTracker(t *testing.T) { + indexRanges := make([]*ranger.Range, 0, 6) + indexRanges = append(indexRanges, generateIndexRange(1, 1, 1, 1, 1)) + indexRanges = append(indexRanges, generateIndexRange(1, 1, 2, 1, 1)) + indexRanges = append(indexRanges, generateIndexRange(1, 1, 2, 1, 2)) + indexRanges = append(indexRanges, generateIndexRange(1, 1, 3, 1, 1)) + indexRanges = append(indexRanges, generateIndexRange(2, 1, 1, 1, 1)) + indexRanges = append(indexRanges, generateIndexRange(2, 1, 2, 1, 1)) + + bytesConsumed1 := int64(0) + { + joinKeyRows := make([]*indexJoinLookUpContent, 0, 5) + for i := int64(0); i < 10; i++ { + joinKeyRows = append(joinKeyRows, &indexJoinLookUpContent{keys: generateDatumSlice(1, i)}) + } + + keyOff2IdxOff := []int{1, 3} + ctx := mock.NewContext() + memTracker := memory.NewTracker(memory.LabelForIndexWorker, -1) + kvRanges, err := buildKvRangesForIndexJoin(ctx, 0, 0, joinKeyRows, indexRanges, keyOff2IdxOff, nil, memTracker, nil) + require.NoError(t, err) + // Check the kvRanges is in order. + for i, kvRange := range kvRanges { + require.True(t, kvRange.StartKey.Cmp(kvRange.EndKey) < 0) + if i > 0 { + require.True(t, kvRange.StartKey.Cmp(kvRanges[i-1].EndKey) >= 0) + } + } + bytesConsumed1 = memTracker.BytesConsumed() + } + + bytesConsumed2 := int64(0) + { + joinKeyRows := make([]*indexJoinLookUpContent, 0, 5) + for i := int64(0); i < 20; i++ { + joinKeyRows = append(joinKeyRows, &indexJoinLookUpContent{keys: generateDatumSlice(1, i)}) + } + + keyOff2IdxOff := []int{1, 3} + ctx := mock.NewContext() + memTracker := memory.NewTracker(memory.LabelForIndexWorker, -1) + kvRanges, err := buildKvRangesForIndexJoin(ctx, 0, 0, joinKeyRows, indexRanges, keyOff2IdxOff, nil, memTracker, nil) + require.NoError(t, err) + // Check the kvRanges is in order. + for i, kvRange := range kvRanges { + require.True(t, kvRange.StartKey.Cmp(kvRange.EndKey) < 0) + if i > 0 { + require.True(t, kvRange.StartKey.Cmp(kvRanges[i-1].EndKey) >= 0) + } + } + bytesConsumed2 = memTracker.BytesConsumed() + } + + require.Equal(t, 2*bytesConsumed1, bytesConsumed2) +} + func generateIndexRange(vals ...int64) *ranger.Range { lowDatums := generateDatumSlice(vals...) highDatums := make([]types.Datum, len(vals)) From bd7945a4bdb477eac83888f1760838952ddd33a9 Mon Sep 17 00:00:00 2001 From: SeaRise Date: Fri, 20 Oct 2023 12:14:06 +0800 Subject: [PATCH 3/4] updoate --- executor/executor_pkg_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/executor/executor_pkg_test.go b/executor/executor_pkg_test.go index 5068f5ac05b93..bd3beb777ff5b 100644 --- a/executor/executor_pkg_test.go +++ b/executor/executor_pkg_test.go @@ -84,7 +84,7 @@ func TestBuildKvRangesForIndexJoinWithoutCwcAndWithMemoryTracker(t *testing.T) { bytesConsumed1 := int64(0) { - joinKeyRows := make([]*indexJoinLookUpContent, 0, 5) + joinKeyRows := make([]*indexJoinLookUpContent, 0, 10) for i := int64(0); i < 10; i++ { joinKeyRows = append(joinKeyRows, &indexJoinLookUpContent{keys: generateDatumSlice(1, i)}) } @@ -106,7 +106,7 @@ func TestBuildKvRangesForIndexJoinWithoutCwcAndWithMemoryTracker(t *testing.T) { bytesConsumed2 := int64(0) { - joinKeyRows := make([]*indexJoinLookUpContent, 0, 5) + joinKeyRows := make([]*indexJoinLookUpContent, 0, 20) for i := int64(0); i < 20; i++ { joinKeyRows = append(joinKeyRows, &indexJoinLookUpContent{keys: generateDatumSlice(1, i)}) } From d8ff64480e3c3956912eb7c8c20397405fe8cfc0 Mon Sep 17 00:00:00 2001 From: SeaRise Date: Mon, 23 Oct 2023 14:29:09 +0800 Subject: [PATCH 4/4] add ut --- executor/executor_pkg_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/executor/executor_pkg_test.go b/executor/executor_pkg_test.go index bd3beb777ff5b..787dd4312f29e 100644 --- a/executor/executor_pkg_test.go +++ b/executor/executor_pkg_test.go @@ -127,6 +127,7 @@ func TestBuildKvRangesForIndexJoinWithoutCwcAndWithMemoryTracker(t *testing.T) { } require.Equal(t, 2*bytesConsumed1, bytesConsumed2) + require.Equal(t, int64(20760), bytesConsumed1) } func generateIndexRange(vals ...int64) *ranger.Range {