[ 
https://issues.apache.org/jira/browse/CALCITE-4994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17482830#comment-17482830
 ] 

Jay Narale edited comment on CALCITE-4994 at 1/27/22, 1:23 AM:
---------------------------------------------------------------

[~julianhyde] 

I quickly ran the benchmark with the lamda ( i commented out code around the 
correlation part for now).

Its as expected for the larger columns its faster than previous but slower than 
the map

SqlToRelBenchmark With Lambda
{noformat}
Benchmark                                                 (columnLength)  
(length)  Mode  Cnt          Score           Error   Units
SqlToRelBenchmark.parse                                               10     
10000  avgt   10        864.354 ±        54.142   ms/op
SqlToRelBenchmark.parse:·gc.alloc.rate                                10     
10000  avgt   10        452.993 ±        18.077  MB/sec
SqlToRelBenchmark.parse:·gc.alloc.rate.norm                           10     
10000  avgt   10  659921742.400 ±     25767.271    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space                       10     
10000  avgt   10        436.142 ±        15.755  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space.norm                  10     
10000  avgt   10  635437056.000 ±   9228675.624    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space                   10     
10000  avgt   10          0.484 ±         0.675  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space.norm              10     
10000  avgt   10     709928.800 ±    990794.310    B/op
SqlToRelBenchmark.parse:·gc.count                                     10     
10000  avgt   10         10.000                  counts
SqlToRelBenchmark.parse:·gc.time                                      10     
10000  avgt   10        123.000                      ms
SqlToRelBenchmark.parse                                              100     
10000  avgt   10       1618.893 ±        36.368   ms/op
SqlToRelBenchmark.parse:·gc.alloc.rate                               100     
10000  avgt   10        293.675 ±         5.130  MB/sec
SqlToRelBenchmark.parse:·gc.alloc.rate.norm                          100     
10000  avgt   10  660880576.800 ±     15650.604    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space                      100     
10000  avgt   10        283.600 ±         4.794  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space.norm                 100     
10000  avgt   10  638215782.400 ±   3662040.546    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space                  100     
10000  avgt   10          0.435 ±         0.365  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space.norm             100     
10000  avgt   10     977904.000 ±    822120.092    B/op
SqlToRelBenchmark.parse:·gc.count                                    100     
10000  avgt   10         10.000                  counts
SqlToRelBenchmark.parse:·gc.time                                     100     
10000  avgt   10        106.000                      ms
SqlToRelBenchmark.parse                                             1000     
10000  avgt   10       9605.022 ±       263.164   ms/op
SqlToRelBenchmark.parse:·gc.alloc.rate                              1000     
10000  avgt   10         62.488 ±         1.636  MB/sec
SqlToRelBenchmark.parse:·gc.alloc.rate.norm                         1000     
10000  avgt   10  663950768.000 ±     15667.655    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space                     1000     
10000  avgt   10         59.648 ±        21.827  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space.norm                1000     
10000  avgt   10  634703052.800 ± 235508467.343    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space                 1000     
10000  avgt   10          1.103 ±         0.995  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space.norm            1000     
10000  avgt   10   11767007.200 ±  10718693.190    B/op
SqlToRelBenchmark.parse:·gc.count                                   1000     
10000  avgt   10         24.000                  counts
SqlToRelBenchmark.parse:·gc.time                                    1000     
10000  avgt   10        261.000       {noformat}
SqlNodeToRelBenchmark With Lambda
{noformat}
Benchmark                                                            
(columnLength)  (length)  Mode  Cnt          Score           Error   Units
SqlNodeToRelBenchmark.convertToRel                                              
 10     10000  avgt   10        300.395 ±        30.364   ms/op
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate                               
 10     10000  avgt   10        457.408 ±        13.567  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate.norm                          
 10     10000  avgt   10  682826479.200 ±     15686.208    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space                      
 10     10000  avgt   10        462.075 ±       200.634  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space.norm                 
 10     10000  avgt   10  692007731.200 ± 320073587.742    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space                  
 10     10000  avgt   10          1.969 ±         4.904  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space.norm             
 10     10000  avgt   10    2944764.800 ±   7408016.060    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.count                                    
 10     10000  avgt   10         11.000                  counts
SqlNodeToRelBenchmark.convertToRel:·gc.time                                     
 10     10000  avgt   10        180.000                      ms
