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)