diff --git a/src/java/org/apache/cassandra/db/ReadExecutionController.java b/src/java/org/apache/cassandra/db/ReadExecutionController.java index 9564df20c21..5f40efa3401 100644 --- a/src/java/org/apache/cassandra/db/ReadExecutionController.java +++ b/src/java/org/apache/cassandra/db/ReadExecutionController.java @@ -55,7 +55,7 @@ public class ReadExecutionController implements AutoCloseable private final RepairedDataInfo repairedDataInfo; private long oldestUnrepairedTombstone = Long.MAX_VALUE; - public final Histogram sstablesScannedPerRowRead; + private final Histogram sstablesScannedPerRowRead; ReadExecutionController(ReadCommand command, OpOrder.Group baseOp, @@ -75,7 +75,10 @@ public class ReadExecutionController implements AutoCloseable this.command = command; this.createdAtNanos = createdAtNanos; - this.sstablesScannedPerRowRead = new Histogram(new DecayingEstimatedHistogramReservoir(true)); + // This is expensive to create, and since this is on the query hot path, we must only make it when we need it. + this.sstablesScannedPerRowRead = Tracing.isTracing() + ? new Histogram(new DecayingEstimatedHistogramReservoir(true)) + : null; if (trackRepairedStatus) { @@ -228,7 +231,7 @@ public void close() if (createdAtNanos != NO_SAMPLING) addSample(); - if (Tracing.traceSinglePartitions()) + if (sstablesScannedPerRowRead != null) { Snapshot sstablesHistogram = sstablesScannedPerRowRead.getSnapshot(); Tracing.trace("Scanned {} rows; average {} sstables scanned per row with stdev {} and max {}", @@ -272,6 +275,9 @@ private void addSample() public void updateSstablesIteratedPerRow(int mergedSSTablesIterated) { - sstablesScannedPerRowRead.update(mergedSSTablesIterated); + if (sstablesScannedPerRowRead != null) + { + sstablesScannedPerRowRead.update(mergedSSTablesIterated); + } } }