我正在使用Drill在MongoDB后端上运行SQL。我正在获得约500毫秒的响应时间。但是大部分时间都花在“首次启动”阶段。钻头中的实际处理所花费的时间要少得多(〜50ms)。为什么“首次启动”需要这么多时间?我想知道该阶段要进行的演练,并尽可能优化。
答案 0 :(得分:0)
在第一个查询之后,Drill创建了许多缓存对象以改善进一步的工作,请参阅Generated Code Cache
[1],[2],[3]了解详细信息,StoragePluginRegistry
缓存[4]。
此外,MongoSchemaFactory
为您的database
和tableName
[5]创建缓存,该缓存将在1分钟后失效。
如果您尝试执行查询,则最有可能在缓存过期时获得类似的时间。
[1] https://github.com/paul-rogers/drill/wiki/CG-Code-Cache
[2] https://github.com/apache/drill/blob/master/exec/java-exec/src/main/java/org/apache/drill/exec/compile/ByteCodeLoader.java#L36
[3] https://github.com/apache/drill/blob/master/exec/java-exec/src/main/java/org/apache/drill/exec/compile/CodeCompiler.java#L145
[4] https://github.com/apache/drill/blob/master/exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRegistryImpl.java#L90
[5] https://github.com/apache/drill/blob/master/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/schema/MongoSchemaFactory.java#L66