richardstartin opened a new pull request #8261:
URL: https://github.com/apache/pinot/pull/8261


   The profile below was taken from one of our customer's deployments - very 
high allocation rates are observed in no-index LIKE queries, because of matcher 
construction.
   <img width="1596" alt="Screenshot 2022-02-28 at 18 27 57" 
src="https://user-images.githubusercontent.com/16439049/156040801-956865d0-96b0-49fc-a74b-64f80cda5886.png";>
   
   This PR simply reuses the `Matcher` as it will never be used across threads 
at the segment level.
   
   This decreases allocation significantly (2.5x) and may slightly increase 
average query time.
   
   before:
   
   ```
   Benchmark                                                (_numRows)          
                                                      (_query)  (_scenario)  
Mode  Cnt           Score            Error   Units
   BenchmarkQueries.query                                      1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.001)  
avgt    5         919.018 ±         14.737   ms/op
   BenchmarkQueries.query:·gc.alloc.rate                       1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.001)  
avgt    5         656.552 ±       1412.756  MB/sec
   BenchmarkQueries.query:·gc.alloc.rate.norm                  1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.001)  
avgt    5   806583564.800 ± 1735530730.138    B/op
   BenchmarkQueries.query                                      1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'     EXP(0.5)  
avgt    5         758.236 ±         18.678   ms/op
   BenchmarkQueries.query:·gc.alloc.rate                       1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'     EXP(0.5)  
avgt    5         762.000 ±       1639.664  MB/sec
   BenchmarkQueries.query:·gc.alloc.rate.norm                  1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'     EXP(0.5)  
avgt    5   806583100.000 ± 1735530900.622    B/op
   BenchmarkQueries.query                                      1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.999)  
avgt    5         799.468 ±         17.653   ms/op
   BenchmarkQueries.query:·gc.alloc.rate                       1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.999)  
avgt    5         733.147 ±       1577.529  MB/sec
   BenchmarkQueries.query:·gc.alloc.rate.norm                  1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.999)  
avgt    5   806583204.000 ± 1735531021.166    B/op
   ```
   
   after:
   ```
   Benchmark                                            (_numRows)              
                                                  (_query)  (_scenario)  Mode  
Cnt          Score            Error   Units
   BenchmarkQueries.query                                  1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.001)  
avgt    5        863.085 ±         31.335   ms/op
   BenchmarkQueries.query:·gc.alloc.rate                   1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.001)  
avgt    5        279.607 ±        601.640  MB/sec
   BenchmarkQueries.query:·gc.alloc.rate.norm              1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.001)  
avgt    5  326550961.600 ±  702576606.964    B/op
   BenchmarkQueries.query                                  1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'     EXP(0.5)  
avgt    5        759.623 ±         77.455   ms/op
   BenchmarkQueries.query:·gc.alloc.rate                   1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'     EXP(0.5)  
avgt    5        307.396 ±        661.675  MB/sec
   BenchmarkQueries.query:·gc.alloc.rate.norm              1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'     EXP(0.5)  
avgt    5  326583524.000 ±  702294555.871    B/op
   BenchmarkQueries.query                                  1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.999)  
avgt    5        753.004 ±         79.038   ms/op
   BenchmarkQueries.query:·gc.alloc.rate                   1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.999)  
avgt    5        308.145 ±        663.030  MB/sec
   BenchmarkQueries.query:·gc.alloc.rate.norm              1500000  SELECT 
RAW_INT_COL FROM MyTable WHERE NO_INDEX_STRING_COL LIKE '%foo%'   EXP(0.999)  
avgt    5  326583459.200 ±  702294795.237    B/op
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to