private static void runPerformanceTest(MetricRegistry registry, NamedBlobDb namedBlobDb,
      ScheduledExecutorService executor, AccountService accountService, int numThreads, boolean includeList)
      throws Exception {
    long numberOfPuts = 1000 * 1000; // 1 million inserts
    System.out.println("Running performance test, number of puts: " + numberOfPuts);
    long numberOfInsertPerWorker = numberOfPuts / numThreads;
    List<Future<?>> futures = new ArrayList<>();
    for (int i = 0; i < numThreads; i++) {
      long num = numberOfInsertPerWorker;
      if (i == numThreads - 1) {
        num = numberOfPuts - i * numberOfInsertPerWorker;
      }
      futures.add(executor.submit(new PerformanceTestWorker(i, namedBlobDb, accountService, num, includeList)));
    }
    for (Future<?> future : futures) {
      future.get();
    }
    System.out.println("All the PerformanceTestWorkers are finished");
    printHistogramMetric(registry, "com.github.ambry.named.MySqlNamedBlobDb.NamedBlobPutTimeInMs");
    printHistogramMetric(registry, "com.github.ambry.named.MySqlNamedBlobDb.NamedBlobGetTimeInMs");
    printHistogramMetric(registry, "com.github.ambry.named.MySqlNamedBlobDb.NamedTtlupdateTimeInMs");
    printHistogramMetric(registry, "com.github.ambry.named.MySqlNamedBlobDb.NamedBlobListTimeInMs");
    printHistogramMetric(registry, "com.github.ambry.named.MySqlNamedBlobDb.NamedBlobDeleteTimeInMs");
  }
Run performance test after target number of rows are filled in the database.
@param registry The {@link MetricRegistry} object.
@param namedBlobDb The {@link NamedBlobDb} object.
@param executor The {@link ScheduledExecutorService} object.
@param accountService The {@link AccountService} object.
@param numThreads The number of threads to run performance test
@param includeList True to include list operation in the performance test
@throws Exception
ambry-tools/src/main/java/com/github/ambry/tools/perf/NamedBlobMysqlDatabasePerf.java