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
{ 
  "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 
}
Hide execution results

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
{ 
  "id" : "mytask-1", 
  "name" : "this is a sample task to spawn a slow aql query", 
  "created" : 1559776390.9211562, 
  "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" : "446", 
    "query" : "FOR sleepLoooong IN 1..5 LET sleepLoooonger = SLEEP(1000) RETURN sleepLoooong", 
    "bindVars" : { 
    }, 
    "started" : "2019-06-05T23:13:10Z", 
    "runTime" : 1.0443236827850342, 
    "state" : "executing", 
    "stream" : false 
  } 
]
Hide execution results

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
{ 
  "code" : 200 
}
[ ]
Hide execution results

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
{ 
  "code" : 200 
}
Hide execution results