SqlNodeToRelBenchmark.convertToRel                                              
100     10000  avgt   10        612.111 ±        74.204   ms/op
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate                               
100     10000  avgt   10        260.242 ±        27.603  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate.norm                          
100     10000  avgt   10  665062728.800 ±     15703.902    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space                      
100     10000  avgt   10        270.294 ±        88.036  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space.norm                 
100     10000  avgt   10  699107555.200 ± 303664136.290    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space                  
100     10000  avgt   10          0.530 ±         0.812  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space.norm             
100     10000  avgt   10    1384058.400 ±   2230790.576    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.count                                    
100     10000  avgt   10         11.000                  counts
SqlNodeToRelBenchmark.convertToRel:·gc.time                                     
100     10000  avgt   10        172.000                      ms
SqlNodeToRelBenchmark.convertToRel                                             
1000     10000  avgt   10       3304.496 ±       206.641   ms/op
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate                              
1000     10000  avgt   10         59.267 ±         1.488  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate.norm                         
1000     10000  avgt   10  668750760.000 ±     15692.951    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space                     
1000     10000  avgt   10         59.205 ±         6.559  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space.norm                
1000     10000  avgt   10  668361812.000 ±  78633524.696    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space                 
1000     10000  avgt   10          1.682 ±         0.648  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space.norm            
1000     10000  avgt   10   18977920.000 ±   7239963.196    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.count                                   
1000     10000  avgt   10         61.000                  counts
SqlNodeToRelBenchmark.convertToRel:·gc.time                                    
1000     10000  avgt   10        599.000   {noformat}
Summary
{noformat}
Column length               10       100      1,000
==================== ========= ========= ==========
Before change
Score Sql To Rel       856.562 1,722.243 11,692.547
Score SqlNode to Rel   303.435   649.239  4,987.583
 
After Memoization at Blackboard Change
Score Sql To Rel     1,097.489 1,574.153  8,805.355
Score SqlNode to Rel   288.835   509.465  2,701.474
 
After Lambda Change
Score Sql To Rel           864.354      1618.893  9605.022
Score SqlNode to Rel   300.395   612.111   3304.496
{noformat}
 

 

Any thoughts?

 


was (Author: jaynarale):
[~julianhyde] 

I quickly ran the benchmark with the lamda ( i commented out code around the 
correlation part for now).

Its as expected for the larger columns its faster than previous but slower than 
the map

SqlToRelBenchmark With Lambda

 
{noformat}
Benchmark                                                 (columnLength)  
(length)  Mode  Cnt          Score           Error   Units
SqlToRelBenchmark.parse                                               10     
10000  avgt   10        864.354 ±        54.142   ms/op
SqlToRelBenchmark.parse:·gc.alloc.rate                                10     
10000  avgt   10        452.993 ±        18.077  MB/sec
SqlToRelBenchmark.parse:·gc.alloc.rate.norm                           10     
10000  avgt   10  659921742.400 ±     25767.271    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space                       10     
10000  avgt   10        436.142 ±        15.755  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space.norm                  10     
10000  avgt   10  635437056.000 ±   9228675.624    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space                   10     
10000  avgt   10          0.484 ±         0.675  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space.norm              10     
10000  avgt   10     709928.800 ±    990794.310    B/op
SqlToRelBenchmark.parse:·gc.count                                     10     
10000  avgt   10         10.000                  counts
SqlToRelBenchmark.parse:·gc.time                                      10     
10000  avgt   10        123.000                      ms
SqlToRelBenchmark.parse                                              100     
10000  avgt   10       1618.893 ±        36.368   ms/op
SqlToRelBenchmark.parse:·gc.alloc.rate                               100     
10000  avgt   10        293.675 ±         5.130  MB/sec
SqlToRelBenchmark.parse:·gc.alloc.rate.norm                          100     
10000  avgt   10  660880576.800 ±     15650.604    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space                      100     
10000  avgt   10        283.600 ±         4.794  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space.norm                 100     
10000  avgt   10  638215782.400 ±   3662040.546    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space                  100     
10000  avgt   10          0.435 ±         0.365  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space.norm             100     
10000  avgt   10     977904.000 ±    822120.092    B/op
SqlToRelBenchmark.parse:·gc.count                                    100     
10000  avgt   10         10.000                  counts
SqlToRelBenchmark.parse:·gc.time                                     100     
10000  avgt   10        106.000                      ms
SqlToRelBenchmark.parse                                             1000     
10000  avgt   10       9605.022 ±       263.164   ms/op
SqlToRelBenchmark.parse:·gc.alloc.rate                              1000     
10000  avgt   10         62.488 ±         1.636  MB/sec
SqlToRelBenchmark.parse:·gc.alloc.rate.norm                         1000     
10000  avgt   10  663950768.000 ±     15667.655    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space                     1000     
10000  avgt   10         59.648 ±        21.827  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Eden_Space.norm                1000     
10000  avgt   10  634703052.800 ± 235508467.343    B/op
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space                 1000     
10000  avgt   10          1.103 ±         0.995  MB/sec
SqlToRelBenchmark.parse:·gc.churn.PS_Survivor_Space.norm            1000     
10000  avgt   10   11767007.200 ±  10718693.190    B/op
SqlToRelBenchmark.parse:·gc.count                                   1000     
10000  avgt   10         24.000                  counts
SqlToRelBenchmark.parse:·gc.time                                    1000     
10000  avgt   10        261.000       {noformat}
 

 

