kevinjmh commented on a change in pull request #3518: [DOC] add performance-tuning with codegen parameters support URL: https://github.com/apache/carbondata/pull/3518#discussion_r364526817
########## File path: docs/query-with-spark-sql-performance -tuning.md ########## @@ -0,0 +1,58 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to you under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +# Query with spark-sql performacne tuning + This tutorial guides you to create CarbonData Tables and optimize performance. + The following sections will elaborate on the below topics : + + * [The influence of spark.sql.codegen.wholeStage configuration on query](#The influence of spark.sql.codegen.wholeStage configuration on query) + +## The influence of spark.sql.codegen.wholeStage configuration on query + +In practice, we found that when the number of columns applied SUM operator reaches a certain threshold, the query time increases dramatically. we define "counter" for the meaning of columns applied SUM operator. Below will use "counter" instead of the columns applied SUM operator. + +As shown in the figure below(spark 2.1): + + + +The horizontal axis is the number of counter, and the vertical axis is the time consumed in seconds. + +It can be seen from the figure that when the number of counter exceeds 85, the query time is significantly increased. + +After analysis, this problem is related to ["spark.sql.codegen.wholeStage"](https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-whole-stage-codegen.html), which is enabled by default since spark 2.0. and it will do all the *internal optimization possible from the spark catalyst side*. + +**Whole-Stage Java Code Generation** (aka *Whole-Stage CodeGen*) is a physical query optimization in Spark SQL that fuses multiple physical operators (as a subtree of plans that [support code generation](https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-CodegenSupport.html)) together into a single Java function. + +Whole-Stage Java Code Generation improves the execution performance of a query by collapsing a query tree into a single optimized function that eliminates virtual function calls and leverages CPU registers for intermediate data. + +When counter is too large, the logic calculation function of hashaggregate operator is too large (there are nearly 3000 lines of code when there are 34 counters). Java itself does not recommend too large methods, which will reduce the processing efficiency, and exceed the JIT threshold, making the final execution in the way of interpretation. When the query grows in the counter, the performance drops sharply. Review comment: As the number of counter grows, generated codes for data process become larger. There are nearly 3000 lines of code when 34 counters. Java does not recommend huge methods, which can not make use of JIT and the code will run in interpretation mode. So the performance drops sharply when the counter in query grows. ---------------------------------------------------------------- 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. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
