diff -Nuar a/vendor/magento/module-inventory-configurable-product-indexer/Indexer/SelectBuilder.php b/vendor/magento/module-inventory-configurable-product-indexer/Indexer/SelectBuilder.php
index 481056b5eb1..825775bc61f 100644
--- a/vendor/magento/module-inventory-configurable-product-indexer/Indexer/SelectBuilder.php
+++ b/vendor/magento/module-inventory-configurable-product-indexer/Indexer/SelectBuilder.php
@@ -15,10 +15,11 @@ use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexNameBuilder;
 use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexNameResolverInterface;
 use Magento\InventoryIndexer\Indexer\IndexStructure;
 use Magento\InventoryIndexer\Indexer\InventoryIndexer;
+use Magento\InventoryIndexer\Indexer\SelectBuilderInterface;
 use Magento\Framework\EntityManager\MetadataPool;
 use Magento\Catalog\Api\Data\ProductInterface;
 
-class SelectBuilder
+class SelectBuilder implements SelectBuilderInterface
 {
     /**
      * @var ResourceConnection
diff -Nuar a/vendor/magento/module-inventory-configurable-product-indexer/Indexer/SourceItem/SourceItemIndexer.php b/vendor/magento/module-inventory-configurable-product-indexer/Indexer/SourceItem/SourceItemIndexer.php
index c6a798592ad..4ba73966192 100644
--- a/vendor/magento/module-inventory-configurable-product-indexer/Indexer/SourceItem/SourceItemIndexer.php
+++ b/vendor/magento/module-inventory-configurable-product-indexer/Indexer/SourceItem/SourceItemIndexer.php
@@ -7,17 +7,30 @@ declare(strict_types=1);
 
 namespace Magento\InventoryConfigurableProductIndexer\Indexer\SourceItem;
 
+use Magento\Framework\App\ObjectManager;
 use Magento\Framework\App\ResourceConnection;
+use Magento\Framework\Indexer\SaveHandler\Batch;
 use Magento\InventoryMultiDimensionalIndexerApi\Model\Alias;
 use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexHandlerInterface;
 use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexNameBuilder;
 use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexStructureInterface;
 use Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface;
 use Magento\InventoryIndexer\Indexer\InventoryIndexer;
+use ArrayIterator;
 
+/**
+ * Configurable product source item indexer
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects) Will be removed after deleting DefaultStockProviderInterface
+ */
 class SourceItemIndexer
 {
     /**
+     * Default batch size
+     */
+    private const BATCH_SIZE = 100;
+
+    /**
      * @var ResourceConnection
      */
     private $resourceConnection;
@@ -53,6 +66,16 @@ class SourceItemIndexer
     private $defaultStockProvider;
 
     /**
+     * @var int
+     */
+    private $batchSize;
+
+    /**
+     * @var Batch
+     */
+    private $batch;
+
+    /**
      * @param ResourceConnection $resourceConnection
      * @param IndexNameBuilder $indexNameBuilder
      * @param IndexHandlerInterface $indexHandler
@@ -60,6 +83,8 @@ class SourceItemIndexer
      * @param IndexDataBySkuListProvider $indexDataBySkuListProvider
      * @param SiblingSkuListInStockProvider $siblingSkuListInStockProvider
      * @param DefaultStockProviderInterface $defaultStockProvider
+     * @param Batch|null $batch
+     * @param int|null $batchSize
      */
     public function __construct(
         ResourceConnection $resourceConnection,
@@ -68,7 +93,9 @@ class SourceItemIndexer
         IndexStructureInterface $indexStructure,
         IndexDataBySkuListProvider $indexDataBySkuListProvider,
         SiblingSkuListInStockProvider $siblingSkuListInStockProvider,
-        DefaultStockProviderInterface $defaultStockProvider
+        DefaultStockProviderInterface $defaultStockProvider,
+        ?Batch $batch = null,
+        ?int $batchSize = null
     ) {
         $this->resourceConnection = $resourceConnection;
         $this->indexNameBuilder = $indexNameBuilder;
@@ -77,9 +104,13 @@ class SourceItemIndexer
         $this->indexStructure = $indexStructure;
         $this->siblingSkuListInStockProvider = $siblingSkuListInStockProvider;
         $this->defaultStockProvider = $defaultStockProvider;
+        $this->batch = $batch ?: ObjectManager::getInstance()->get(Batch::class);
+        $this->batchSize = $batchSize ?? self::BATCH_SIZE;
     }
 
     /**
+     * Executes index by list of stock ids
+     *
      * @param array $sourceItemIds
      */
     public function executeList(array $sourceItemIds)
@@ -106,17 +137,20 @@ class SourceItemIndexer
 
             $indexData = $this->indexDataBySkuListProvider->execute($stockId, $skuList);
 
-            $this->indexHandler->cleanIndex(
-                $mainIndexName,
-                $indexData,
-                ResourceConnection::DEFAULT_CONNECTION
-            );
-
-            $this->indexHandler->saveIndex(
-                $mainIndexName,
-                $indexData,
-                ResourceConnection::DEFAULT_CONNECTION
-            );
+            foreach ($this->batch->getItems($indexData, $this->batchSize) as $batchData) {
+                $batchIndexData = new ArrayIterator($batchData);
+                $this->indexHandler->cleanIndex(
+                    $mainIndexName,
+                    $batchIndexData,
+                    ResourceConnection::DEFAULT_CONNECTION
+                );
+
+                $this->indexHandler->saveIndex(
+                    $mainIndexName,
+                    $batchIndexData,
+                    ResourceConnection::DEFAULT_CONNECTION
+                );
+            }
         }
     }
 }