SqlNodeToRelBenchmark With Lambda

 
{noformat}
Benchmark                                                            
(columnLength)  (length)  Mode  Cnt          Score           Error   Units
SqlNodeToRelBenchmark.convertToRel                                              
 10     10000  avgt   10        300.395 ±        30.364   ms/op
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate                               
 10     10000  avgt   10        457.408 ±        13.567  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate.norm                          
 10     10000  avgt   10  682826479.200 ±     15686.208    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space                      
 10     10000  avgt   10        462.075 ±       200.634  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space.norm                 
 10     10000  avgt   10  692007731.200 ± 320073587.742    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space                  
 10     10000  avgt   10          1.969 ±         4.904  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space.norm             
 10     10000  avgt   10    2944764.800 ±   7408016.060    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.count                                    
 10     10000  avgt   10         11.000                  counts
SqlNodeToRelBenchmark.convertToRel:·gc.time                                     
 10     10000  avgt   10        180.000                      ms
SqlNodeToRelBenchmark.convertToRel                                              
100     10000  avgt   10        612.111 ±        74.204   ms/op
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate                               
100     10000  avgt   10        260.242 ±        27.603  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate.norm                          
100     10000  avgt   10  665062728.800 ±     15703.902    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space                      
100     10000  avgt   10        270.294 ±        88.036  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space.norm                 
100     10000  avgt   10  699107555.200 ± 303664136.290    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space                  
100     10000  avgt   10          0.530 ±         0.812  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space.norm             
100     10000  avgt   10    1384058.400 ±   2230790.576    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.count                                    
100     10000  avgt   10         11.000                  counts
SqlNodeToRelBenchmark.convertToRel:·gc.time                                     
100     10000  avgt   10        172.000                      ms
SqlNodeToRelBenchmark.convertToRel                                             
1000     10000  avgt   10       3304.496 ±       206.641   ms/op
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate                              
1000     10000  avgt   10         59.267 ±         1.488  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.alloc.rate.norm                         
1000     10000  avgt   10  668750760.000 ±     15692.951    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space                     
1000     10000  avgt   10         59.205 ±         6.559  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Eden_Space.norm                
1000     10000  avgt   10  668361812.000 ±  78633524.696    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space                 
1000     10000  avgt   10          1.682 ±         0.648  MB/sec
SqlNodeToRelBenchmark.convertToRel:·gc.churn.PS_Survivor_Space.norm            
1000     10000  avgt   10   18977920.000 ±   7239963.196    B/op
SqlNodeToRelBenchmark.convertToRel:·gc.count                                   
1000     10000  avgt   10         61.000                  counts
SqlNodeToRelBenchmark.convertToRel:·gc.time                                    
1000     10000  avgt   10        599.000   {noformat}
 

 

 

 
{noformat}
Column length               10       100      1,000
==================== ========= ========= ==========
Before change
Score Sql To Rel       856.562 1,722.243 11,692.547
Score SqlNode to Rel   303.435   649.239  4,987.583
 
After Memoization at Blackboard Change
Score Sql To Rel     1,097.489 1,574.153  8,805.355
Score SqlNode to Rel   288.835   509.465  2,701.474
 
After Lambda Change
Score Sql To Rel           864.354      1618.893  9605.022
Score SqlNode to Rel   300.395   612.111   3304.496
{noformat}
 

 

Any thoughts?

 

> SqlToRelConverter creates FieldMap for every Identifier Instead of Memoizing 
> it
> -------------------------------------------------------------------------------
>
>                 Key: CALCITE-4994
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4994
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>            Reporter: Jay Narale
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> When converting from Sql To Rel, In SqlToRelConverter for every single 
> instance of an identifier we create a new map in 
> *_org.apache.calcite.sql2rel.SqlToRelConverter.Blackboard#lookupExp_*
>  
> {code:java}
> final Map<String, Integer> fieldOffsets = new HashMap<>();
> for (RelDataTypeField f : resolve.rowType().getFieldList()) {
> if (!fieldOffsets.containsKey(f.getName())) {
> fieldOffsets.put(f.getName(), f.getIndex());
> }
> }
> final Map<String, Integer> map = ImmutableMap.copyOf(fieldOffsets);{code}
>  
> So for a Sql Query
> {code:java}
> SELECT name, nation FROM customer{code}
> We would do the above operation twice.
> Memoization of this information will improve performance.
> In my database, I had observed that for a large table involving 1200 columns 
> and a huge select having multiple expressions and operators, this part was a 
> bottleneck.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to