diff --git a/src/main/java/io/ebean/config/AutoTuneConfig.java b/src/main/java/io/ebean/config/AutoTuneConfig.java index e0940241b..526fdebb0 100644 --- a/src/main/java/io/ebean/config/AutoTuneConfig.java +++ b/src/main/java/io/ebean/config/AutoTuneConfig.java @@ -5,7 +5,7 @@ package io.ebean.config; */ public class AutoTuneConfig { - private AutoTuneMode mode = AutoTuneMode.DEFAULT_ON; + private AutoTuneMode mode = AutoTuneMode.DEFAULT_OFF; private String queryTuningFile = "ebean-autotune.xml"; diff --git a/src/main/java/io/ebeaninternal/server/autotune/service/BaseQueryTuner.java b/src/main/java/io/ebeaninternal/server/autotune/service/BaseQueryTuner.java index 1c4d82e66..8219b179c 100644 --- a/src/main/java/io/ebeaninternal/server/autotune/service/BaseQueryTuner.java +++ b/src/main/java/io/ebeaninternal/server/autotune/service/BaseQueryTuner.java @@ -41,7 +41,7 @@ public class BaseQueryTuner { */ private final boolean skipAll; - public BaseQueryTuner(AutoTuneConfig config, SpiEbeanServer server, ProfilingListener profilingListener) { + BaseQueryTuner(AutoTuneConfig config, SpiEbeanServer server, ProfilingListener profilingListener) { this.server = server; this.profilingListener = profilingListener; this.mode = config.getMode(); @@ -84,12 +84,17 @@ public class BaseQueryTuner { /** * Auto tune the query and enable profiling. */ - public boolean tuneQuery(SpiQuery query) { + boolean tuneQuery(SpiQuery query) { if (skipAll || !tunableQuery(query)) { return false; } + if (query.getProfilingListener() != null) { + // profiling secondary query + return false; + } + if (!useTuning(query)) { if (profiling) { profiling(query, server.createCallStack()); @@ -138,6 +143,7 @@ public class BaseQueryTuner { switch (type) { case COUNT: case ID_LIST: + case UPDATE: case DELETE: case SUBQUERY: return false; diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultCallStackFactory.java b/src/main/java/io/ebeaninternal/server/core/DefaultCallStackFactory.java index 4b6cabdc0..d7a949d03 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultCallStackFactory.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultCallStackFactory.java @@ -28,7 +28,7 @@ public class DefaultCallStackFactory implements CallStackFactory { // find the first non-avaje stackElement for (; startIndex < stackTrace.length; startIndex++) { - if (!stackTrace[startIndex].getClassName().startsWith(IO_EBEAN)) { + if (!ignore(stackTrace[startIndex])) { break; } } @@ -51,6 +51,16 @@ public class DefaultCallStackFactory implements CallStackFactory { return createCallStack(finalTrace); } + private boolean ignore(StackTraceElement element) { + if (element.getClassName().startsWith(IO_EBEAN)) { + return true; + } + if (element.getMethodName().startsWith("_ebean_")) { + return true; + } + return false; + } + private CallStack createCallStack(StackTraceElement[] finalTrace) { return new CallStack(finalTrace, finalTrace[0].hashCode(), pathHash(finalTrace)); } diff --git a/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java b/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java index 1b86a169a..1ecfe8e11 100644 --- a/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java +++ b/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java @@ -13,6 +13,7 @@ import io.ebeaninternal.api.LoadSecondaryQuery; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.api.SpiQuerySecondary; +import io.ebeaninternal.server.autotune.ProfilingListener; import io.ebeaninternal.server.core.OrmQueryRequest; import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.deploy.BeanProperty; @@ -55,9 +56,9 @@ public class DLoadContext implements LoadContext { */ private final String relativePath; private final ObjectGraphOrigin origin; - private final boolean useProfiling; private final String planLabel; private final ProfileLocation profileLocation; + private final ProfilingListener profilingListener; private final Map nodePathMap = new HashMap<>(); @@ -88,7 +89,7 @@ public class DLoadContext implements LoadContext { this.relativePath = null; this.planLabel = null; this.profileLocation = null; - this.useProfiling = false; + this.profilingListener = null; this.rootBeanContext = new DLoadBeanContext(this, rootDescriptor, null, defaultBatchSize, null); } @@ -114,7 +115,7 @@ public class DLoadContext implements LoadContext { this.disableReadAudit = query.isDisableReadAudit(); this.disableLazyLoading = query.isDisableLazyLoading(); this.useBeanCache = query.getUseBeanCache(); - this.useProfiling = query.getProfilingListener() != null; + this.profilingListener = query.getProfilingListener(); this.planLabel = query.getPlanLabel(); this.profileLocation = query.getProfileLocation(); @@ -368,8 +369,8 @@ public class DLoadContext implements LoadContext { if (disableReadAudit) { query.setDisableReadAuditing(); } - if (useProfiling) { - query.setAutoTune(true); + if (profilingListener != null) { + query.setProfilingListener(profilingListener); } if (tenantId != null) { query.setTenantId(tenantId);