diff -Nuar a/vendor/magento/module-inventory-configurable-product-indexer/Indexer/Stock/StockIndexer.php b/vendor/magento/module-inventory-configurable-product-indexer/Indexer/Stock/StockIndexer.php
index 68bba4793de..4f081613b90 100644
--- a/vendor/magento/module-inventory-configurable-product-indexer/Indexer/Stock/StockIndexer.php
+++ b/vendor/magento/module-inventory-configurable-product-indexer/Indexer/Stock/StockIndexer.php
@@ -10,6 +10,7 @@ namespace Magento\InventoryConfigurableProductIndexer\Indexer\Stock;
 use Magento\Framework\App\ObjectManager;
 use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Exception\StateException;
+use Magento\Framework\Indexer\SaveHandler\Batch;
 use Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface;
 use Magento\InventoryIndexer\Indexer\InventoryIndexer;
 use Magento\InventoryIndexer\Indexer\Stock\GetAllStockIds;
@@ -19,6 +20,7 @@ use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexHandlerInterface;
 use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexNameBuilder;
 use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexStructureInterface;
 use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexTableSwitcherInterface;
+use ArrayIterator;
 
 /**
  * Configurable product stock indexer class
@@ -28,6 +30,11 @@ use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexTableSwitcherInterfac
 class StockIndexer
 {
     /**
+     * Default batch size
+     */
+    private const BATCH_SIZE = 100;
+
+    /**
      * @var GetAllStockIds
      */
     private $getAllStockIds;
