If you look over this file.
vendor/magento/framework/Indexer/BatchSizeManagement.php
Here details are given, why the issue happened.
Now the logic is
if ($size > $bufferPoolSize * .2) {
//-- Error will show
}
Log warning if allocated memory for temp table greater than 20% of innodb_buffer_pool_size
Point a debugger as like below picture in xdebug CLI.

and run
bin/magento indexer:reindex catalog_product_price
You will found your possible problem, then you can make the solution.
Possible Solution 1:
For Price, the Batch Size is taken as
default argument,
vendor/magento/module-catalog/Model/ResourceModel/Product/Indexer/Price/BatchSizeCalculator.php
Look at estimateBatchSize method
Now on your module add a file.
{Your_Module_Name}/etc/di.xml.
<type name="Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\BatchSizeCalculator">
<arguments>
<argument name="batchRowsCount" xsi:type="array">
<item name="configurable" xsi:type="number">500</item>
<item name="default" xsi:type="number">500</item>
</argument>
</arguments>
</type>
Note: Add both configurable & default argument and the value is as per you. By default, it is 5000.
In the same way, you can change the value for others also.
Solution 2 :
Simply increase the innodb_buffer_pool_size size,
But consider the following things.
MySQL configuration for Magento 2