You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Liya Fan (Jira)" <ji...@apache.org> on 2020/04/08 12:15:00 UTC

[jira] [Created] (CALCITE-3901) Introduce an option to disable metadata handler regeneration

Liya Fan created CALCITE-3901:
---------------------------------

             Summary: Introduce an option to disable metadata handler regeneration
                 Key: CALCITE-3901
                 URL: https://issues.apache.org/jira/browse/CALCITE-3901
             Project: Calcite
          Issue Type: Improvement
          Components: core
            Reporter: Liya Fan


According to our investigation, Calcite can produce large performance overhead due to meta data handler regeneration. 

To illustrate, suppose we want to get the average size of a rel node, by calling the RelMetadataQuery#getAverageRowSize method. If the rel node type has not been registered before, JaninoRelMetadataProvider#revise method will be called, which will regerenate and recompile the code for the metadata handler. 

This process is time-consuming, as compiling code by Janino is time-consuming: It takes more than 10ms to compile a single source file, even if the file is small. According to our investigation, performance overhead due to this problem can be over 10% of the total optimization time. 

Therefore, we introduce an option to disable metadata handler regeneration. This forces the client to register all rel node types before calling the metadata service, so as to avoid performance being stolen silently. 

For some scenarios, the client mistakenly believes they have registered all rel node types, and this option helps them find the types they have missed. 



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