[ https://issues.apache.org/jira/browse/GEODE-5404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
nabarun closed GEODE-5404. -------------------------- > 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 > Assignee: Barry Oglesby > Priority: Major > Labels: pull-request-available > Fix For: 1.7.0 > > Time Spent: 10m > Remaining Estimate: 0h > > 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)