MCPcopy Create free account
hub / github.com/apache/impala / MaxRunsInNextMerge

Method MaxRunsInNextMerge

be/src/runtime/sorter.cc:1437–1470  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1435}
1436
1437int Sorter::MaxRunsInNextMerge() const {
1438 int num_available_buffers = buffer_pool_client_->GetUnusedReservation() / page_len_;
1439 DCHECK_GE(num_available_buffers, ComputeMinReservation() / page_len_);
1440 int num_runs_in_one_merge = 0;
1441 int num_required_buffers = 0;
1442
1443 for (int i = 0; i < sorted_runs_.size(); ++i) {
1444 int num_buffers_for_this_run = (sorted_runs_[i]->HasVarLenPages()) ? 2 : 1;
1445
1446 if (num_required_buffers + num_buffers_for_this_run <= num_available_buffers) {
1447 num_required_buffers += num_buffers_for_this_run;
1448 ++num_runs_in_one_merge;
1449 } else {
1450 // Not enough buffers to merge all the runs in one final merge. Intermediate merge
1451 // is required.
1452 // Increasing the required buffers count to include the result run of the
1453 // intermediate merge.
1454 num_required_buffers +=
1455 (output_row_desc_->tuple_descriptors()[0]->HasVarlenSlots()) ? 2 : 1;
1456 // Have to reduce the number of runs for this merge to fit in the available buffer
1457 // pool memory.
1458 for (int j = i - 1; j >= 0; --j) {
1459 num_required_buffers -= sorted_runs_[j]->HasVarLenPages() ? 2 : 1;
1460 --num_runs_in_one_merge;
1461 if (num_required_buffers <= num_available_buffers) break;
1462 }
1463 DCHECK_LE(num_required_buffers, num_available_buffers);
1464 break;
1465 }
1466 }
1467
1468 DCHECK_GT(num_runs_in_one_merge, 1);
1469 return num_runs_in_one_merge;
1470}
1471
1472void Sorter::TryToIncreaseMemAllocationForMerge() {
1473 int pages_needed_for_full_merge = 0;

Callers

nothing calls this directly

Calls 4

HasVarLenPagesMethod · 0.80
GetUnusedReservationMethod · 0.45
sizeMethod · 0.45
HasVarlenSlotsMethod · 0.45

Tested by

no test coverage detected