-
Notifications
You must be signed in to change notification settings - Fork 980
Performance Basics
Drill performance work consists of focusing on one particular area, discovering current performance, and seeking ways to make that particular operation or query run faster. The "school of hard knocks" has taught that the unwary novice Drill developer can spend time "discovering" that Drill runs slow if you set the wrong options. This page describes those options, when to use them, and how to turn them off when doing performance runs.
Drill has a very complex memory allocator to manage direct memory. Clearly, those who wrestled this part of Drill into perfection found the need to carefully monitor each allocation. This shows up in the effect of enabling assertions (the -ea option the Java command) when running Drill. In general, assertions are very handy to include debugging checks that Java will optimize out at run-time. Drill, unfortunately, uses the -ea option as an indication to turn on detailed memory allocation logging. This logging has the effect of adding 10x to 20x to the run time of each query.
Be sure to turn on assertions when changing Drill to catch memory issues early. (Assertions are enabled for Drill unit tests run through Maven, for example.) But, be sure assertions are off when doing performance runs. Assertions will be off if you use the out-of-the-box Drill launch scripts (those in $DRILL_HOME/bin
) but may be on if you run Drill through your favorite IDE.
Drill provides comprehensive logging via the Logback Classic logging system. Like most loggers, Logback provides a variety of logging levels. At the default logging levels, logging will consume much of the run time of a query.
Before doing any performance runs, change the log level to error
. If running Drill using the out-of-the-box scripts, look for $DRILL_HOME/conf/logback.xml
(or $DRILL_SITE/logback.xml
). Change these lines:
<logger name="org.apache.drill" additivity="false">
<level value="error" />
<appender-ref ref="FILE" />
</logger>
<logger name="org.apache.drill" additivity="false">
<level value="error" />
<appender-ref ref="SOCKET" />
</logger>
That is, change the levels from the default of info
and debug
to error
. Note that all log levels must be at error
. If any logger (even one you are not using, such as the SOCKET
logger) is at debug
, you will pay the debug logging cost.