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)

Reply via email to