Tim Armstrong has posted comments on this change.

Change subject: IMPALA-5160: adjust spill buffer size based on planner estimates
......................................................................


Patch Set 6:

The main scenario where it could lead to additional spilling (assuming 
mem_limit is fixed) is if the scans grabbed memory that the spillable operators 
would otherwise have been able to use. Otherwise it could result in different 
operators spilling, which could have positive or negative impacts on perf. If 
we get it right we'll reduce spilling because more memory can be devoted to the 
operators that need it.

I ran a few TPC-H queries to compare estimated memory with peak memory. E.g. 
TPC-H Q9 is below. The estimates are off by quite a bit in some cases, but the 
error comes mainly from the non-linear memory consumption of the 64kb/512kb/8mb 
buffer size ramp-up in the old code, rather than cardinality estimation errors.

    Operator              #Hosts   Avg Time   Max Time    #Rows  Est. #Rows   
Peak Mem  Est. Peak Mem  Detail                  
    
---------------------------------------------------------------------------------------------------------------------------
    21:MERGING-EXCHANGE        1  149.369us  149.369us      175      61.70K     
     0              0  UNPARTITIONED           
    12:SORT                    3  410.974us  547.810us      175      61.70K   
24.02 MB       16.00 MB                          
    20:AGGREGATE               3    1.261ms    1.306ms      175      61.70K    
2.30 MB       10.00 MB  FINALIZE                
    19:EXCHANGE                3   68.482us   81.851us      525      61.70K     
     0              0  HASH(nation,o_year)     
    11:AGGREGATE               3  201.760ms  217.919ms      525      61.70K    
2.11 MB       10.00 MB  STREAMING               
    10:HASH JOIN               3   26.906ms   37.907ms  319.40K     574.29K    
1.06 MB       690.00 B  INNER JOIN, BROADCAST   
    |--18:EXCHANGE             3   17.306us   17.720us       25          25     
     0              0  BROADCAST               
    |  05:SCAN HDFS            1   17.458ms   17.458ms       25          25   
43.00 KB       32.00 MB  tpch.nation             
    09:HASH JOIN               3  114.307ms  155.488ms  319.40K     574.29K  
169.40 MB       20.14 MB  INNER JOIN, BROADCAST   
    |--17:EXCHANGE             3  284.583ms  296.048ms  800.00K     800.00K     
     0              0  BROADCAST               
    |  03:SCAN HDFS            1  373.590ms  373.590ms  800.00K     800.00K   
32.46 MB      176.00 MB  tpch.partsupp           
    08:HASH JOIN               3   39.011ms   43.315ms  319.40K     574.29K    
1.52 MB      107.42 KB  INNER JOIN, BROADCAST   
    |--16:EXCHANGE             3    2.050ms    2.485ms   10.00K      10.00K     
     0              0  BROADCAST               
    |  01:SCAN HDFS            1  775.848ms  775.848ms   10.00K      10.00K    
2.04 MB       32.00 MB  tpch.supplier           
    07:HASH JOIN               3  722.690ms  736.289ms  319.40K     574.29K  
153.17 MB       17.83 MB  INNER JOIN, PARTITIONED 
    |--15:EXCHANGE             3  187.995ms  194.122ms    1.50M       1.50M     
     0              0  HASH(o_orderkey)        
    |  04:SCAN HDFS            2  318.553ms  512.326ms    1.50M       1.50M   
42.05 MB      176.00 MB  tpch.orders             
    14:EXCHANGE                3   41.321ms   62.755ms  319.40K     598.58K     
     0              0  HASH(l_orderkey)        
    06:HASH JOIN               3  256.056ms  273.355ms  319.40K     598.58K    
1.47 MB        1.19 MB  INNER JOIN, BROADCAST   
    |--13:EXCHANGE             3    1.733ms    1.972ms   10.66K      20.00K     
     0              0  BROADCAST               
    |  00:SCAN HDFS            1  821.018ms  821.018ms   10.66K      20.00K   
32.04 MB       64.00 MB  tpch.part               
    02:SCAN HDFS               3    2s611ms    2s690ms    6.00M       6.00M   
64.23 MB      264.00 MB  tpch.lineitem           


It sounds like we would need to test this with the new code - using the old 
code won't give any insights because it will be dominated by behaviour that 
doesn't carry over. Interestingly we might actually win back a fair bit of 
memory and therefore reduce spilling by avoiding the big jump in memory 
consumption of 8MB buffers.

I think it might be best, if possible, to agree on the planner mechanism first 
and then tune the policy based on experiments with a more final version of 
query execution. I could do experiments with the current prototype of query 
execution but it feels a bit speculative until more pieces are in place.

-- 
To view, visit http://gerrit.cloudera.org:8080/6963
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I57b5b4c528325d478c8a9b834a6bc5dedab54b5b
Gerrit-PatchSet: 6
Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-Owner: Tim Armstrong <[email protected]>
Gerrit-Reviewer: Dan Hecht <[email protected]>
Gerrit-Reviewer: Tim Armstrong <[email protected]>
Gerrit-HasComments: No

Reply via email to