@@ -68,6 +75,16 @@ class StockIndexer
     private $prepareIndexDataForClearingIndex;
 
     /**
+     * @var int
+     */
+    private $batchSize;
+
+    /**
+     * @var Batch
+     */
+    private $batch;
+
+    /**
      * $indexStructure is reserved name for construct variable in index internal mechanism
      *
      * @param GetAllStockIds $getAllStockIds
@@ -78,6 +95,9 @@ class StockIndexer
      * @param IndexTableSwitcherInterface $indexTableSwitcher
      * @param DefaultStockProviderInterface $defaultStockProvider
      * @param PrepareIndexDataForClearingIndex|null $prepareIndexDataForClearingIndex
+     * @param Batch|null $batch
+     * @param int|null $batchSize
+     * @SuppressWarnings(PHPMD.ExcessiveParameterList) All parameters are needed for backward compatibility
      */
     public function __construct(
         GetAllStockIds $getAllStockIds,
@@ -87,7 +107,9 @@ class StockIndexer
         IndexDataByStockIdProvider $indexDataByStockIdProvider,
         IndexTableSwitcherInterface $indexTableSwitcher,
         DefaultStockProviderInterface $defaultStockProvider,
-        PrepareIndexDataForClearingIndex $prepareIndexDataForClearingIndex = null
+        PrepareIndexDataForClearingIndex $prepareIndexDataForClearingIndex = null,
+        ?Batch $batch = null,
+        ?int $batchSize = null
     ) {
         $this->getAllStockIds = $getAllStockIds;
         $this->indexStructure = $indexStructure;
@@ -98,6 +120,8 @@ class StockIndexer
         $this->defaultStockProvider = $defaultStockProvider;
         $this->prepareIndexDataForClearingIndex = $prepareIndexDataForClearingIndex ?: ObjectManager::getInstance()
             ->get(PrepareIndexDataForClearingIndex::class);
+        $this->batch = $batch ?: ObjectManager::getInstance()->get(Batch::class);
+        $this->batchSize = $batchSize ?? self::BATCH_SIZE;
     }
 
     /**
@@ -150,17 +174,20 @@ class StockIndexer
 
             $indexData = $this->indexDataByStockIdProvider->execute((int)$stockId);
 
-            $this->indexHandler->cleanIndex(
-                $mainIndexName,
-                $this->prepareIndexDataForClearingIndex->execute($indexData),
-                ResourceConnection::DEFAULT_CONNECTION
-            );
-
-            $this->indexHandler->saveIndex(
-                $mainIndexName,
-                $indexData,
-                ResourceConnection::DEFAULT_CONNECTION
-            );
+            foreach ($this->batch->getItems($indexData, $this->batchSize) as $batchData) {
+                $batchIndexData = new ArrayIterator($batchData);
+                $this->indexHandler->cleanIndex(
+                    $mainIndexName,
+                    $this->prepareIndexDataForClearingIndex->execute($batchIndexData),
+                    ResourceConnection::DEFAULT_CONNECTION
+                );
+
+                $this->indexHandler->saveIndex(
+                    $mainIndexName,
+                    $batchIndexData,
+                    ResourceConnection::DEFAULT_CONNECTION
+                );
+            }
         }
     }
 }
diff -Nuar a/vendor/magento/module-inventory-configurable-product-indexer/etc/di.xml b/vendor/magento/module-inventory-configurable-product-indexer/etc/di.xml
index 9def048d6c7..781c907f14b 100644
--- a/vendor/magento/module-inventory-configurable-product-indexer/etc/di.xml
+++ b/vendor/magento/module-inventory-configurable-product-indexer/etc/di.xml
@@ -14,16 +14,25 @@
         <plugin name="configurable_product_full_index" type="Magento\InventoryConfigurableProductIndexer\Plugin\InventoryIndexer\Indexer\Stock\Strategy\Sync\ReindexFullPlugin"/>
         <plugin name="configurable_product_index_list" type="Magento\InventoryConfigurableProductIndexer\Plugin\InventoryIndexer\Indexer\Stock\Strategy\Sync\ReindexListPlugin"/>
     </type>
+    <type name="Magento\InventoryIndexer\Indexer\Stock\IndexDataProviderByStockId">
+        <arguments>
+            <argument name="selectBuilders" xsi:type="array">
+                <item name="configurable" xsi:type="object">Magento\InventoryConfigurableProductIndexer\Indexer\SelectBuilder</item>
+            </argument>
+        </arguments>
+    </type>
     <type name="Magento\InventoryConfigurableProductIndexer\Indexer\SourceItem\SourceItemIndexer">
         <arguments>
             <argument name="indexHandler" xsi:type="object">Magento\InventoryIndexer\Indexer\IndexHandler</argument>
             <argument name="indexStructure" xsi:type="object">Magento\InventoryIndexer\Indexer\IndexStructure</argument>
+            <argument name="batchSize" xsi:type="string">100</argument>
         </arguments>
     </type>
     <type name="Magento\InventoryConfigurableProductIndexer\Indexer\Stock\StockIndexer">
         <arguments>
             <argument name="indexHandler" xsi:type="object">Magento\InventoryIndexer\Indexer\IndexHandler</argument>
             <argument name="indexStructure" xsi:type="object">Magento\InventoryIndexer\Indexer\IndexStructure</argument>
+            <argument name="batchSize" xsi:type="string">100</argument>
         </arguments>
     </type>
     <type name="Magento\InventoryConfigurableProductIndexer\Indexer\SourceItem\SiblingSkuListInStockProvider">
diff -Nuar a/vendor/magento/module-inventory-indexer/Indexer/SelectBuilder.php b/vendor/magento/module-inventory-indexer/Indexer/SelectBuilder.php
index ac1beea684b..ef24b60714e 100644
--- a/vendor/magento/module-inventory-indexer/Indexer/SelectBuilder.php
+++ b/vendor/magento/module-inventory-indexer/Indexer/SelectBuilder.php
@@ -20,7 +20,7 @@ use Magento\InventorySales\Model\ResourceModel\IsStockItemSalableCondition\GetIs
 /**
  * Select builder
  */
