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,