diff --git a/benchmarks/client-comparisons/src/main/java/com/google/cloud/pgadapter/benchmark/AbstractBenchmarkRunner.java b/benchmarks/client-comparisons/src/main/java/com/google/cloud/pgadapter/benchmark/AbstractBenchmarkRunner.java index 55cd988b86..9b6312a911 100644 --- a/benchmarks/client-comparisons/src/main/java/com/google/cloud/pgadapter/benchmark/AbstractBenchmarkRunner.java +++ b/benchmarks/client-comparisons/src/main/java/com/google/cloud/pgadapter/benchmark/AbstractBenchmarkRunner.java @@ -42,6 +42,7 @@ interface BenchmarkMethod { this.name = name; this.statistics = statistics; this.benchmarkConfiguration = benchmarkConfiguration; + this.benchmarks.put("SelectOneValueAutoCommit", this::benchmarkSelectOneValueAutoCommit); this.benchmarks.put("SelectOneRowAutoCommit", this::benchmarkSelectOneRowAutoCommit); this.benchmarks.put("Select100RowsAutoCommit", this::benchmarkSelect100RowsRowAutoCommit); this.benchmarks.put("SelectOneRowTransaction", this::benchmarkSelectOneRowTransaction); @@ -86,6 +87,14 @@ public void run() { abstract String getParameterName(int index); + void benchmarkSelectOneValueAutoCommit(String name, int parallelism) throws Exception { + benchmarkSelect( + name, + parallelism, + "select col_varchar from benchmark_all_types where id=" + getParameterName(1), + true); + } + void benchmarkSelectOneRowAutoCommit(String name, int parallelism) throws Exception { benchmarkSelect( name, diff --git a/benchmarks/client-comparisons/src/main/java/com/google/cloud/pgadapter/benchmark/Statistics.java b/benchmarks/client-comparisons/src/main/java/com/google/cloud/pgadapter/benchmark/Statistics.java index d496c2e524..0567cf2235 100644 --- a/benchmarks/client-comparisons/src/main/java/com/google/cloud/pgadapter/benchmark/Statistics.java +++ b/benchmarks/client-comparisons/src/main/java/com/google/cloud/pgadapter/benchmark/Statistics.java @@ -1,6 +1,8 @@ package com.google.cloud.pgadapter.benchmark; import com.google.cloud.pgadapter.benchmark.config.BenchmarkConfiguration; +import java.lang.management.GarbageCollectorMXBean; +import java.lang.management.ManagementFactory; import java.time.Duration; import java.time.Instant; import java.util.concurrent.atomic.AtomicInteger; @@ -36,7 +38,9 @@ void print(Duration totalRuntime) { \rNum iterations: %d\t \rTotal runtime: %s\t \rParallelism: %d\t - \r + \rNum GCs: %d\t + \rGC time: %s\t + \rRuntime: %s\t \rOperations: %d/%d (%.2f/s)\t """, @@ -45,6 +49,8 @@ void print(Duration totalRuntime) { tpccConfiguration.getIterations(), totalRuntime, getParallelism(), + getGarbageCollections(), + getGarbageCollectionTime(), runtime, getOperations(), getTotalOperations(), @@ -107,4 +113,19 @@ long getOperations() { void incOperations() { operations.incrementAndGet(); } + + long getGarbageCollections() { + return ManagementFactory.getGarbageCollectorMXBeans().stream() + .map(GarbageCollectorMXBean::getCollectionCount) + .reduce(Long::sum) + .orElse(0L); + } + + Duration getGarbageCollectionTime() { + return ManagementFactory.getGarbageCollectorMXBeans().stream() + .map(GarbageCollectorMXBean::getCollectionTime) + .reduce(Long::sum) + .map(Duration::ofMillis) + .orElse(Duration.ZERO); + } } diff --git a/benchmarks/client-comparisons/src/main/resources/application.properties b/benchmarks/client-comparisons/src/main/resources/application.properties index 7abd9fad6c..a36f9792d2 100644 --- a/benchmarks/client-comparisons/src/main/resources/application.properties +++ b/benchmarks/client-comparisons/src/main/resources/application.properties @@ -33,7 +33,7 @@ benchmark.max-random-wait=PT0S # The number of parallel clients to use for benchmarks. benchmark.parallelism=4 # The benchmarks to run -benchmark.benchmarks=SelectOneRowAutoCommit,Select100RowsAutoCommit,SelectOneRowTransaction,Select100RowsTransaction +benchmark.benchmarks=SelectOneValueAutoCommit,SelectOneRowAutoCommit,Select100RowsAutoCommit,SelectOneRowTransaction,Select100RowsTransaction # --- Possible optimizations for TPC-C --- # benchmark.use-read-only-transactions=false