Author: tommaso Date: Wed Oct 10 09:34:48 2018 New Revision: 1843416 URL: http://svn.apache.org/viewvc?rev=1843416&view=rev Log: OAK-7795 - Log a debug message when two or more indices have same or very close cost amounts
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java?rev=1843416&r1=1843415&r2=1843416&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java Wed Oct 10 09:34:48 2018 @@ -974,6 +974,10 @@ public class QueryImpl implements Query double bestCost = Double.POSITIVE_INFINITY; IndexPlan bestPlan = null; + // track similar costs + QueryIndex almostBestIndex = null; + double almostBestCost = Double.POSITIVE_INFINITY; + // Sort the indexes according to their minimum cost to be able to skip the remaining indexes if the cost of the // current index is below the minimum cost of the next index. List<? extends QueryIndex> queryIndexes = MINIMAL_COST_ORDERING @@ -1042,12 +1046,25 @@ public class QueryImpl implements Query if (cost < 0) { LOG.error("cost below 0 for " + indexName + " is " + cost); } + if (cost < bestCost) { + almostBestCost = bestCost; + almostBestIndex = bestIndex; + bestCost = cost; bestIndex = index; bestPlan = indexPlan; + } else if (cost - bestCost <= 0.1) { + almostBestCost = cost; + almostBestIndex = index; } } + + if (LOG.isDebugEnabled() && Math.abs(bestCost - almostBestCost) <= 0.1) { + LOG.debug("selected index {} and {} have similar costs {} and {} for query {} - check query explanation / index definitions", + bestIndex, almostBestIndex, bestCost, almostBestCost, filter.toString()); + } + potentiallySlowTraversalQuery = bestIndex == null; if (traversalEnabled) { TraversingIndex traversal = new TraversingIndex();