Query metrics MBean
Use the query metrics MBean to:
-
Troubleshoot query performance.
-
Tune DSE Search configuration, such as the search index schema and caches; and tune server resources, such as the JVM heap.
-
Record the amount of time spent to run several main phases of a distributed query on the search index.
-
Measure latency in microseconds.
To group by query, provide an additional query.name parameter.
For example, for a search index named demo.solr
with an indexed field named type, use the following URL to provide the additional query.name parameter:
http://localhost:8983/solr/demo.solr/select/?q=type:1&query.name=myquery
All metrics collected under a given query name are recorded and retrieved separately. If a query name is not provided, all metrics are recorded together.
Main operational phases
The main phases of a distributed query operation are:
- ENQEUE
-
Comprises the time spent by a query request waiting for a thread to execute.
- EXECUTE
-
Comprises the time spent by a single shard to execute the actual index query. This value is computed on the local node executing the shard query.
- RETRIEVE
-
Comprises the time spent by a node to retrieve a single row from the database. This value will be computed on the local node hosting the requested data.
- COORDINATE
-
Comprises the total amount of time spent by the coordinator node to distribute the query and gather/process results from shards. This value is computed only on query coordinator nodes. Includes RETRIEVE and EXECUTE in the total.
- TOTAL
-
Comprises the total server-side time for a search query. Includes COORDINATE and ENQEUE in the total.
Query metrics MBean set operations
Operations are:
- setEnabled(boolean enabled)
-
Enables/disables metrics recording. Enabled by default.
- isEnabled()
-
Checks if metrics recording is enabled.
- getLatencyPercentile(String phase, String query, double percentile)
-
Gets a query latency percentile by its query name, which is optional and can be null, and phase.
- getRecordedLatencyCount(String phase, String query)
-
Gets the total count of recorded latency metrics by its query name, which is optional and can be null, and phase.
- getUnrecordedLatencyCount()
-
Gets the total count of unrecorded latency values due to exceeding the maximum tracked latency, which is 10 minutes.
- resetLatency(String query)
-
Resets latency metrics for the given query name, which is optional and can be null.
- resetLatencies()
-
Resets all latency metrics.
Query metrics MBean attributes
Attributes are:
- Enabled
-
Indicates whether metrics recording is enabled or disabled.
- EnqueuedRequestCount
-
Indicates the number of client requests that are currently waiting for a query thread.
If the value of the EnqueuedRequestCount MBean increases, or stabilizes above zero for a prolonged period, then DSE Search has reached a point of maximum throughput, where additional load will only increases latencies.
To access this attribute, use the
-f
option with thenodetool sjk
command, as shown in the following example.nodetool sjk -p 7199 mx -mg \ -b com.datastax.bdp:type=search,index=demo.solr,name=QueryMetrics \ -f EnqueuedRequestCount
- UnrecordedLatencyCount
-
The total count of unrecorded latency values due to exceeding the maximum tracked latency, which is 10 minutes.