SPAQL Query Performance

Hi,
I have a SPARQL query that took less than a second to get a response from the Virtuoso triple store. However, when sending a second query, the response from Virtuoso became slower. I conducted a test and executed 10 SPARQL queries consecutively. The response for the first query 0 seconds, the second query 1 Seconds, and so on, always the response time is increased for the next query. Executing the queries a lone the response for each query always less than 1 second. :Here are the response times for each query when I execute them consecutively:

0 Seconds
1 Seconds
2 Seconds
2 Seconds
3 Seconds
4 Seconds
4 Seconds
5 Seconds
6 Seconds
6 Seconds

here is my code:


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class SPARQLQueryExecutor {

    public static String executeQuery(String sparqlQuery) throws Exception {
        // SPARQL Endpoint and Graph URI
        String baseUrl = "http://host:0000/sparql";
        String graphUri = "http://graph.org";
        String format = "text/ntriples"; // Response format

         

        // Encode query parameters
        String encodedGraphUri = URLEncoder.encode(graphUri, StandardCharsets.UTF_8);
        String encodedQuery = URLEncoder.encode(sparqlQuery, StandardCharsets.UTF_8);
        String serviceURL = String.format("%s?default-graph-uri=%s&query=%s&format=%s",
                baseUrl, encodedGraphUri, encodedQuery, format);

        // Create connection
        URI uri = new URI(serviceURL);
        URL url = uri.toURL();
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "text/ntriples");
        conn.setRequestProperty("Connection", "close"); // Prevent persistent connections
        conn.setReadTimeout(10000); // 10 seconds timeout
        conn.setConnectTimeout(5000); // 5 seconds connection timeout

        // Read response
        StringBuilder responseTriples = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
            String line;
            while ((line = reader.readLine()) != null) {
                responseTriples.append(line).append("\n");
            }
        } finally {
            conn.disconnect(); // Ensure the connection is closed
        }

        return responseTriples.toString();
    }

     
}

What am I missing?

It seems executing multiple queries asynchronously using CompletableFuture library can solve the issue