You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ko...@apache.org on 2026/04/06 09:18:18 UTC
(ignite-3) branch main updated: IGNITE-28437 Sql. Reduce number of rows fetched during ordered index scan (#7919)
This is an automated email from the ASF dual-hosted git repository.
korlov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new bceab69a6f5 IGNITE-28437 Sql. Reduce number of rows fetched during ordered index scan (#7919)
bceab69a6f5 is described below
commit bceab69a6f51269fa3e3f01f9f5d4b5e84b6da24
Author: korlov42 <ko...@apache.org>
AuthorDate: Mon Apr 6 12:18:12 2026 +0300
IGNITE-28437 Sql. Reduce number of rows fetched during ordered index scan (#7919)
---
.../internal/sql/engine/exec/rel/IndexScanNode.java | 16 ++++++++++++++--
.../apache/ignite/internal/sql/engine/util/Commons.java | 7 -------
2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
index cd423dcab75..18ba95b6173 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
@@ -17,6 +17,9 @@
package org.apache.ignite.internal.sql.engine.exec.rel;
+import static java.lang.Integer.max;
+import static java.lang.Integer.min;
+
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
@@ -38,7 +41,6 @@ import org.apache.ignite.internal.sql.engine.exec.exp.RangeIterable;
import org.apache.ignite.internal.sql.engine.schema.ColumnDescriptor;
import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
import org.apache.ignite.internal.sql.engine.schema.TableDescriptor;
-import org.apache.ignite.internal.sql.engine.util.Commons;
import org.apache.ignite.internal.util.SubscriptionUtils;
import org.apache.ignite.internal.util.TransformingIterator;
import org.jetbrains.annotations.Nullable;
@@ -131,8 +133,18 @@ public class IndexScanNode<RowT> extends StorageScanNode<RowT> {
partWithConsistencyToken -> partitionPublisher(partWithConsistencyToken, cond)
);
+ int bufferSize = context().bufferSize();
+
+ // Let's prefetch equal share of a buffer from each partition.
+ int fetchSize = max(context().bufferSize() / partsWithConsistencyTokens.size(), 1);
+
+ // Adds some buffer to improve chances to fulfill entire request without need go to storage once again.
+ // This renders over-prefetching over all local partitions in total, but at least it's capped now at
+ // 2x bufferSize within up to 512 local partitions.
+ fetchSize = min(fetchSize * 2, bufferSize);
+
if (comp != null) {
- return SubscriptionUtils.orderedMerge(comp, Commons.SORTED_IDX_PART_PREFETCH_SIZE, it);
+ return SubscriptionUtils.orderedMerge(comp, fetchSize, it);
} else {
return SubscriptionUtils.concat(it);
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
index aa2f3ca9cc8..1fde9c85a07 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
@@ -138,13 +138,6 @@ public final class Commons {
SqlKind.OTHER_DDL
);
- /**
- * The number of elements to be prefetched from each partition when scanning the sorted index.
- * The higher the value, the fewer calls to the upstream will be, but at the same time, the bigger
- * internal buffer will be.
- */
- public static final int SORTED_IDX_PART_PREFETCH_SIZE = 100;
-
@SuppressWarnings("rawtypes")
public static final List<RelTraitDef> DISTRIBUTED_TRAITS_SET = List.of(
ConventionTraitDef.INSTANCE,