1

I am executing same query in parallel in 11 threads and I am getting huge difference in execution time of these queries. And if I execute only one query it executes very fast.

Thread code: I used 11 threads

            Thread t1 = new Thread(new Runnable() {
                public void run() {
                    try {
                        QueryResult result= null;
                        double qstart = System.currentTimeMillis();
                        ClusterEnvironment env = ClusterEnvironment
                                .builder()
                                .timeoutConfig(TimeoutConfig.kvTimeout(Duration.ofMinutes(15)))
                                .build();
                          Cluster cluster = Cluster.connect("xx.xx.xx.xxx", "**********", "************");
                         Bucket bucket = cluster.bucket("case5");
                        Collection collection = bucket.defaultCollection();
                          double qend1 = System.currentTimeMillis();
                        result = cluster.query("select `user`.userID,`user`.userName,`user`.employeeCode,`user`.personalDetails.userEmail[0].emailAddress,`user`.userDateOfBirth,`user`.userAddress from case3 where `user`.userID=\"user1\" and document.documentType=\"01\" and document.featureID=\"101\" and document.tenantID=\"CUST1\"",QueryOptions.queryOptions().metrics(true));                           
                        double qend = System.currentTimeMillis();
                        System.out.println("1Reported execution time: "
                                + result.metaData().metrics());
                        System.out.println("1metaData"+result.metaData());                          
                        double qout = qend - qend1;
                        System.out.println("1"+cluster.diagnostics());
                        System.out.println("1Query time = " + qout);
                        for (JsonObject row : result.rowsAsObject()) {
                            System.out.println("1Found row: " + row);
                        }cluster.disconnect();
                        
                }
                catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
            }});

Output:


200
messageOK
{"message":"success","data":["query execution time : 677.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 19.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 18.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 18.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 129.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 39.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 17.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 197.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 41.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 20.0.....]}
200
messageOK
{"message":"success","data":["query execution time : 13.0.....]}

And for single execution its taking only 5ms. Is their any settings to do before executing parallel queries, why their is so much variation?? Please help me out!

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
stg
  • 67
  • 1
  • 6
  • Which version of Couchbase Server are you using? – Matthew Groves Oct 14 '20 at 15:50
  • 1
    Couchbase version 6.6.0 – stg Oct 15 '20 at 05:05
  • Community or Enterprise? – Matthew Groves Oct 15 '20 at 20:59
  • 1
    I am using enterprise one – stg Oct 16 '20 at 04:58
  • Here are some tips for improving the benchmarking code: 1) Store the result of System.currentTimeMillis() in a `long` instead of a `double`. 2) Better yet, measure elasped time using System.nanoTime() instead of System.currentTimeMillis(). 3) If you want to model a real application, create a single `Cluster` and share it between all threads. 4) Warm up the JVM by running several iterations before you start measuring performance. – dnault Oct 16 '20 at 23:10

0 Answers0