Queries Module

const queries = require('@arangodb/aql/queries')

The query module provides the infrastructure for working with currently running AQL queries via arangosh.

Properties

queries.properties() Returns the servers current query tracking configuration; we change the slow query threshold to get better results:

arangosh> var queries = require("@arangodb/aql/queries");
arangosh> queries.properties();
arangosh> queries.properties({slowQueryThreshold: 1});
arangosh> queries.properties({slowStreamingQueryThreshold: 1});
Show execution results
Hide execution results
{ 
  "code" : 200, 
  "enabled" : true, 
  "trackSlowQueries" : true, 
  "trackBindVars" : true, 
  "maxSlowQueries" : 64, 
  "slowQueryThreshold" : 10, 
  "slowStreamingQueryThreshold" : 10, 
  "maxQueryStringLength" : 4096 
}
{ 
  "code" : 200, 
  "enabled" : true, 
  "trackSlowQueries" : true, 
  "trackBindVars" : true, 
  "maxSlowQueries" : 64, 
  "slowQueryThreshold" : 1, 
  "slowStreamingQueryThreshold" : 10, 
  "maxQueryStringLength" : 4096 
}
{ 
  "code" : 200, 
  "enabled" : true, 
  "trackSlowQueries" : true, 
  "trackBindVars" : true, 
  "maxSlowQueries" : 64, 
  "slowQueryThreshold" : 1, 
  "slowStreamingQueryThreshold" : 1, 
  "maxQueryStringLength" : 4096 
}

Currently running queries

We create a task that spawns queries, so we have nice output. Since this task uses resources, you may want to increase period (and not forget to remove it… afterwards):

arangosh> var theQuery = 'FOR sleepLoooong IN 1..5 LET sleepLoooonger = SLEEP(1000) RETURN sleepLoooong';
arangosh> var tasks = require("@arangodb/tasks");
arangosh> tasks.register({
........>  id: "mytask-1",
........>  name: "this is a sample task to spawn a slow aql query",
........>  command: "require('@arangodb').db._query('" + theQuery + "');"
........> });
arangosh> queries.current();
Show execution results
Hide execution results
{ 
  "id" : "mytask-1", 
  "name" : "this is a sample task to spawn a slow aql query", 
  "created" : 1680612414.8291254, 
  "type" : "timed", 
  "offset" : 0, 
  "command" : "(function (params) { require('@arangodb').db._query('FOR sleepLoooong IN 1..5 LET sleepLoooonger = SLEEP(1000) RETURN sleepLoooong'); } )(params);", 
  "database" : "_system" 
}
[ 
  { 
    "id" : "68557", 
    "database" : "_system", 
    "user" : "root", 
    "query" : "FOR sleepLoooong IN 1..5 LET sleepLoooonger = SLEEP(1000) RETURN sleepLoooong", 
    "bindVars" : { 
    }, 
    "started" : "2023-04-04T12:46:54Z", 
    "runTime" : 1.027637543156743, 
    "state" : "executing", 
    "stream" : false 
  } 
]

The function returns the currently running AQL queries as an array.

Slow queries

The function returns the last AQL queries that exceeded the slow query threshold as an array:

arangosh> queries.slow();
Show execution results
Hide execution results
[ ]

Clear slow queries

Clear the list of slow AQL queries:

arangosh> queries.clearSlow();
arangosh> queries.slow();
Show execution results
Hide execution results
{ 
  "code" : 200 
}
[ ]

Kill

Kill a running AQL query:

arangosh> var runningQueries = queries.current().filter(function(query) {
........>   return query.query === theQuery;
........> });
arangosh> queries.kill(runningQueries[0].id);
Show execution results
Hide execution results
{ 
  "code" : 200 
}