Github user solzy commented on the issue:

    https://github.com/apache/phoenix/pull/308
  
    *@JamesRTaylor * Thanks for your clarify.
    
    
    ----------------------------------------
       Yun Zhang
       Best regards!
    
    
    2018-07-17 6:18 GMT+08:00 James Taylor <notificati...@github.com>:
    
    > *@JamesRTaylor* commented on this pull request.
    > ------------------------------
    >
    > In phoenix-core/src/main/java/org/apache/phoenix/iterate/
    > ClientHashAggregatingResultIterator.java
    > <https://github.com/apache/phoenix/pull/308#discussion_r202842452>:
    >
    > > +    protected ImmutableBytesWritable getGroupingKey(Tuple tuple, 
ImmutableBytesWritable ptr) throws SQLException {
    > +        try {
    > +            ImmutableBytesWritable key = 
TupleUtil.getConcatenatedValue(tuple, groupByExpressions);
    > +            ptr.set(key.get(), key.getOffset(), key.getLength());
    > +            return ptr;
    > +        } catch (IOException e) {
    > +            throw new SQLException(e);
    > +        }
    > +    }
    > +
    > +    // Copied from ClientGroupedAggregatingResultIterator
    > +    protected Tuple wrapKeyValueAsResult(KeyValue keyValue) {
    > +        return new MultiKeyValueTuple(Collections.<Cell> 
singletonList(keyValue));
    > +    }
    > +
    > +    private void populateHash() throws SQLException {
    >
    > @geraldss <https://github.com/geraldss> - memory management is tracked by
    > the GlobalMemoryManager. Operations that potentially use memory allocate
    > (and eventually free) a set of MemoryChunk instances. You can see an
    > example of this in GroupedAggregateRegionObserver (the runtime code for
    > aggregation). If the memory used goes over a threshold 
(phoenix.query.maxGlobalMemoryPercentage
    > and phoenix.query.maxTenantMemoryPercentage as the allowed percentage of
    > Java heap across all queries that is allowed to be used), then the query
    > will fail. Most typically, this mechanism is used on the server side as we
    > don't typically use a lot of memory on the client-side (as we're mostly
    > doing merge joins). One example where we use this on the client side is 
for
    > our broadcast join implementation (see HashCacheClient) to track memory
    > held onto for Hash Join caches.
    >
    > Classes you may want to look at (or perhaps you already have?):
    > OrderedResultIterator and MappedByteBufferSortedQueue. Above a certain
    > configurable threshold (phoenix.query.spoolThresholdBytes defaults to
    > 20MB), we output results into memory mapped files. Have you tried
    > decreasing that threshold?
    >
    > Couple of JIRAs you may want to take a look at: PHOENIX-2405 (unclear if
    > this is still an issue) and PHOENIX-3289. Are you running into issues with
    > too many memory mapped files?
    >
    > —
    > You are receiving this because you were mentioned.
    > Reply to this email directly, view it on GitHub
    > <https://github.com/apache/phoenix/pull/308#discussion_r202842452>, or 
mute
    > the thread
    > 
<https://github.com/notifications/unsubscribe-auth/AD1phzirsKewFaxyFttqCr5ybJNLnvWdks5uHREqgaJpZM4U_6wx>
    > .
    >



---

Reply via email to