[ 
https://issues.apache.org/jira/browse/IMPALA-4268?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sahil Takiar resolved IMPALA-4268.
----------------------------------
    Fix Version/s: Impala 3.4.0
       Resolution: Fixed

All related tasks and sub-tasks have been completed. The majority if this work 
was done inĀ IMPALA-8656, which is now complete, so closing this JIRA.

> Rework coordinator buffering to buffer more data
> ------------------------------------------------
>
>                 Key: IMPALA-4268
>                 URL: https://issues.apache.org/jira/browse/IMPALA-4268
>             Project: IMPALA
>          Issue Type: Improvement
>          Components: Backend
>    Affects Versions: Impala 2.8.0
>            Reporter: Henry Robinson
>            Priority: Major
>              Labels: query-lifecycle, resource-management
>             Fix For: Impala 3.4.0
>
>         Attachments: rows-produced-histogram.png
>
>
> {{PlanRootSink}} executes the producer thread (the coordinator fragment 
> execution thread) in a separate thread to the consumer (i.e. the thread 
> handling the fetch RPC), which calls {{GetNext()}} to retrieve the rows. The 
> implementation was simplified by handing off a single batch at a time from 
> the producers to consumer.
> This decision causes some problems:
> * Many context switches for the sender. Adding buffering would allow the 
> sender to append to the buffer and continue progress without a context switch.
> * Query execution can't release resources until the client has fetched the 
> final batch, because the coordinator fragment thread is still running and 
> potentially producing backpressure all the way down the plan tree.
> * The consumer can't fulfil fetch requests greater than Impala's internal 
> BATCH_SIZE, because it is only given one batch at a time.
> The tricky part is managing the mismatch between the size of the row batches 
> processed in {{Send()}} and the size of the fetch result asked for by the 
> client without impacting performance too badly. The sender materializes 
> output rows in a {{QueryResultSet}} that is owned by the coordinator. That is 
> not, currently, a splittable object - instead it contains the actual RPC 
> response struct that will hit the wire when the RPC completes. As 
> asynchronous sender does not know the batch size, because it can in theory 
> change on every fetch call (although most reasonable clients will not 
> randomly change the fetch size).



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to