-class SelectBuilder
+class SelectBuilder implements SelectBuilderInterface
 {
     /**
      * @var ResourceConnection
diff -Nuar a/vendor/magento/module-inventory-indexer/Indexer/SelectBuilderInterface.php b/vendor/magento/module-inventory-indexer/Indexer/SelectBuilderInterface.php
new file mode 100644
index 00000000000..d0500f3cb97
--- /dev/null
+++ b/vendor/magento/module-inventory-indexer/Indexer/SelectBuilderInterface.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+declare(strict_types=1);
+
+namespace Magento\InventoryIndexer\Indexer;
+
+use Magento\Framework\DB\Select;
+
+/**
+ * Prepare select for data provider
+ */
+interface SelectBuilderInterface
+{
+    /**
+     * Prepare select based on stockId
+     *
+     * @param int $stockId
+     * @return Select
+     */
+    public function execute(int $stockId): Select;
+}
diff -Nuar a/vendor/magento/module-inventory-indexer/Indexer/Stock/IndexDataProviderByStockId.php b/vendor/magento/module-inventory-indexer/Indexer/Stock/IndexDataProviderByStockId.php
index 16cde3b0821..dc0100316bd 100644
--- a/vendor/magento/module-inventory-indexer/Indexer/Stock/IndexDataProviderByStockId.php
+++ b/vendor/magento/module-inventory-indexer/Indexer/Stock/IndexDataProviderByStockId.php
@@ -8,8 +8,9 @@ declare(strict_types=1);
 namespace Magento\InventoryIndexer\Indexer\Stock;
 
 use ArrayIterator;
+use Magento\Framework\Exception\LocalizedException;
 use Magento\Framework\App\ResourceConnection;
-use Magento\InventoryIndexer\Indexer\SelectBuilder;
+use Magento\InventoryIndexer\Indexer\SelectBuilderInterface;
 
 /**
  * Returns all data for the index
@@ -22,31 +23,48 @@ class IndexDataProviderByStockId
     private $resourceConnection;
 
     /**
-     * @var SelectBuilder
+     * @var SelectBuilderInterface[]
      */
-    private $selectBuilder;
+    private $selectBuilders;
 
     /**
      * @param ResourceConnection $resourceConnection
-     * @param SelectBuilder $selectBuilder
+     * @param SelectBuilderInterface[] $selectBuilders
+     * @throws LocalizedException
      */
     public function __construct(
         ResourceConnection $resourceConnection,
-        SelectBuilder $selectBuilder
+        array $selectBuilders
     ) {
         $this->resourceConnection = $resourceConnection;
-        $this->selectBuilder = $selectBuilder;
+
+        foreach ($selectBuilders as $selectBuilder) {
+            if (!$selectBuilder instanceof SelectBuilderInterface) {
+                throw new LocalizedException(
+                    __('SelectBuilder must implement SelectBuilderInterface.')
+                );
+            }
+        }
+        $this->selectBuilders = $selectBuilders;
     }
 
     /**
+     * Returns selected data
+     *
      * @param int $stockId
+     * @throws \Exception
      * @return ArrayIterator
      */
     public function execute(int $stockId): ArrayIterator
     {
-        $select = $this->selectBuilder->execute($stockId);
-
+        $result = [];
         $connection = $this->resourceConnection->getConnection();
-        return new ArrayIterator($connection->fetchAll($select));
+
+        foreach ($this->selectBuilders as $selectBuilder) {
+            $select = $selectBuilder->execute($stockId);
+            $result[] = $connection->fetchAll($select);
+        }
+
+        return new ArrayIterator(array_merge([], ...$result));
     }
 }
diff -Nuar a/vendor/magento/module-inventory-indexer/etc/di.xml b/vendor/magento/module-inventory-indexer/etc/di.xml
index f6914e24ab7..3ffc61314f5 100644
--- a/vendor/magento/module-inventory-indexer/etc/di.xml
+++ b/vendor/magento/module-inventory-indexer/etc/di.xml
@@ -24,6 +24,13 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\InventoryIndexer\Indexer\Stock\IndexDataProviderByStockId">
+        <arguments>
+            <argument name="selectBuilders" xsi:type="array">
+                <item name="default" xsi:type="object">Magento\InventoryIndexer\Indexer\SelectBuilder</item>
+            </argument>
+        </arguments>
+    </type>
     <type name="Magento\InventoryIndexer\Indexer\IndexHandler">
         <arguments>
             <argument name="batchSize" xsi:type="string">100</argument>
