Skip to content

Commit 5ec7daa

Browse files
committed
YQL-18468 fix wrong gracejoin answer with spilling on q12 tpch
1 parent 113c366 commit 5ec7daa

File tree

4 files changed

+19
-8
lines changed

4 files changed

+19
-8
lines changed

ydb/library/yql/minikql/aligned_page_pool.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ void TAlignedPagePoolImpl<T>::Free(void* ptr, size_t size) noexcept {
504504
template<typename T>
505505
void TAlignedPagePoolImpl<T>::UpdateMemoryYellowZone() {
506506
if (Limit == 0) return;
507-
if (IncreaseMemoryLimitCallback && !IsMaximumLimitValueReached) return;
507+
// if (IncreaseMemoryLimitCallback && !IsMaximumLimitValueReached) return;
508508

509509
ui8 usedMemoryPercent = 100 * GetUsed() / Limit;
510510
if (usedMemoryPercent >= EnableMemoryYellowZoneThreshold) {

ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "mkql_grace_join.h"
22
#include "mkql_grace_join_imp.h"
33

4+
#include <format>
45
#include <ydb/library/yql/public/udf/udf_data_type.h>
56
#include <ydb/library/yql/public/udf/udf_value.h>
67
#include <ydb/library/yql/public/decimal/yql_decimal_serialize.h>
@@ -631,13 +632,15 @@ class TGraceJoinSpillingSupportState : public TComputationValue<TGraceJoinSpilli
631632
}
632633

633634
bool IsSwitchToSpillingModeCondition() const {
634-
return false;
635+
// return false;
635636
// TODO: YQL-18033
636-
// return !HasMemoryForProcessing();
637+
return !HasMemoryForProcessing();
637638
}
638639

639640

640641
void SwitchMode(EOperatingMode mode, TComputationContext& ctx) {
642+
643+
std::cerr << std::format("[MISHA] switching mode {}->{}\n", (int)Mode, (int)mode);
641644
switch(mode) {
642645
case EOperatingMode::InMemory: {
643646
MKQL_ENSURE(false, "Internal logic error");
@@ -772,7 +775,7 @@ class TGraceJoinSpillingSupportState : public TComputationValue<TGraceJoinSpilli
772775
}
773776
if (isYield) return EFetchResult::Yield;
774777

775-
if (!*HaveMoreRightRows && !*PartialJoinCompleted && LeftPacker->TuplesBatchPacked >= LeftPacker->BatchSize ) {
778+
/*if (!*HaveMoreRightRows && !*PartialJoinCompleted && LeftPacker->TuplesBatchPacked >= LeftPacker->BatchSize ) {
776779
*PartialJoinCompleted = true;
777780
JoinedTablePtr->Join(*LeftPacker->TablePtr, *RightPacker->TablePtr, JoinKind, *HaveMoreLeftRows, *HaveMoreRightRows);
778781
JoinedTablePtr->ResetIterator();
@@ -783,7 +786,7 @@ class TGraceJoinSpillingSupportState : public TComputationValue<TGraceJoinSpilli
783786
JoinedTablePtr->Join(*LeftPacker->TablePtr, *RightPacker->TablePtr, JoinKind, *HaveMoreLeftRows, *HaveMoreRightRows);
784787
JoinedTablePtr->ResetIterator();
785788
786-
}
789+
}*/
787790

788791
if (!*HaveMoreRightRows && !*HaveMoreLeftRows && !*PartialJoinCompleted) {
789792
*PartialJoinCompleted = true;
@@ -855,10 +858,12 @@ EFetchResult ProcessSpilledData(TComputationContext&, NUdf::TUnboxedValue*const*
855858
if (HasRunningAsyncOperation()) return EFetchResult::Yield;
856859

857860
if (!LeftPacker->TablePtr->IsBucketInMemory(NextBucketToJoin)) {
861+
std::cerr << std::format("[MISHA] loading bucket {}\n", NextBucketToJoin);
858862
LeftPacker->TablePtr->StartLoadingBucket(NextBucketToJoin);
859863
}
860864

861865
if (!RightPacker->TablePtr->IsBucketInMemory(NextBucketToJoin)) {
866+
std::cerr << std::format("[MISHA] loading bucket {}\n", NextBucketToJoin);
862867
RightPacker->TablePtr->StartLoadingBucket(NextBucketToJoin);
863868
}
864869

ydb/library/yql/minikql/comp_nodes/mkql_grace_join_imp.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "mkql_grace_join_imp.h"
22

3+
#include <format>
34
#include <ydb/library/yql/public/udf/udf_data_type.h>
45
#include <ydb/library/yql/utils/log/log.h>
56

@@ -263,6 +264,7 @@ void ResizeHashTable(KeysHashTable &t, ui64 newSlots){
263264
// Joins two tables and returns join result in joined table. Tuples of joined table could be received by
264265
// joined table iterator
265266
void TTable::Join( TTable & t1, TTable & t2, EJoinKind joinKind, bool hasMoreLeftTuples, bool hasMoreRightTuples, ui32 fromBucket, ui32 toBucket ) {
267+
std::cerr << std::format("[MISHA] joining buckets {}->{}\n", fromBucket, toBucket);
266268
if ( hasMoreLeftTuples )
267269
LeftTableBatch_ = true;
268270

@@ -297,13 +299,17 @@ void TTable::Join( TTable & t1, TTable & t2, EJoinKind joinKind, bool hasMoreLef
297299

298300
for (ui64 bucket = fromBucket; bucket < toBucket; bucket++) {
299301

302+
// std::cerr << std::format("[MISHA] bucket: {}", bucket);
303+
300304
joinResults.clear();
301305
TTableBucket * bucket1 = &JoinTable1->TableBuckets[bucket];
302306
TTableBucket * bucket2 = &JoinTable2->TableBuckets[bucket];
303307

304308
ui64 tuplesNum1 = JoinTable1->TableBucketsStats[bucket].TuplesNum;
305309
ui64 tuplesNum2 = JoinTable2->TableBucketsStats[bucket].TuplesNum;
306310

311+
std::cerr << std::format("[MISHA] bucket: {}, tuplesNum1: {}, tuplesNum2: {}, KIVSize1: {}, KIVSize2: {}\n", bucket, tuplesNum1, tuplesNum2, bucket1->KeyIntVals.size(), bucket2->KeyIntVals.size());
312+
307313
ui64 headerSize1 = JoinTable1->HeaderSize;
308314
ui64 headerSize2 = JoinTable2->HeaderSize;
309315
ui64 nullsSize1 = JoinTable1->NullsBitmapSize_;
@@ -1154,8 +1160,8 @@ bool TTable::TryToReduceMemoryAndWait() {
11541160
}
11551161
}
11561162

1157-
if (largestBucketSize) return false;
1158-
1163+
if (!largestBucketSize) return false;
1164+
std::cerr << std::format("[MISHA] spilling bucket {} of size {}\n", largestBucketIndex, largestBucketSize);
11591165
TableBucketsSpillers[largestBucketIndex].SpillBucket(std::move(TableBuckets[largestBucketIndex]));
11601166
TableBuckets[largestBucketIndex] = TTableBucket{};
11611167

ydb/library/yql/providers/dq/worker_manager/local_worker_manager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ namespace NYql::NDqs {
3030
NDq::NTaskRunnerActor::ITaskRunnerActorFactory::TPtr TaskRunnerActorFactory;
3131
THashMap<TString, TString> ClusterNamesMapping;
3232

33-
ui64 MkqlInitialMemoryLimit = 8_GB;
33+
ui64 MkqlInitialMemoryLimit = 50_MB;
3434
ui64 MkqlTotalMemoryLimit = 0;
3535
ui64 MkqlMinAllocSize = 30_MB;
3636
ui64 MkqlProgramHardMemoryLimit = 0;

0 commit comments

Comments
 (0)