Barry Oglesby created GEODE-5404: ------------------------------------ Summary: Optimize performance of client/server distinct order-by queries with integrated security Key: GEODE-5404 URL: https://issues.apache.org/jira/browse/GEODE-5404 Project: Geode Issue Type: Bug Components: querying Reporter: Barry Oglesby
The performance of distinct order-by queries along with integrated security has degraded. With the query below and integrated security, \{{SelectResults.size}} repeatedly causes the whitelist to be created while re-ordering the results. \{{SelectResults.size}} is called every time through the loop in \{{BaseCommandQuery.sendResultsAsObjectArray}}. {noformat} select distinct * from /data where cusip = $1 order by id asc limit 500 {noformat} In current: {noformat} Query '<trace> select distinct * from /data where cusip = 'AAPL' order by id asc limit 500' returned 500 entries in 175979 ms Query '<trace> select distinct * from /data where cusip = 'AAPL' order by id asc limit 500' returned 500 entries in 173280 ms {noformat} In Geode 1.2.0: {noformat} Query '<trace> select distinct * from /data where cusip = 'AAPL' order by id asc limit 500' returned 500 entries in 7270 ms Query '<trace> select distinct * from /data where cusip = 'AAPL' order by id asc limit 500' returned 500 entries in 7303 ms {noformat} Here is a stack trace showing ths issue: {noformat} "ServerConnection on port 59856 Thread 1" #83 prio=5 os_prio=31 tid=0x00007fe66191f000 nid=0xbf07 runnable [0x000070000ea9a000] java.lang.Thread.State: RUNNABLE at java.util.HashMap.putVal(HashMap.java:628) at java.util.HashMap.put(HashMap.java:611) at java.util.HashSet.add(HashSet.java:219) at org.apache.geode.cache.query.internal.RestrictedMethodInvocationAuthorizer.createWhiteList(RestrictedMethodInvocationAuthorizer.java:48) at org.apache.geode.cache.query.internal.RestrictedMethodInvocationAuthorizer.<init>(RestrictedMethodInvocationAuthorizer.java:42) at org.apache.geode.cache.query.internal.DefaultQueryService.<init>(DefaultQueryService.java:126) at org.apache.geode.internal.cache.GemFireCacheImpl.getQueryService(GemFireCacheImpl.java:4199) at org.apache.geode.cache.query.internal.PathUtils.evaluateAttribute(PathUtils.java:76) at org.apache.geode.cache.query.internal.CompiledPath.evaluate(CompiledPath.java:147) at org.apache.geode.cache.query.internal.CompiledSortCriterion.evaluate(CompiledSortCriterion.java:72) at org.apache.geode.cache.query.internal.OrderByComparator.evaluateSortCriteria(OrderByComparator.java:78) at org.apache.geode.cache.query.internal.OrderByComparator.compare(OrderByComparator.java:111) at org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection$NWayMergeIterator.compare(NWayMergeResults.java:310) at org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection$NWayMergeDistinctIterator.hasNext(NWayMergeResults.java:396) at org.apache.geode.cache.query.internal.utils.LimitIterator.hasNext(LimitIterator.java:39) at org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection$NWayMergeIterator$IteratorWrapper.move(NWayMergeResults.java:346) at org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection$NWayMergeDistinctIterator.hasNext(NWayMergeResults.java:380) at org.apache.geode.cache.query.internal.utils.LimitIterator.hasNext(LimitIterator.java:39) at org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection.size(NWayMergeResults.java:193) at org.apache.geode.cache.query.internal.NWayMergeResults.size(NWayMergeResults.java:68) at org.apache.geode.internal.cache.tier.sockets.BaseCommandQuery.sendResultsAsObjectArray(BaseCommandQuery.java:367) at org.apache.geode.internal.cache.tier.sockets.BaseCommandQuery.processQueryUsingParams(BaseCommandQuery.java:218) at org.apache.geode.internal.cache.tier.sockets.BaseCommandQuery.processQuery(BaseCommandQuery.java:60) at org.apache.geode.internal.cache.tier.sockets.command.Query.cmdExecute(Query.java:92) at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:164) at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:869) at org.apache.geode.internal.cache.tier.sockets.OriginalServerConnection.doOneMessage(OriginalServerConnection.java:77) at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1248) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$4$1.run(AcceptorImpl.java:644) at java.lang.Thread.run(Thread.java:745) {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)